Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7884 / 13645 ツリー ←次へ | 前へ→

【36269】ファイルを開いた際に以前設定したコンボボックス内の値が変更されてしまう ともた 06/3/27(月) 12:05 質問[未読]
【36272】Re:ファイルを開いた際に以前設定したコン... Kein 06/3/27(月) 12:52 発言[未読]
【36275】Re:ファイルを開いた際に以前設定したコン... ともた 06/3/27(月) 13:47 回答[未読]
【36278】Re:ファイルを開いた際に以前設定したコン... Kein 06/3/27(月) 14:24 発言[未読]
【36280】Re:ファイルを開いた際に以前設定したコン... ともた 06/3/27(月) 14:34 発言[未読]
【36281】Re:ファイルを開いた際に以前設定したコン... Kein 06/3/27(月) 15:12 回答[未読]
【36287】Re:ファイルを開いた際に以前設定したコン... ともた 06/3/27(月) 16:03 発言[未読]
【36291】Re:ファイルを開いた際に以前設定したコン... ともた 06/3/27(月) 16:22 発言[未読]
【36293】Re:ファイルを開いた際に以前設定したコン... ともた 06/3/27(月) 16:38 お礼[未読]
【36292】Re:ファイルを開いた際に以前設定したコン... Kein 06/3/27(月) 16:30 回答[未読]

【36269】ファイルを開いた際に以前設定したコンボ...
質問  ともた  - 06/3/27(月) 12:05 -

引用なし
パスワード
    初めましてお世話になります。
困ったことがありまして力添えいただければと思います。
現象は以下の通りになります。

1)シート上に[ボタン1.]を貼付。
2)[ボタン1.]押下時のイベントにて、別ファイルを読み込みシート上のコンボボックス内へセット
3)保存後、ファイルを閉じる
4)再度、同一ファイルを開く
5)コンボボックス内の値が変わってしまっている

回避させるためにはいかがしたら良いでしょうか?

【36272】Re:ファイルを開いた際に以前設定したコ...
発言  Kein  - 06/3/27(月) 12:52 -

引用なし
パスワード
   >1)シート上に[ボタン1.]を貼付。
>2)[ボタン1.]押下時のイベントにて
の、代わりにブックオープンイベントにしてしまったら、どうでしょーか ?
Sub Auto_Open() というタイトルに変更します。

【36275】Re:ファイルを開いた際に以前設定したコ...
回答  ともた  - 06/3/27(月) 13:47 -

引用なし
パスワード
   ▼Kein さん:
>>1)シート上に[ボタン1.]を貼付。
>>2)[ボタン1.]押下時のイベントにて
>の、代わりにブックオープンイベントにしてしまったら、どうでしょーか ?
>Sub Auto_Open() というタイトルに変更します。

取込べきファイルを使用者に選択をさせたいため、
[ボタン1]押下時にファイル選択ダイアログを表示させております。

宜しくお願いいたします

【36278】Re:ファイルを開いた際に以前設定したコ...
発言  Kein  - 06/3/27(月) 14:24 -

引用なし
パスワード
   現在、ボタンを押したとき起動するマクロは、どんなコードになってますか ?

【36280】Re:ファイルを開いた際に以前設定したコ...
発言  ともた  - 06/3/27(月) 14:34 -

引用なし
パスワード
   ▼Kein さん:
>現在、ボタンを押したとき起動するマクロは、どんなコードになってますか ?

少々長くなりますが・・・
1.:ボタン押下時
Private Sub BTN_KKK_INSRT_Click()

On Error GoTo Error

 Dim varGetFile As Variant
 
 'ファイルを開くダイアログを表示します。
 varGetFile = Application.GetOpenFilename("iniファイル(*.ini), *.ini", , "価格ファイル選択してください。")
 
 If varGetFile = False Then
  MsgBox "必要事項が空白のため、処理を中止します。"
  Exit Sub
 End If

 ' Iniファイルを読みこんで、取得した価格情報をExcel内へセットさせる
 If Not prvSetExcel(CStr(varGetFile)) Then
  MsgBox "価格情報設定に失敗しました。"
  Exit Sub
 End If
 
 Exit Sub
Error:
 
  MsgBox "予期せぬエラーです。" & vbNewLine & _
      Err.Number & vbNewLine & _
      Err.Description
  End
End Sub

