【发布时间】:2016-12-16 02:41:25
【问题描述】:
虽然我是经验丰富的 VBA 开发人员,但我不需要使用类模块或集合,但我认为这可能是我扩展知识的机会。
在一个应用程序中,我有许多具有相同功能的表单,我现在需要增加该功能。为此,我试图重新排序类模块中的集合,但收到错误 91 - 对象变量或未设置块。当我将事件分配给控件时,将创建该集合。我从这里获得的原始代码(非常感谢 mwolfe)VBA - getting name of the label in mousemove event
并已适应 Access。事件的分配运行良好,并且所有事件都运行只要我只使用该控件进行操作,例如更改背景颜色、更改窗体上的大小或位置。
当我想在集合中对其重新排序时,问题就出现了 - 以对表单中的位置产生影响。但是我一开始就无法访问集合本身。
以下是我最近的尝试,错误发生在由星号指示的 collcount Get 中(就在代码块的底部)。我正在使用 Count 作为测试。一旦我明白我做错了什么,我应该能够根据需要进行操作。
mLabelColl 在离开 LabelsToTrack 函数之前返回正确的计数,但随后在任何其他函数中都找不到。
正如您从注释掉的调试语句中看到的那样,我尝试在顶部声明中将 mLabelColl 设为 Private 和 Dim,在 mousedown 事件中使用“Debug.Print mLabelColl.Count”并尝试创建一个不同的类来存储标签列表。
我觉得我错过了一些非常简单的东西,但我不知道什么 - 有人可以让我摆脱痛苦
Option Compare Database
Option Explicit
'weMouseMove class module:
Private WithEvents mLbl As Access.Label
Public mLabelColl As Collection
'Dim LblList as clLabels
Function LabelsToTrack(ParamArray labels() As Variant)
Set mLabelColl = New Collection 'assign a pointer
Dim i As Integer
For i = LBound(labels) To UBound(labels)
'Set mLabelColl = New Collection events not assigned if set here
Dim LblToTrack As weMouseMove 'needs to be declared here - why?
Set LblToTrack = New weMouseMove 'assign a pointer
Dim lbl As Access.Label
Set lbl = labels(i)
LblToTrack.TrackLabel lbl
mLabelColl.Add LblToTrack 'add to mlabelcoll collection
'Set LblList as New clLabels
'LblList.addLabel lbl
Next i
Debug.Print mLabelColl.Count 'returns correct number
Debug.Print dsform.countcoll '1 - incorrect
End Function
Sub TrackLabel(lbl As Access.Label)
Set mLbl = lbl
End Sub
Private Sub mLbl_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim tLbl As Access.Label
'Debug.Print LblList.Count 'Compile error - Expected function or variable (Despite Count being an option
'Debug.Print mLabelColl.Count 'error 91
'Debug.Print LblList.CountLbls 'error 91
Debug.Print collCount
End Sub
Property Get collCount() As Integer
*collCount = mLabelColl.Count* 'error 91
End Property
【问题讨论】:
-
不确定我理解您所说的“对表单中的位置有影响”是什么意思。上面的代码与控件定位没有任何关系——那是在控件属性本身中。
标签: vba class ms-access collections