感谢您努力回答我的其他问题,但我已经放弃尝试在Excel中填充Word中的组合框。我得到了它的工作,但问题是,当移动Excel文件,然后关闭并重新打开Word文件时,comobobx不再被填充。不幸的是,这需要是一个独立的Word文档,可以通过电子邮件分发给多个用户。 (这是我的另一个未回答的问题:Populating a combobox in Word from Excel - stops working after Excel file is moved。)所以,我想:如果我把电子表格放在Word文档中(通过Insert> Table> Excel Spreadsheet)会怎么样?
这是我试过的:
Private Sub ComboBox1_DropButtonClick()
Dim oleSH As Word.OLEFormat
Dim cRows As Long
Dim i As Long
Set oleSH = ActiveDocument.InlineShapes(1).OLEFormat
cRows = oleSH.Range("$A2:$B216").Rows.Count - oleSH.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
xlWB.Close True
xlApp.Quit
Set xlWS = Nothing
Set xlWB = Nothing
'Make label print column 2 of ComboBox
With ComboBox1
Label1.Caption = .List(.ListIndex, 1)
End With
End Sub
但是,我收到编译错误:找不到方法或数据成员。 Word似乎无法像Excel那样识别方法“.Range”。我怎样才能做到这一点?提前再次感谢,如果你能回答我的其他问题,请做!无论如何,我都乐意让它发挥作用。
答案 0 :(得分:0)
我怀疑你的另一个问题(顺便说一下,我已经尝试过答案),你正在创建具有后期绑定的xlWs对象,我认为这是为什么Word无法理解Excel范围。
您可能想切换到引用和早期绑定对象?
答案 1 :(得分:0)
我决定使用Word.Table将数据存储在我的文档中而不是嵌入的Excel对象中。我最初拒绝这个想法,因为我不知道该怎么做。我只能在单独的文档中找到Greg Maxey的代码来填充Word.Table。 (可以找到有问题的代码here.向下滚动到外部数据源:Word表格部分。)
然而,在经过多次修补之后,我发现要在相同文档中的Word.Table中填充ComboBox,就像您正在填充的ComboBox一样,您所需要做的就是修改Maxey的代码位。只需将Set sourcedoc = Documents.Open(FileName:="D:\Data Stores\sourceWord.doc", Visible:=False)
更改为Set sourcedoc = Me
,然后删除行sourcedoc.Close SaveChanges:=wdDoNotSaveChanges
,这样就不会关闭正在使用的文档。