是否有可能传递一个范围到一个userform属性?

我试图调整在这里find的代码(第三种方法,因为这是什么似乎被认为是最佳实践),以满足我的需要,但我没有任何运气 – 我到目前为止的代码,更多或从该页面中复制的面值较小的是以下内容:

在表单模块中:

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':对象variables或块variables未设置”。 我必须承认在这一点上我非常难过,我觉得我已经尝试了各种可能的组合,让,得到等。所以,任何人都可以在这里请帮我找出是否有可能通过一个Range – 对象一个用户表单,如果是的话,告诉我我做错了什么?

您的variablescalling_cellfrmforms初始化,而不是在ufRegLuftufRegLuft

将行ufRegLuft.Show更改为frm.Show ;)

这是testing它的简单方法。

表单模块

 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 

你必须把variables传递给一个子forms,(我相信用户form_Initialize会触发)

我不确定在哪里设置了r,而是在设置范围的表单中创build一个公共子集,在显示表单之前调用它,然后显示如下的表单

在表单模块中:

 Private calling_cell As Range public sub 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 frm.range_to_form r 'Could be "range_to_form r" not above frm.Show