2.:1.内より呼び出される関数
Private Function prvSetExcel(strGetFileName As String) As Boolean

 ' 変数の宣言
 Dim strFileName As String
 Dim Obj As OLEObject
 Dim varRackInfo(6, 2) As Variant
 
 prvSetExcel = False
 
 ' ファイル名
 strFileName = strGetFileName
 
 '***<< (初期費用)コロケーションサービス >>***
 ' オープンスペース
 Range("AX7").Value = prvGetIniString("Shoki_Koroke", "Open_Space", "0", strFileName)
 
 ' その他(個別電源・200V20A)
 Range("AF25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_200V20A", "0", strFileName)
 
 ' その他(個別電源・200V30A)
 Range("AN25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_200V30A", "0", strFileName)
 
 ' その他(個別電源・200V40A)
 Range("AV25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_200V40A", "0", strFileName)
 
 ' その他(個別電源・200V50A)
 Range("BD25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_200V50A", "0", strFileName)
 
 ' その他(個別電源・200V60A)
 Range("BL25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_200V60A", "0", strFileName)
 
 ' その他(個別電源・100V20A)
 Range("BT25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V20A", "0", strFileName)
 
 ' その他(個別電源・100V30A)
 Range("CB25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V30A", "0", strFileName)
 
 ' その他(個別電源・100V40A)
 Range("CJ25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V40A", "0", strFileName)
 
 ' その他(個別電源・100V50A)
 Range("CR25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V50A", "0", strFileName)
 
 ' その他(個別電源・100V60A)
 Range("CZ25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V60A", "0", strFileName)
 
 ' その他(個別電源・100V6A)
 Range("DH25").Value = prvGetIniString("Shoki_Koroke", "Kobetu_100V6A", "0", strFileName)
 
 '***<< (月額費用)コロケーションサービス >>***
 ' オープンスペース
 Range("BN7").Value = prvGetIniString("Getugaku_Koroke", "Open_Space", "0", strFileName)
 
 ' その他(個別電源・200V20A)
 Range("AF26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_200V20A", "0", strFileName)
 
 ' その他(個別電源・200V30A)
 Range("AN26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_200V30A", "0", strFileName)
 
 ' その他(個別電源・200V40A)
 Range("AV26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_200V40A", "0", strFileName)
 
 ' その他(個別電源・200V50A)
 Range("BD26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_200V50A", "0", strFileName)
 
 ' その他(個別電源・200V60A)
 Range("BL26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_200V60A", "0", strFileName)
 
 ' その他(個別電源・100V20A)
 Range("BT26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V20A", "0", strFileName)
 
 ' その他(個別電源・100V30A)
 Range("CB26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V30A", "0", strFileName)
 
 ' その他(個別電源・100V40A)
 Range("CJ26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V40A", "0", strFileName)
 
 ' その他(個別電源・100V50A)
 Range("CR26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V50A", "0", strFileName)
 
 ' その他(個別電源・100V60A)
 Range("CZ26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V60A", "0", strFileName)
 
 ' その他(個別電源・100V6A)
 Range("DH26").Value = prvGetIniString("Getugaku_Koroke", "Kobetu_100V6A", "0", strFileName)
 
 '***<< (初期費用)ネットワークサービス >>***
 ' セグメント設定費
 Range("AX8").Value = prvGetIniString("Shoki_NW", "Seg", "0", strFileName)
 
 ' 専用接続100MB
 Range("AX9").Value = prvGetIniString("Shoki_NW", "Senyo_100MB", "0", strFileName)
 
 ' 専用接続1GB
 Range("AX10").Value = prvGetIniString("Shoki_NW", "Senyo_1GB", "0", strFileName)
 
 '***<< (月額費用)ネットワークサービス >>***
 ' 専用接続100MB
 Range("BN9").Value = prvGetIniString("Getugaku_NW", "Senyo_100MB", "0", strFileName)
 
 ' 専用接続1GB
 Range("BN10").Value = prvGetIniString("Getugaku_NW", "Senyo_1GB", "0", strFileName)
 
 ' 共用接続100MB
 Range("BN11").Value = prvGetIniString("Getugaku_NW", "Kyoyo_100MB", "0", strFileName)
 
 ' 共用接続1GB
 Range("BN12").Value = prvGetIniString("Getugaku_NW", "Kyoyo_1GB", "0", strFileName)
 
 ' 基本料金
 Range("DP26").Value = prvGetIniString("Kihon", "Tanka", "0", strFileName)
 
 ' コンボボックス内へセットする値を配列にセット<<(初期費用)・(月額費用)・ラック仕様の順>>
 varRackInfo(0, 0) = "0"
 varRackInfo(0, 1) = "0"
 varRackInfo(0, 2) = ""
 
 varRackInfo(1, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_1", "0", strFileName))
 varRackInfo(1, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_1", "0", strFileName))
 varRackInfo(1, 2) = "1/2ラック 60A : 100V/30A ×2"
 
 varRackInfo(2, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_2", "0", strFileName))
 varRackInfo(2, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_2", "0", strFileName))
 varRackInfo(2, 2) = "1/2ラック 60A : 100V/30A ×4"
 
 varRackInfo(3, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_3", "0", strFileName))
 varRackInfo(3, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_3", "0", strFileName))
 varRackInfo(3, 2) = "1/2ラック その他"
 
 varRackInfo(4, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_4", "0", strFileName))
 varRackInfo(4, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_4", "0", strFileName))
 varRackInfo(4, 2) = "1ラック   60A : 100V/30A ×2"
 
 varRackInfo(5, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_5", "0", strFileName))
 varRackInfo(5, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_5", "0", strFileName))
 varRackInfo(5, 2) = "1ラック   60A : 100V/30A ×4"
 
 varRackInfo(6, 0) = CStr(prvGetIniString("Shoki_Koroke", "Rack_6", "0", strFileName))
 varRackInfo(6, 1) = CStr(prvGetIniString("Getugaku_Koroke", "Rack_6", "0", strFileName))
 varRackInfo(6, 2) = "1ラック   その他"
 
 ' 存在しているコンボボックス内の隠し列にセット
 For Each Obj In ActiveSheet.OLEObjects

  If Obj.Name Like "ComboBox*" Then
   Obj.Object.ColumnCount = 3        '表示列数の設定
   Obj.Object.ColumnWidths = "0cm;0cm;4.0cm"
   Obj.Object.List = varRackInfo
   Obj.Object.ListIndex = -1
  End If
 Next
 
 prvSetExcel = True
End Function


すぐ、直上のFor文にて、シート上に存在するコンボボックスに値をセットしております。

【36281】Re:ファイルを開いた際に以前設定したコ...
回答  Kein  - 06/3/27(月) 15:12 -

引用なし
パスワード
   ふむふむなるほど。そーすると varRackInfo という配列は 5行×3列 の2次元配列
なわけですね。それぐらいなら初期値を手入力しても、それほど面倒ではないと
思いますので、コンボボックスを配置しているシートの IT1:IV5 の範囲に、手入力で
初期値を入れて下さい。そしてシートモジュールに以下のマクロを追加し・・

Private Sub Worksheet_Activate()
  Dim CbV As Variant
  Dim Obj As OLEObject

  If Not IsEmpty(Range("IV5").Value) Then
   CbV = Range("IT1:IV5").Value
   For Each Obj In ActiveSheet.OLEObjects
     If Left$(Obj.Name, 3) = "Com" Then
      Obj.Object.List = CbV
     End If
   Next
  End If
End Sub

ユーザー定義関数の最後の方に・・

 For Each Obj In ActiveSheet.OLEObjects
  If Obj.Name Like "ComboBox*" Then
   Obj.Object.ColumnCount = 3
   Obj.Object.ColumnWidths = "0cm;0cm;4.0cm"
   Obj.Object.List = varRackInfo
   Obj.Object.ListIndex = -1
  End If
 Next
 Range("IT1:IV5").Value = varRackInfo '←これを追加してみて下さい。
 prvSetExcel = True
End Function

【36287】Re:ファイルを開いた際に以前設定したコ...
発言  ともた  - 06/3/27(月) 16:03 -

引用なし
パスワード
   Kein さん
 お世話になってます。
Keinさんはもしかして、IT1:IT5エリアのセルにコンボボックス内の値を
退避させてはどうか?
というアドバイスでしょうか?


Worksheet_Activateイベントでは再度ファイルを開いた際にやはり、
コンボボックスの値は変更してしまいました。
Workbook_Openイベントにて、IT1:IV5エリアに退避した値を
コンボボックス内へセットすることは出来ましたが、
1行目はやはり、値がおかしくなり
前回選択した値を1件目として表示をすることが出来てません。。。。

【36291】Re:ファイルを開いた際に以前設定したコ...
発言  ともた  - 06/3/27(月) 16:22 -

引用なし
パスワード
   ▼ともた さん:
Kein さん

ひとまず。
ブックのCloseイベントにて現在選択されているインデックス番号を退避させて
Openイベントにて退避させたインデックス番号をセットする方法で
試みております・・・

またご報告します☆

【36292】Re:ファイルを開いた際に以前設定したコ...
回答  Kein  - 06/3/27(月) 16:30 -

引用なし
パスワード
   >退避させてはどうか?というアドバイスでしょうか?
そうです。
>Workbook_Openイベントにて、IT1:IV5エリアに退避した値を
>コンボボックス内へセットすることは出来ました
あ、それならイベントの種類はそれでいいとして、コードはどうしてますか ?
例えば

Private Sub Workbook_Open()
  Dim MyV As Variant
  Dim Obj As OLEObject

  With Worksheets("Sheet1")
   .Activate
   If Not IsEmpty(.Range("IV5").Value) Then
     MyV = .Range("IT1:IV").Value
     For Each Obj In .OLEObjects
      If Left$(Obj.Name, 3) = "Com" Then
        Obj.Object.List = CbV
      End If
     Next
    End If
  End With
End Sub

というようにしてますか ?
>1行目はやはり、値がおかしくなり
具体的にどうなるのか分からないので、原因を推測することも出来ません。
それにしても2行目以下は正常だとすると、ますます ??? ですけどね・・。

【36293】Re:ファイルを開いた際に以前設定したコ...
お礼  ともた  - 06/3/27(月) 16:38 -

引用なし
パスワード
   ▼ともた さん:
Kein さん

>ブックのCloseイベントにて現在選択されているインデックス番号を退避させて
>Openイベントにて退避させたインデックス番号をセットする方法で
>試みております・・・

無事要望どおりの動作をしました!!
ご助言ありがとうございますm(_ _)m

もう別件で質問したいことがあるので新規で投稿させて頂きます。

7884 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free