
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。
Visual Basic(VBA)
-
リストボックスの項目に、他のブックのセルの値を設定するには?
Access(アクセス)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
Excel にて、 リストボックスのデーターを別ブックのセルに転記するVBAをご教授願います
Excel(エクセル)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
ユーザーフォームに別シートからデータを反映させたい。
Visual Basic(VBA)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
9
EXCEL VBAのコンボボックスに取り込むリストについて
Excel(エクセル)
-
10
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
11
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
12
VBA リストボックス内の値を複数選択し別シートに転記するには
Visual Basic(VBA)
-
13
【VBA】ユーザーフォーム リストボックスのヘッダー設定方法
Visual Basic(VBA)
-
14
Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。
Visual Basic(VBA)
-
15
別ブックからユーザーフォームを実行したい~!!
Visual Basic(VBA)
-
16
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
17
ユーザーフォームへのデータ入力を繰り返す方法
Visual Basic(VBA)
-
18
コンボボックスのインデックスが不正
Visual Basic(VBA)
-
19
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
20
Excel VBA:フォーム←→セルのアクティブ切り替え
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
マイクロソフト オフィスのサポ...
-
エクセル 日付順に並べてかえた...
-
【Excel VBA】PDFを作成して,...
-
outlookのメールが固まってしま...
-
エクセルで質問です。 ハイパー...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
Teams内でショートカットって貼...
-
大学のレポート A4で1枚レポー...
-
Microsoft Formsの「個人情報や...
-
パソコンWindows11 Office2021...
-
Officeを開くたびの「再起動メ...
-
マクロ自動コピペ 貼り付ける場...
-
表の作成について
-
Excelで〇のついたものを抽出し...
-
office2019 のoutlookは2025年1...
-
エクセルからメールを作れるか...
-
エクセル:一定間隔で平均値を...
-
Excel 日付を比較したら、同じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft Officeを2台目のPCに...
-
大学のレポート A4で1枚レポー...
-
Office2021を別のPCにインスト...
-
エクセル 同じ数字を他の列に自...
-
エクセルからメールを作れるか...
-
Microsoft365、ページ設定がで...
-
快活CLUBについて 私用で使う書...
-
パソコンWindows11 Office2021...
-
libreoffice calcで行を挿入し...
-
エクセルで質問です。 ハイパー...
-
outlookのメールが固まってしま...
-
Microsoft Formsの「個人情報や...
-
別シートの年間行事表をカレン...
-
Microsoft Formsでクイズの解答...
-
マクロ自動コピペ 貼り付ける場...
-
Excelで〇のついたものを抽出し...
-
Excel 日付を比較したら、同じ...
-
エクセルで特定のセルの値を別...
-
Officeを開くたびの「再起動メ...
-
office2019 のoutlookは2025年1...
おすすめ情報