在嵌入式Excel电子表格中填充Word中的组合框

时间:2014-06-11 20:36:36

标签: vba excel-vba combobox excel

感谢您努力回答我的其他问题,但我已经放弃尝试在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”。我怎样才能做到这一点?提前再次感谢,如果你能回答我的其他问题,请做!无论如何,我都乐意让它发挥作用。

2 个答案:

答案 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,这样就不会关闭正在使用的文档。