我正在尝试调整代码 found here (第三种方法,因为这似乎被认为是最佳实践),以满足我的需要,但我没有任何运气 - 到目前为止,我或多或少从该页面复制粘贴的代码是以下:
在表单模块中:
Private calling_cell As Range
Property Set range_to_form(ByRef r As Range)
Set calling_cell = r
End Property
Private Sub UserForm_Activate()
Debug.Print calling_cell.Address
End Sub
在 worksheet_change-event 中:
Dim frm As ufRegLuft
If Not IsUserFormLoaded("ufRegLuft") Then
Set frm = New ufRegLuft
Else
Set frm = VBA.UserForms("ufRegLuft")
End If
Set frm.range_to_form = Target
ufRegLuft.Show
问题:
这不起作用 - 我在 debug.print
行上收到错误,显示“运行时错误‘91’:未设置对象变量或 With block 变量”。我必须承认我现在很困惑,我觉得我已经尝试了 set、let、get 等的所有可能组合。所以,这里的任何人都可以帮我弄清楚是否可以传递 Range
-反对用户表单,如果是,请告诉我我做错了什么?
最佳答案
您的变量calling_cell
以frm
形式初始化,而不是在ufRegLuft
将 ufRegLuft.Show
行更改为 frm.Show
;)
这是测试它的简单方法。
表单模块
Private calling_cell As Range
Property Set range_to_form(ByRef r As Range)
Set calling_cell = r
End Property
Private Sub UserForm_Activate()
MsgBox calling_cell.Address
End Sub
普通模块
Sub ShowFormProp()
Dim frm As ufRegLuft
Set frm = New ufRegLuft
Set frm.range_to_form = Sheet1.Range("A1")
frm.Show
End Sub
关于vba - 是否可以将范围传递给用户表单属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726596/