Userform

时间:2016-01-08 18:55:42

标签: excel vba excel-vba

我正在尝试使用输入框选择工作表中的范围。从理论上讲,这很简单。用户在工作表上选择一个打开用户表单的命令按钮。 userform允许选择几个选项按钮之一。提交表单后,我希望用户能够从活动工作表中选择一个范围。

提交用户表单后,将显示范围输入框,但不允许在活动工作表上进行选择。

如果我直接从工作表中调用输入框(不要通过用户窗体运行),则输入框可以正常工作。但是,在此应用程序中,我需要userform以允许选择。

我尝试重新激活工作表,以编程方式选择默认范围,隐藏和卸载用户窗体。

从根本上说,这就是我正在做的事情:

Public Function functionName()

    Dim rng As Range

    Set rng = Application.InputBox("select range", Type:=8)

End Function

当用户表单从模块调用它时似乎不起作用。

2 个答案:

答案 0 :(得分:1)

假设你的功能让用户得到的范围是这样的(注意我把它放在标准模块中,而不是用户形式代码中):

Public Function GetRange() As Range

    Dim rInput As Range

    On Error Resume Next
    Set rInput = Application.InputBox("select range", Type:=8)
    On Error GoTo 0

    If rInput Is Nothing Then
        Set GetRange = Nothing
    Else
        Set GetRange = rInput
    End If

End Function

然后关闭用户窗体并让用户选择范围时的代码应如下所示(请注意,我将其置于命令按钮中,先关闭用户窗体,然后要求用户选择范围。将此放在您的{ {1}}位于):

Unload Me

答案 1 :(得分:1)

听起来您的用户表单显示为模态

默认情况下,Userforms显示为模态,这意味着代码执行将停止,直到用户以某种方式与表单进行交互。这也可以防止用户选择范围或更换纸张等。

您可以通过更改"模态"将表单显示为非模态。 VBE设计窗口中的属性 - 或在调用表单时提供参数:

MyUserForm.Show           '// Uses default modal property of True*
MyUserForm.Show True      '// Implicitly state that the form should be modal.
MyUserForm.Show False     '// Implicitly state that the form should NOT be modal.

*假设ShowModal属性已被保留为默认属性' True'在设计时。