根据文档中的书签更改组合框选择
问题描述:
我是vba的新手,我一直在为我的Word文档创建用户表单。我试图根据文档本身的书签文本来制作一个特定的组合框。我使用if语句来检查书签的文本,如果匹配,它应该将组合框的选定项目更改为我选择的项目。我对vba的知识很少,而且我无法使其工作。我不确定我要去哪里错。这是我的代码。根据文档中的书签更改组合框选择
Private Sub UserForm_Initialize()
Me.cbxShipFrom.AddItem ("My Company")
Me.cbxShipFrom.AddItem ("Warehouse")
Me.cbxShipFrom.AddItem ("Warehouse 2")
Me.cbxShipFrom.AddItem ("Other...")
If ActiveDocument.Bookmarks("shipfrom").Range.Text = "MY COMPANY" & vbCrLf & "123 BEETLE ST" & vbCrLf & "MYCITY, ST xZIPx" Then
Me.cbxShipFrom.Value = Me.cbxShipFrom.ListIndex(0)
End If
End Sub
答
必须使用CHR(13)
代替vbCrLf
此外:
Me.cbxShipFrom.ListIndex(0)
不是有效的表达,因为ListIndex属性返回一个整数,而不是一个数组
你最有可能想用:
Me.cbxShipFrom.List(0)
,并返回框列表
的第一个元素最后你可能想使用你的代码下面的小重构:
Private Sub UserForm_Initialize()
With Me.cbxShipFrom
.AddItem ("My Company")
.AddItem ("Warehouse")
.AddItem ("Warehouse 2")
.AddItem ("Other...")
If ActiveDocument.Bookmarks("shipfrom").Range.Text = "MY COMPANY" & Chr(13) & "123 BEETLE ST" & Chr(13) & "MYCITY, ST xZIPx" Then
.Value = .List(0)
End If
End With
End Sub
这真是棒极了!我也不知道有关声明,我可以看到它可能会压缩重复的代码。谢谢! – Christopher
不客气。你说得对,因为它避免了多次访问被引用对象的内存,这也增加了代码的性能 – user3598756