在尝试从我使用的一些报告工作簿中的每个工作表中检索常量时,三年前我编写了一些包含在每个工作表中的代码。以下是代码示例:
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。有什么想法吗?
布赖恩
答案 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