是否可以将范围传递给userform-property?

时间:2015-06-09 08:19:43

标签: excel vba excel-vba

我正在尝试调整代码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':对象变量或者没有设置块变量&#34 ;。我必须承认我在这一点上很难过,我觉得我已经尝试了所有可能的组合,设置,让,等等。所以,这里的任何人都可以帮我弄清楚是否有可能传递{{ 1}} - 反对用户形式,如果是,请告诉我我做错了什么?

2 个答案:

答案 0 :(得分:3)

您的变量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

答案 1 :(得分:1)

你必须将变量传递给表单中的子,(我相信用户form_Initialize会触发)

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

在表单模块中:

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