繁体   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