0

我是 VBA 的新手,所以我已经为此苦苦挣扎了几天。

我在 Word 中有一个带有联系人的组合框,我还有一个带有一列(所有联系人的名称)的 excel 文件(contacts.xls)。当我打开 Word 文档时,宏必须用 excel 文件中的所有名称填写组合框。

是否可以向我发送一个适用于 2007 年单词的工作示例?看起来很简单,但就是不能让它工作......

提前致谢!

4

2 回答 2

0

如果您打算在 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 项目中的 Tools->References 并找到您机器上的任何 Excel 库(当然要检查它)。如果需要,有一些方法可以解决这个问题,但它更容易。

然后,您可以从工作簿中读取值:

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

我不完全确定将其放入组合框中的语法是什么。在 word 中的 vbe 中查找“组合框对象成员”。会有一个列表属性,或类似的东西。

对不起,我现在在一台 linux 机器上,所以我不能为你调试确切的代码。

于 2012-12-14T07:33:51.777 回答
0

我现在有更完整的代码给你:

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 (对于最终项目,这可能是更可取的。deferencing (= Nothing) 是一个很好的做法有,但VBA会在执行结束时自动清理.显然我假设你想要第一个下拉菜单(ContentCONtrols(1)),但这可能不是真的.

于 2012-12-14T15:42:58.230 回答