2016-12-17 94 views
-1

我是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 

回答

0

必須使用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 
+0

這真是棒極了!我也不知道有關聲明,我可以看到它可能會壓縮重複的代碼。謝謝! – Christopher

+0

不客氣。你說得對,因爲它避免了多次訪問被引用對象的內存,這也增加了代碼的性能 – user3598756

相關問題