我正在尝试将一个Range对象从Worksheet_SelectionChange事件传递给另一个函数,然后将其设置为公共变量。 这是我到目前为止的代码片段。
Private Sub Worksheet_SelectionChange(ByVal Target as Range)
If Not Application.Intersect(Range("C8:C65000"), Range(Target.Address)) Is Nothing Then
eventPicker.showEventPickerForm Target
End If
End Sub
Public eventTarget as Range
Sub showEventPickerForm(ByVal targetCell as Range)
Set eventTarget = targetCell
eventPicker.show
End Sub
Private Sub UserForm_Initialize()
MsgBox(eventTarget.Address)
End Sub
运行此代码会出现以下错误
对象变量或未设置块变量
调试器突出显示eventPicker.showEventPickerForm Target
。
注释掉MsgBox(eventTarget.Address)
行可以使代码按预期运行。
我尝试将公共变量声明移动到其自己模块中的表单外部,将MsgBox
调用更改为以下
With eventTarget
MsgBox(.Address)
End With
我也尝试传递参数ByRef
,而不是ByVal
,它们都返回与上面相同的错误。
我的想法是,对象在某些时候被重置为null,因为我可以在Set
函数中调用showEventPickerForm
之后引用eventTarget,但我的研究表明公开声明的变量将保持不变只要工作簿保持开放,它们的价值。我不确定如何从这里开始。