Заполните Word Combobox с данными Excel через VBA

Я новичок в VBA, поэтому я борюсь с этим уже пару дней.

У меня есть комбинированный список в Word с контактами, у меня также есть файл Excel (contacts.xls) с одним столбцом (имена всех контактов). Когда я открываю Word-документ, Макрос должен заполнить поле со всеми именами из файла Excel.

Можно ли прислать мне рабочий пример этого для Word 2007? Кажется довольно простым, но просто не могу заставить это работать...

Заранее спасибо!

2 ответа

Если вы собираетесь читать из файла Excel в Word, вам придется открыть его. Он будет использовать такой код:

   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")

Вы также, вероятно, захотите зайти в Tools->References в проекте VB и найти библиотеку Excel на своем компьютере (и, конечно, проверить). Есть способы обойти это, если это необходимо, но это проще.

Затем вы можете прочитать значения из рабочей книги:

oBook.Worksheets(1).cells(1,1)

Я не совсем уверен, что синтаксис, чтобы получить его в поле со списком. Посмотрите "элементы объекта combobox" в слове vbe. Будет свойство списка или что-то в этом роде.

Извините, я сейчас на Linux-машине, поэтому я не могу отладить точный код для вас.

У меня есть более полный код для вас сейчас:

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 очищается автоматически в конце выполнения. Очевидно, я предполагаю, что вы хотите первый выпадающий список (ContentCOntrols(1)), но это может быть не так.

Другие вопросы по тегам