私はVBAが初めてなので、数日間これに苦労しています。
Word に連絡先を含むコンボボックスがあり、1 つの列 (すべての連絡先の名前) を持つ Excel ファイル (contacts.xls) もあります。Word ドキュメントを開くと、マクロは Excel ファイルのすべての名前をコンボボックスに入力する必要があります。
Word 2007 の実際の例を送ってもらうことはできますか? 非常に単純に思えますが、これを機能させることはできません...
前もって感謝します!
私は今、あなたのためにより完全なコードを持っています:
Option Explicit
Sub TestDropDownFromExcel()
Dim counter As Long
Dim xlApp As Excel.Application
Dim xlBook As Workbook
Dim oCC As ContentControl
Set oCC = ActiveDocument.ContentControls(1)
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("C:\Path\To\MyFile.xlsx")
If xlBook Is Nothing Then
Exit Sub
End If
oCC.DropdownListEntries.Clear
For counter = 1 To 10
oCC.DropdownListEntries.Add Text:=xlBook.Worksheets(1).Cells(counter, 1), Value:=CStr(counter)
Next counter
xlApp.Visible = True
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
ここで行われているエラー チェックはほとんどないことに注意してください。また、ユーザーに見られたくない場合は、最後に .Visible を呼び出すのではなく、単純に .Close を呼び出すことができます (最終的なプロジェクトでは、これがおそらく望ましいでしょう。参照 (= Nothing) は、持っていますが、VBA は実行の最後に自動的にクリーンアップします。
Word で Excel ファイルから読み取る場合は、そのファイルを開く必要があります。次のようなコードを使用します。
Dim oExcel As Object
Dim oBook As Object
Dim oSheet As Object
'Start a new workbook in Excel
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open("FileName.xlsx")
また、おそらく VB プロジェクトの [ツール] → [参照設定] に移動して、マシン上にある Excel ライブラリを見つけます (もちろん、チェックしてください)。必要に応じてこれを回避する方法はありますが、より簡単です。
次に、ワークブックから値を読み取ることができます。
oBook.Worksheets(1).cells(1,1)
それをコンボボックスに入れるための構文が何であるかは完全にはわかりません。vbe in word で「コンボボックス オブジェクト メンバー」を検索します。リスト プロパティなどがあります。
申し訳ありませんが、私は現在 Linux マシンを使用しているため、正確なコードをデバッグすることはできません。