別ファイルから値を取得するサンプルをご提示します。
これを検証してから本題に入ったほうがいいかもしれません・・。
内容は、別ファイルを開いてA1セルの値を自分のエクセル・シート名dataのA1セルに
貼り付けて閉じるというものです。
sub test
Dim file As String
Dim wb1 As Workbook
Dim sh1 As Worksheet
'test.xlsxはこのエクセルファイルと同じフォルダ内におく
'test.xlsxのテストシートのA1セルを呼び出し元のdataシートのA1セルにコピーする
'処理が終わったらtest.xlsxを閉じる
book="test.xlsx"
sheetname="テスト"
file = ThisWorkbook.Path & "\" & book
'■bookを開く
Set wb1 = Workbooks.Open(file)
Set sh1 = workseeh(sheetname)
'■処理記述
//ここに処理を記述
msgbox"処理実行!!"
ThisWorkbook.Sheets("data").range("A1").value = wb1.sh1.range("A1").value
'■開いたbookを閉じる
wb1.Close savechanges:=Flase '(True)
Set wb1 = Nothing '変数初期化
Set sh1 = Nothing'変数初期化
end sub
1Option Explicit
23Private Sub UserForm_Initialize()
4 Set一覧取得
5 With Me.ListBox1
6 .List = ThisWorkbook.Worksheets(1).Range("B1").CurrentRegion.Value
7 .ColumnWidths = "100;0;0;0"
8 End With
9End Sub
1011Sub Set一覧取得()
12 With ThisWorkbook.Worksheets(1).Cells(1)
13 'シートの初期化
14 .CurrentRegion.ClearContents
1516 'ファイルのフルパス一覧の取得
17 Setファイルのプルパス一覧 .Cells
1819 'シート名の一覧取得
20 Setシートの一覧 .CurrentRegion
2122 '作業列のクリア
23 .EntireColumn.ClearContents
24 End With
25End Sub
2627Sub Setファイルのプルパス一覧(ByRef c As Range)
28 Const csPath As String = "C:\Users\Public\test\"
29 Dim ixRow As Long
30 Dim buf As String
3132 buf = Dir(csPath & "*.xlsx")
33 Do Until Len(buf) = 0
34 ixRow = ixRow + 1
35 c(ixRow, "A").Value = csPath & buf
36 buf = Dir()
37 Loop
38End Sub
3940Sub Setシートの一覧(ByRef rng As Range)
41 Dim c As Range
42 Dim wbk As Workbook
43 Dim wsh As Worksheet
44 Dim ixRow As Long
4546 For Each c In rng
47 Set wbk = Workbooks.Open(c.Value)
48 For Each wsh In wbk.Worksheets
49 ixRow = ixRow + 1
50 With rng(ixRow, "B")
51 .Offset(, 1).Value = wbk.FullName
52 .Offset(, 2).Value = wsh.Name
53 .Offset(, 3).Value = wsh.UsedRange.Address(False, False, xlA1, True)
54 .Value = Get表示名(.Offset(, 3).Value)
55 End With
56 Next
57 wbk.Close False
58 Next
59End Sub
6061Function Get表示名(ByVal sName As String) As String
62 Dim i As Long
6364 i = InStr(sName, "'")
65 If i > 0 Then
66 Get表示名 = Left(sName, i - 1)
67 End If
68End Function
追加)
動的にメニューを管理する例)--配列を使わない場合
masterシートのA列に商品名があるとして、自動でセットします。
Private Sub UserForm_Initialize()
Dim cnt As Long
Dim 商品 As String
'最終行を数える
cnt = Sheets("master").Cells(Rows.Count, 1).End(xlUp).Row
With ListBox1
For i = 1 To cnt
商品 = Sheets("master").Range("A" & i).value
.AddItem 商品
Next
End With
End Sub
きれいに記述されているサンプルがWEB上にあると思いますので
取り急ぎ。。。