class 函数中的错误 91

Error 91 in class function

我使用 Access 2010 收集信息并将其放在 Excel 电子表格中。当我 运行 下面的代码时,我得到

Run-time error '91':
Object variable or With block not set

在我的class这一行Set Cci = ChartColorItems(ColorID)Public Function GetRGB(ByRef ColorID As String) As Integer

'ChartColors' class:

Option Compare Database
Option Explicit

Private pChartColorItems As Collection

Public Property Get ChartColorItems() As Collection
  Set ChartColorItems = pChartColorItems
End Property
Public Property Set ChartColorItems(ByRef lChartColorItem As Collection)
  Set pChartColorItems = lChartColorItem
End Property

Public Function GetRGB(ByRef ColorID As String) As Integer
  Dim Cci As ChartColorItem
  Dim x As Integer

'---------------------------------------------------
'Error happens here:      
  Set Cci = ChartColorItems(ColorID)
'---------------------------------------------------
  x = RGB(Cci.Red, Cci.Green, Cci.Blue)
  GetRGB = x
  Set Cci = Nothing

End Function

Private Sub Class_Initialize()

  Dim Cci As ChartColorItem
  Dim Colors As Collection

  Set Colors = New Collection

  Set Cci = New ChartColorItem
  Cci.Red = 149
  Cci.Green = 55
  Cci.Blue = 53
  Cci.ColorID = "Pie1"
  Colors.Add Cci, Key:=Cci.ColorID
  Set Cci = Nothing

  Set Cci = New ChartColorItem
  Cci.Red = 148
  Cci.Green = 138
  Cci.Blue = 84
  Cci.ColorID = "Pie2"
  Colors.Add Cci, Key:=Cci.ColorID
  Set Cci = Nothing

End Sub

和 ChartColorItem class:

Option Compare Database
Option Explicit

Private pColorID As String
Private pRed As Integer
Private pGreen As Integer
Private pBlue As Integer

Public Property Get ColorID() As String
  ColorID = pColorID
End Property
Public Property Let ColorID(ByRef x As String)
  pColorID = x
End Property

Public Property Get Red() As Integer
  Red = pRed
End Property
Public Property Let Red(ByRef x As Integer)
  pRed = x
End Property

Public Property Get Green() As Integer
  Green = pGreen
End Property
Public Property Let Green(ByRef x As Integer)
  pGreen = x
End Property

Public Property Get Blue() As Integer
  Blue = pBlue
End Property
Public Property Let Blue(ByRef x As Integer)
  pBlue = x
End Property

当我调试时,代码单步执行 ChartColorItems() getter 就好了,错误发生在 End Function 之后,让我掉到上面提到的那一行。

这与我本周早些时候编写的一些代码非常相似,主要区别在于我使用 Class_Initialize 子填充我的 ChartColors,因为我试图存储一个固定的集合颜色,而我之前的代码收集数据并以更 'normal' 的方式将其插入 class。

您在模块级别将私有集合定义为 pCharColorItems,但您从未在 class 的初始化方法中对其进行初始化。相反,您使用局部范围的 Colors 集合变量。

Private Sub Class_Initialize()

  Dim Cci As ChartColorItem
  Dim Colors As Collection

  Set Colors = New Collection

您需要改用 pChartColorItems

Private Sub Class_Initialize()

  Dim Cci As ChartColorItem
  Dim Colors As Collection

  Set pChartColorItems = New Collection

  Set Cci = New ChartColorItem
  Cci.Red = 149
  Cci.Green = 55
  Cci.Blue = 53
  Cci.ColorID = "Pie1"
  pChartColorItems.Add Cci, Key:=Cci.ColorID
  Set Cci = Nothing

  Set Cci = New ChartColorItem
  Cci.Red = 148
  Cci.Green = 138
  Cci.Blue = 84
  Cci.ColorID = "Pie2"
  pChartColorItems.Add Cci, Key:=Cci.ColorID
  Set Cci = Nothing

End Sub

但是 GetRGB 的这一行还有另一个错误。

 x = RGB(Cci.Red, Cci.Green, Cci.Blue)

您将 x 声明为整数,而 RGB 函数 returns 为长整型。 "Pie1" 的值导致溢出错误。