我一直在研究这项工作,并且在没有运气的情况下进行了几个小时的研究。我来自Java背景并再次在VBA工作,因此构建类模块可能不是最佳实践,但无论如何我都是这样做而且我付出了代价。这是故事:
我已经构建了2个类模块:PermissionFile和PermissionState。该州是一个美化的变种阵列。这是相关代码
Private permissionArray() As Variant
Sub Initialize(Optional file As PermissionFile)
ReDim permissionArray(6808, 1)
End Sub
Function getPermission(rowNumber, index)
getValue = permissionArray(rowNumber, index)
End Function
我看不到真正的问题。
PermissionFile执行所有繁重的解析。如上所述,它包含一个名为' state'的PermissionState,它构建得很好。以下是相关代码:
Private state As PermissionState 'this is declared outside of the sub,
'so scope is global
Sub Initialize(filePath As String)
Set state = New PermissionState
state.Initialize
End Sub
'here are the two different getter functions I've tried. They aren't
'both on at the same time, just different things I've tried
Public Property Get getState() As PermissionState
getState = state
End Property
Function getState()
getState = state
End Function
最后,这是来自客户的电话
'new permission file
Dim permFile2 As PermissionFile
Set permFile2 = New PermissionFile
permFile2.Initialize (path2)
'new permission state
Dim myState As PermissionState
Set myState = New PermissionState
'set new state as state from file
myState = permFile2.getState()
一切都建立得很好 - 我的实例都是正确的数据类型,每个文件都有一个包含所有数据的数组的状态,一切看起来都应该正常工作;但当它调用' getState'时,我得到一个"运行时错误' 91:对象变量或者没有设置块变量"错误。
我完全被难过了,这可能是一个非常简单的步骤,但这会让我的工作效率降低,所以任何帮助都会受到极大的赞赏。如果有帮助,我可以提供更多的代码。
答案 0 :(得分:0)
原始数据类型变量的值只能用等号设置。对象变量要求您使用Set
关键字。
将Set
添加到函数return Set getState = state
以及将状态存储在常规模块函数Set myState = permFile2.getState()
中的位置。