[英]Excel VBA Workbook_Open Application or Object defined error
我有一個工作簿,一旦打開將運行一個宏。
Private Sub Workbook_Open()
GetPaymentTypes
CreateHyperlinks paymentType, paymentTypeLocation
End Sub
子GetPaymentTypes
和CreateHyperLinks
可以很好地運行(它們在各自的模塊中),但是當Workbook_Open運行時,出現“應用程序定義”或“對象定義”錯誤。
該錯誤發生在CreateHyperlinks
:
Sub CreateHyperlinks(paymentType, paymentTypeLocation)
' Below errors with Worksheets(1) or Active Sheet, ONLY from Workbook_Open()
With ActiveSheet
.Hyperlinks.Add Anchor:=.Range(paymentTypeLocation), _
Address:="", _
SubAddress:="", _
ScreenTip:="Go to 80 byte population guide for: " & paymentType, _
TextToDisplay:=paymentType
End With
End Sub
對於超鏈接,我必須引用“ ActiveSheet”,但我似乎無法解決此問題。 非常感謝您提供的任何幫助。
變量paymentType在類模塊中定義。 私人付款類型為字符串
有一個函數可以填充一個paymentTypes數組。 然后,我將相關的一個分配給paymentType,並調用將paymentType傳遞給它的CreateHyperlinks。
“在VBA中是否有一個等效於Getter方法的VBA?”
是的,這里有一個例子
Private mSomeValue As String
Public Property Get SomeValue() As String
SomeValue= mSomeValue
End Property
'A corresponding setter method could look like this'
Public Property Let SomeValue(aValue As String)
mSomeValue = aValue
End Property
因此,正如我們在評論中同意的那樣,關於您的變量沒有傳遞給Workbook_open
。
解決您的問題的方法是將變量設置為Public。
示例: Public paymentType as String
實際上,將它們Public
是沒有錯的。 設置了具有Public屬性的變量,並且所有子例程都可以使用它們(不僅是設置該子例程的子例程)。
如果要編寫更復雜的子例程,有時需要將它們設置為公共。 無論如何,如果您對數據隱私敏感,則不應使用Excel文件作為數據載體。
可變范圍的一些指南: http : //www.excel-easy.com/vba/examples/variable-scope.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.