编写新代码时,Excel工作表代码中的Excel VBA检索常量失败

时间:2016-08-19 17:27:09

标签: excel vba excel-vba macros

在尝试从我使用的一些报告工作簿中的每个工作表中检索常量时,三年前我编写了一些包含在每个工作表中的代码。以下是代码示例:

    Option Explicit
    ' Determine the type of worksheet
    Private Const shtType As String = "CR"

    Public Function GetShtType()
        GetShtType = shtType
    End Function

在从工作表中获取值进行处理的其他代码中,使用以下代码部分,其中“wksToCheck”是相关工作表。此代码存储在个人宏工作簿中,而不是工作表代码中的工作簿中:

    ' Get the sheet 'type' if it has one
    On Error Resume Next
    shtType = wksToCheck.GetShtType()
    If Err.Number <> 0 Then
        ' We do not have a type
        shtType = "Unknown"
        Err.Clear
    End If ' Err.Number...
    On Error GoTo Error_BuildTemplateWbk

我的问题是,我使用上面的代码每周处理几次工作簿,过去三年我一直在使用。现在,我正在尝试使用上面的块编写一些新代码,以不同的方式处理报表工作簿。但是,当我现在使用上面的块运行代码时,我在代码的'.GetShtType()'部分得到“方法或数据成员未找到”错误。我无法编译代码,因此,代码不起作用。我已经尝试将工作表代码添加到宏工作簿中的工作表,以查看是否可以解决问题。它没有。有没有人有任何想法?我在Windows 7 PC上运行Excel 2013。有什么想法吗?

布赖恩

1 个答案:

答案 0 :(得分:0)

使用后期绑定,应该避免错误Dim wksToCheck As Object,但是你会失去智能感知。

如果您对替代方案持开放态度,只需使用CallByName功能或使用工作表CustomProperties即可获得更好的运气。

如果需要,使用CallByName可以保留与旧版工作簿的向后兼容性:

shtType = CallByName(wksToCheck, "GetShtType", VbMethod)

或者,在工作表中使用CustomProperties而不是自定义方法:

Private Sub Worksheet_Activate()
Const PropName$ = "ShtType"
Const ShtType$ = "CR"
On Error Resume Next
Me.CustomProperties(PropName) = ShtType$
If Err.Number = 13 Then
    Me.CustomProperties.Add "PropName", ShtType
End If
End Sub

然后,

' Get the sheet 'type' if it has one
On Error Resume Next
shtType = wksToCheck.CustomProperties("ShtType")
If Err.Number = 13 Then
    ' We do not have a type
    shtType = "Unknown"
    Err.Clear
End If ' Err.Number...
On Error GoTo Error_BuildTemplateWbk