场景
创建一个空白工作簿并添加一个ToggleButton和一个InkPicture控件(后者通过ActiveX控件->更多控件插入)。在InkPicture控件的SizeChanged
事件中,添加以下行:
Sheet1.ToggleButton1.Caption = "foo bar"
问题
上面没有出现“ 未找到方法或数据成员”错误,突出显示了该行中.ToggleButton1
的出现。
原因
墨水图片的SizeChanged
事件发生在创建切换按钮之前,在某些情况下,该事件发生在工作簿的Open
事件发生之前!您可以在“立即窗口”中Debug.Print
相关消息来查看。
问题
我如何推迟执行墨水图片的SizeChanged
代码,直到创建切换按钮并可以将其作为工作表的属性来访问?我当然可以通过创建Boolean
变量来解决该问题,以避免在工作簿的SizeChanged
结束之前执行InkPicture的Open
事件,但这仅是解决问题的方法,不能解决问题。实际问题。
我尝试过的事情
DoEvents
AutoLoad
属性设置为True
创建切换按钮之前墨水图片保存并重新打开工作簿后,每次尝试都似乎起作用,只是在随后的保存和打开中失败。
注意:我对我的帖子进行了编辑,使其更加简洁易读,因此请不要过分热心,并否决一个合法的问题...
根据需要访问的属性,您可以尝试通过Worksheet.OLEObjects
集合获取对控件的引用。
示例:
Private Sub InkPicture1_Resize(Left As Long, Top As Long, Right As Long, Bottom As Long)
Dim oleObj As OLEObject
Set oleObj = Sheet1.OLEObjects("ToggleButton1")
oleObj.Left = 1
oleObj.Top = 1
'...
End Sub
以这种方式,您正在通过OLEObject接口与控件进行交互。因此,某些控件属性可能不可用。通常,您可以通过获取OLEObject.Object属性,通过其特定的控件接口(即ToggleButton接口)与控件进行交互。
Private Sub InkPicture1_Resize(Left As Long, Top As Long, Right As Long, Bottom As Long)
Dim tb As MSForms.ToggleButton
Set tb = Sheet1.OLEObjects("ToggleButton1").Object
tb.Caption = "foo"
End Sub
但是,在工作簿启动时,这似乎会导致错误。我相信这是安全的事情。但是,至少此错误是您可以捕获并处理的运行时,与您现在看到的难以处理的找不到方法或数据成员编译器错误相反。
希望这会有所帮助!