簡體   English   中英

Excel VBA Workbook_Open應用程序或對象定義的錯誤

[英]Excel VBA Workbook_Open Application or Object defined error

我有一個工作簿,一旦打開將運行一個宏。

Private Sub Workbook_Open()
    GetPaymentTypes
    CreateHyperlinks paymentType, paymentTypeLocation

End Sub

GetPaymentTypesCreateHyperLinks可以很好地運行(它們在各自的模塊中),但是當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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM