Vba 可从用户窗体访问的全局字典对象
我在常规模块中声明了一个公共全局字典对象,如下所示:Vba 可从用户窗体访问的全局字典对象,vba,excel,excel-2013,Vba,Excel,Excel 2013,我在常规模块中声明了一个公共全局字典对象,如下所示: Public dicModels As Scripting.Dictionary 'Microsoft Scripting Runtime has been added as a reference Public dicModels As New Scripting.Dictionary 我收到以下回电: Sub CreatePPT_OnAction(control As IRibbonControl) Call Current
Public dicModels As Scripting.Dictionary 'Microsoft Scripting Runtime has been added as a reference
Public dicModels As New Scripting.Dictionary
我收到以下回电:
Sub CreatePPT_OnAction(control As IRibbonControl)
Call CurrentBooks
Dim frmPPT_Slide As FPowerPoint
Set frmPPT_Slide = New FPowerPoint
frmPPT_Slide.Show
Set frmPPT_Slide = Nothing
End Sub
下面是调用过程的子程序:
Sub CurrentBooks()
Dim wks As Excel.Worksheet
Dim vObject As Variant
If Not dicModels Is Nothing Then Exit Sub
Set dicModels = New Dictionary
For Each wks In ActiveWorkbook.Worksheets
For Each vObject In wks.ListObjects
If Left(vObject.Name, 3) = "TM_" Then
dicModels.Add Key:=vObject.Name, Item:=Right(vObject.Name, Len(vObject.Name) - InStr(1, vObject.Name, "_"))
End If
Next vObject
Next wks
End Sub
以下是Userform中的初始化事件(iCounter是声明为私有的模块级变量):
Private子用户表单_Initialize()
Me.Caption=“主跟踪模型”
Me.lblModel.Caption=“选择要反映在PPT幻灯片上的模型。”
对于iCounter=0到dicModels.Count'的情况,请按如下方式编写:
Public dicModels As Scripting.Dictionary 'Microsoft Scripting Runtime has been added as a reference
Public dicModels As New Scripting.Dictionary
这既声明了变量,又将其初始化为新的字典
此初始化可以与声明一起完成。如果初始化更复杂,那么最好不要声明变量public,而是使用一个public函数返回变量的值,并在需要时执行任何初始化:
Dim m_dicModels As Scripting.Dictionary
Public Function dicModels() As Scripting.Dictionary
If m_dicModels Is Nothing Then
Set m_dicModels = New Scripting.Dictionary
m_dicModels.CompareMode = TextCompare
End If
Set dicModels = m_dicModels
End Function
在CurrentBooks
中,您正确地使用了Set dicModels=New Dictionary
。问题中的代码应该有效,或者至少dicModels
不应该是Nothing
。可能是发生了一些我们在这里看不到的事情,这些事情决定了dic。要什么都不做
?还有一个问题:UserForm\u Initialize
的代码属于FPowerPoint
对吗?@dee是的,UserForm\u Initialize
中的代码属于FPowerPoint
。显然,有什么东西正在将dic对象设置为Nothing
。否则,我的范围有问题。我会做更多的调试。谢谢你的解决方案,但我无法让它工作。初始化用户表单时,我无法访问字典
对象的计数
属性。字典不是nothing
。因此,为什么我不能从userform initialize事件访问它的任何成员?