从Excel中填充Word中的组合框 - 移动Excel文件后停止工作

时间:2014-06-11 13:09:21

标签: vba excel-vba combobox excel

感谢您的时间!使用在stackoverflow和其他地方收集的代码片段,我能够拼凑一个宏,该宏将从Excel文件中的已定义数据范围填充Word中的组合框,然后获取标签以从组合框中打印第二列(这在组合框本身中显示的时间太长)。到现在为止还挺好。这是我的代码:

Private Sub ComboBox1_DropButtonClick()
'Late binding.  No reference to Excel Object required.
Dim xlApp As Object
Dim xlWB As Object
Dim xlWS As Object
Dim cRows As Long
Dim i As Long
  Set xlApp = CreateObject("Excel.Application")
  'Open the spreadsheet to get data
  Set xlWB = xlApp.Workbooks.Open("EXCEL FILEPATH")
  Set xlWS = xlWB.Worksheets(1)
  cRows = xlWS.Range("$A2:$B216").Rows.Count - xlWS.Range("$A2:$B216").Row + 1
  ComboBox1.ColumnCount = 2
  'Populate the listbox.
  With Me.ComboBox1
    For i = 2 To cRows
       'Use .AddItem property to add a new row for each record and populate column 0
      .AddItem xlWS.Range("$A1:$B216").Cells(i, 1)
      'Use .List method to populate the remaining columns
      .List(.ListCount - 1, 1) = xlWS.Range("$A1:$B216").Cells(i, 2)
    Next i
  End With
  'Clean up
  Set xlWS = Nothing
  Set xlWB = Nothing
  xlApp.Quit
  'Make label print column 2 of ComboBox
  With ComboBox1
        Label1.Caption = .List(.ListIndex, 1)
    End With
End Sub

问题是,当移动Excel文件然后关闭并重新打开Word文件时,将不再填充comobobx。不幸的是,这需要是一个独立的Word文档,可以通过电子邮件分发给多个用户。有没有办法填充组合框,以便Word文档保存数据,而不必在每次打开文档时返回Excel文件?

再次感谢!

2 个答案:

答案 0 :(得分:0)

我之前使用过的一种方法就是不使用Excel,当你发送Word文档时,让它连接到一个返回列表的可信网站。

虽然我没有在Word中完成此操作,但我已经使用Excel完成了这项工作,其中电子表格通过电子邮件发送出来作为填写的空白模板。一个网站用于填充参考数据下拉列表。参考数据会定期更改,因此这是提供最新数据的最佳方式,同时保留了人们熟悉的现有电子表格。

如果您对电子表格填充不太感兴趣,当然可以从代码创建组合,组合的值可以保存在Word中的字段中。

让我知道其中任何一个是否有用&如果需要,我会尝试扩展。

更新

如果您实际上不需要电子表格中的任何其他内容,则可以使用DocProperty Field来存储组合的条目。

创建一个名为Combo Options的字段或其他内容并放入其中:

Option 1;Option 2;Another Option

或者您想要的任何文字选项。

在VBA中,您可以使用以下方式访问字段:

ActiveDocument.CustomDocumentProperties("Combo Options").Value

然后你可以将字段拆分成它的组件并迭代它们以添加组合框选项。

答案 1 :(得分:-1)

为什么不在用户的计算机上创建具有所需数据的文件?这意味着,它只需要第一次打开excel文件,然后它就会从.txt文件中读取数据。

以下是有关如何在用户计算机中创建简单文件的链接: http://www.java2s.com/Code/VBA-Excel-Access-Word/File-Path/WritingtoTextFilesUsingPrint.htm