感谢您的时间!使用在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文件?
再次感谢!
答案 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