我正在尝试使用输入框选择工作表中的范围。从理论上讲,这很简单。用户在工作表上选择一个打开用户表单的命令按钮。 userform允许选择几个选项按钮之一。提交表单后,我希望用户能够从活动工作表中选择一个范围。
提交用户表单后,将显示范围输入框,但不允许在活动工作表上进行选择。
如果我直接从工作表中调用输入框(不要通过用户窗体运行),则输入框可以正常工作。但是,在此应用程序中,我需要userform以允许选择。
我尝试重新激活工作表,以编程方式选择默认范围,隐藏和卸载用户窗体。
从根本上说,这就是我正在做的事情:
Public Function functionName()
Dim rng As Range
Set rng = Application.InputBox("select range", Type:=8)
End Function
当用户表单从模块调用它时似乎不起作用。
答案 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'在设计时。