在VBA中将范围对象传递给公共变量

时间:2018-01-27 08:28:51

标签: excel vba excel-vba

我正在尝试将一个Range对象从Worksheet_SelectionChange事件传递给另一个函数,然后将其设置为公共变量。 这是我到目前为止的代码片段。

“Sheet1”中的代码

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

“eventPicker”表单中的代码

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,但我的研究表明公开声明的变量将保持不变只要工作簿保持开放,它们的价值。我不确定如何从这里开始。

0 个答案:

没有答案