未在自定义类模块上设置Excel 2007 VBA对象变量。

时间:2015-08-05 00:32:43

标签: excel-vba excel-2007 vba excel

我一直在研究这项工作,并且在没有运气的情况下进行了几个小时的研究。我来自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:对象变量或者没有设置块变量"错误。

我完全被难过了,这可能是一个非常简单的步骤,但这会让我的工作效率降低,所以任何帮助都会受到极大的赞赏。如果有帮助,我可以提供更多的代码。

1 个答案:

答案 0 :(得分:0)

原始数据类型变量的值只能用等号设置。对象变量要求您使用Set关键字。

Set添加到函数return Set getState = state以及将状态存储在常规模块函数Set myState = permFile2.getState()中的位置。