Excelで質問です。ListBoxの項目を別bookから読込むには
VBA初心者です。
book-AのListBox1からbook-Bのセルの項目を読み込むことは可能なのでしょうか。
Excel2003です。
book-AのUserForm1に下記のコードを実行しても構文エラーになってしまいます。
book-Aとbook-Bは同じフォルダに入っています。出来ればbook-Bを閉じた状態で実行できれば良いのですが
Private Sub UserForm_Initialize()
ListBox1.RowSource =[book-B.xls]Sheet1!A1:A10
End Sub
No.5ベストアンサー
- 回答日時:
●Book-Bを開かないで処理
'-------------------------------------------------
Private Sub UserForm_Initialize()
Dim i As Long
Dim myVal
Dim myPath As String
myPath = "'" & ThisWorkbook.Path & "\[Book-B.xls]Sheet1'!"
For i = 1 To 10
myVal = ExecuteExcel4Macro(myPath & "R" & i & "C1")
ListBox1.AddItem myVal
Next i
End Sub
'--------------------------------------------------
●Book-Bを開くが非表示にして処理
'--------------------------------------------------
Private Sub UserForm_Initialize()
Dim BK2 As Workbook
Set BK2 = Workbooks.Open(ThisWorkbook.Path & "\Book-B.xls")
ActiveWindow.Visible = False '●ブック非表示
ListBox1.List = BK2.Sheets("Sheet1").Range("A1:A10").Value
BK2.Close False
End Sub
'------------------------------------------------------
以上です。
No.4
- 回答日時:
>book-Aとbook-Bは同じフォルダに入っています。
出来ればbook-Bを閉じた状態で実行できれば良いのですがそういうふうに言われると、裏技的になりますね。
>ListBox1.RowSource =[book-B.xls]Sheet1!A1:A10
RowSource っていうことはないのですが、ExecuteExcel4Macro で配列で取る方法はあっても、配列では出力しないのです。以下は、ROWSを使っているように、縦にデータがあります。
'//
Private Sub UserForm_Initialize()
Dim myFormula As String
Dim rowCount As Long
Dim i As Long, j As Long
Dim Ar() As Variant
'パス名(フルパスで)
Const myPath As String = "'C:\My Documents\[book-B.xls]Sheet1'!$I$1:$I$16"
'R1C1に変更(上記の数式が、R1C1なら以下は不要)
myFormula = Application.ConvertFormula(myPath, xlA1, xlR1C1, xlAbsolute)
rowCount = Application.ExecuteExcel4Macro("ROWS(" & myFormula & ")")
ReDim Ar(rowCount - 1)
For i = 1 To rowCount
Ar(j) = Application.ExecuteExcel4Macro("INDEX(" & myFormula & "," & i & ",0 )")
j = j + 1
Next
ListBox1.List = Ar
End Sub
回答ありがとうございます。
早速実行してみたのですが、うまく働かないようです。
コードは完璧でも私が未熟でうまく生かせない可能性が大きいです。
大変申し訳ありません。これからこのコードを理解できるように努力したいと思います。
ありがとうございました。
No.3
- 回答日時:
とりあえず説明つきで簡単に書きますね^^
詳細があればいつでもPG変更して載せますよ♪♪
頑張れーーーー♪
Dim A_book As String
Dim B_book As String
Dim tmp As String
'現在アクティブなbook名を取得します
A_book = ActiveWorkbook.Name
'Workbooks.Open でファイル名を指定してbookを開きます
'ActiveWorkbook.Path は現在実行中のbookのディレクトリを意味します
Workbooks.Open Filename:=ActiveWorkbook.Path & "\book-B.xls"
B_book = ActiveWorkbook.Name '
'bookを開くとそこがアクティブになるのでbook-B.xlsの"A1"の値を取得します
tmp = Range("A1").Value
'bookを閉じます
Windows(B_book).Close
'コピー完了です
Range("A1").Value = tmp
回答ありがとうございます。
早速実行してみたのですが、うまく働かないようです。
コードは完璧でも私が未熟でうまく生かせない可能性が大きいです。
大変申し訳ありません。これからこのコードを理解できるように努力したいと思います。
ありがとうございました。
No.2
- 回答日時:
下記で、対応可能と思います。
処理上、どうしてもファイルBを開く必要がありますが
裏で処理をさせれば、ユーザが意識する事は有りません。
いかがでしょうか?
コード内の★の部分を変更すれば、
他の条件でも対応可能です。
Dim B_FileName
Dim B_FILE_PATH
Private Sub UserForm_Initialize()
Dim xlApp
Dim xlA_Book
Dim xlB_Book
Dim xlA_Sheet
Dim xlB_Sheet
Dim arrTmp As Variant
Dim StrVal As String
Dim FormList As Variant
Dim lngI As Long
'==========================================
B_FileName = "\book-B.xls" '★
B_FILE_PATH = ThisWorkbook.Path & B_FileName
'==========================================
Set xlApp = Excel.Application
Set xlA_Book = ThisWorkbook 'Workbook
Set xlA_Sheet = xlA_Book.ActiveSheet 'Worksheet
Workbooks.Open B_FILE_PATH
Set xlB_Book = ActiveWorkbook
Set xlB_Sheet = xlB_Book.Worksheets("Sheet1") 'Worksheet
ActiveWindow.WindowState = xlMinimized
'リスト情報を取得する
With xlB_Sheet
arrTmp = .Range(.Cells(1, 1), .Cells(10, 1)) '★
End With
'FileBを閉じる
xlApp.DisplayAlerts = False
xlB_Book.Close
xlApp.DisplayAlerts = True
' 'リストに表示するために置き換える
ReDim FormList(0)
For lngI = 1 To UBound(arrTmp, 1)
StrVal = arrTmp(lngI, 1) 'セル内の文字列を格納する
If StrVal <> "" Then '空白はリストに表示しない
FormList(UBound(FormList)) = StrVal
ReDim Preserve FormList(UBound(FormList) + 1) '配列を一つ増やす
End If
Next
'FileAをアクティブにする
xlA_Sheet.Activate
ListBox1.List = FormList
End Sub
長文による早速の回答ありがとうございます。
ListBox1に項目が表示されました。しかし、UserForm1を表示したと同時に、ウインドウが縮小される
現象が起こるようです。
No.1
- 回答日時:
VBAが大好き社会人です笑
book-Bのセルの値をbook-Aのセルに持ってきたいって事でいいですよね?
すぐにPGを作成してあげるので返答よろしくです。
詳しく何をどうしたいか説明してくれれば全部作ってサンプルPGを載せますよ^^
私にまかせて下さい!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) バックグラウンドのプロセスのエクセルを閉じる方法 4 2022/05/12 15:39
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) Excel VBA マクロ 先頭行の固定とオートフィルター設定を全てのシートに適用したいです 1 2022/11/12 15:32
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- TOEFL・TOEIC・英語検定 enough to構文にforが入る場合 1 2022/10/02 17:02
- Excel(エクセル) 同じExcelのBOOK内で 1枚目のシートのA1のセルにデータを 入れると2枚目のシートのC1のセ 1 2022/10/25 09:40
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
リストボックスの項目に、他のブックのセルの値を設定するには?
Access(アクセス)
-
Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。
Visual Basic(VBA)
-
Excel にて、 リストボックスのデーターを別ブックのセルに転記するVBAをご教授願います
Excel(エクセル)
-
-
4
エクセルVBA 別シートからのコンボボックス連動
Visual Basic(VBA)
-
5
別ブックからユーザーフォームを実行したい~!!
Visual Basic(VBA)
-
6
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
7
UserForm1.Showでエラーになります。
工学
-
8
リストボックスの選択解除
Visual Basic(VBA)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
EXCEL VBA コンボボックス、テキストボックスが未入力のときメッセージを表示する方法
Excel(エクセル)
-
11
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
12
エクセルVBA 別のブックのユーザーフォームを開く
Excel(エクセル)
-
13
【Excel】プルダウンのリストを別ブックから読み込めないですか?
Excel(エクセル)
-
14
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
15
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
16
エクセルVBAのフォームを最前面にする方法を教えてください。
Visual Basic(VBA)
-
17
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
18
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
19
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
20
EXCELで他のファイルデータをドロップダウンさせるには?
その他(コンピューター・テクノロジー)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
会社PCのメールが更新されない
-
英数字のみ全角から半角に変換
-
【Microsoft Forms】回答を削除...
-
VLOOKUP関数について
-
Microsoft Formsの「個人情報や...
-
【スプレッドシート】指定の日...
-
outlookのメールが固まってしま...
-
vb.net オブジェクト指向につい...
-
Outlook で宛先が複数の場合の人数
-
【スプレッドシート】白色のセ...
-
1つのPCに「Excel 2010」「Exc...
-
エクセルでXLOOKUP関数...
-
Microsoft Formsで「応答」から...
-
Office 2021 Professional Plus...
-
エクセルのシフト表を簡単にGoo...
-
Microsoft Edgeの「ニュースと...
-
Microsoft Officeに似たキング...
-
Excel VBA 日程表からスケジュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
マイクロソフト 一時使用コード...
-
英数字のみ全角から半角に変換
-
Office2021を別のPCにインスト...
-
Microsoft Formsの「個人情報や...
-
officeビジネス型のワードやエ...
-
会社PCのメールが更新されない
-
【スプレッドシート】指定の日...
-
Microsoft Officeを2台目のPCに...
-
何このステータスバー
-
2つのシートの一致する行のセ...
-
会社のTeamsのことで相談です。...
-
エクセルにリンクされるのをし...
-
Windows 11で、IME言語バー(IM...
-
office2010とoffice365の共存で...
-
Microsoftのパソコンです。 エ...
-
エクセルでXLOOKUP関数...
-
Excel関数について質問ですm(__)m
-
VBA
-
自分の専門分野の仕事。初見で...
おすすめ情報