今「結果.xlsm」でユーザーフォームを作成しております。
ユーザーフォームではリストボックスを2つ並べています。
一つ目のリストボックスでブックを選び、
二つ目のリストボックスでシートを選びます。
選んだシートの内容全てをコピーして
「結果.xlsm」の「データ」シートに貼り付けたいと思っています。
リストボックス1で
「氏名1」「氏名2」「氏名3」「氏名4」というブックを選択します。
リストボックス2で
それぞれのブックの中の「商品1~4」「商品11~17」「商品22~26」「商品33~40」からシートを選択します。
リストボックスを並べて商品名を選ぶところまではできたのですが、
そこから先に進めず困っておりました。
ここから先をどのように記述したら希望の動きになるか教えていただけませんでしょうか?
また、ブックやシートは固定ではなく増えたり減ったりします。
.AddItemで追加削除するのではなく、定義を追加する方法もあれば教えてください。
よろしくお願いいたします。
Private Sub UserForm_Initialize() With ListBox1 .AddItem "氏名1" .AddItem "氏名2" .AddItem "氏名3" .AddItem "氏名4" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case ListBox1.List(ListBox1.ListIndex) Case "氏名1" .AddItem "商品1" .AddItem "商品2" .AddItem "商品3" .AddItem "商品4" Case "氏名2" .AddItem "商品11" .AddItem "商品12" .AddItem "商品13" .AddItem "商品14" .AddItem "商品15" .AddItem "商品16" .AddItem "商品17" Case "氏名3" .AddItem "商品22" .AddItem "商品23" .AddItem "商品24" .AddItem "商品25" .AddItem "商品26" Case "氏名4" .AddItem "商品33" .AddItem "商品34" .AddItem "商品35" .AddItem "商品36" .AddItem "商品37" .AddItem "商品38" .AddItem "商品39" .AddItem "商品40" End Select .ListIndex = 0 End With End Sub
ブックのパスは固定なのですか?
meg_さんありがとうございます。
はい、パスは固定で大丈夫です
とりあえずユーザーが指定したブックを開き、ユーザーが指定したシートを開くコードを書きましょう。
すみません、そこもできておりません。
そのため一旦はOpenFileNameでユーザーにファイルを開いてもらおうとしました。
しかし、やはり2つのコンボボックス か2つのリストボックスでブックとシートを選んで開きたいと思い、調べておりました。
シートのコピーの前にそこでつまづいてしまっております。
VBAでExcelブックを開く方法は調べればすぐ分かりますよ。(フォルダパスとファイル名は既に決まっているので調べてコードを書きましょう!)
別ファイルから値を取得するサンプルをご提示します。
これを検証してから本題に入ったほうがいいかもしれません・・。
内容は、別ファイルを開いて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
meg_さんありがとうございます。
もう一度チャレンジしてみます。
ymakotoさんありがとうございます。
後ほどファイルとシートを作ってやってみます。
回答2件
あなたの回答
tips
プレビュー