Inputform范围select从用户窗体

我正在尝试使用input框在工作表中select一个范围。 理论上很简单。 用户在打开一个用户窗体的工作表上select一个命令button。 用户表单允许select几个选项button之一。 提交表单后,我希望用户能够从活动工作表中select范围。

提交用户表单后,范围input框出现,但不允许在活动工作表上进行select。

如果我直接从工作表调用input框(不要运行用户表单),input框可以正常工作。 但是,在这个应用程序中,我需要用户表单来允许select。

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

从根本上说,这是我所做的一切:

Public Function functionName() Dim rng As Range Set rng = Application.InputBox("select range", Type:=8) End Function 

当用户窗体从模块调用它时,它似乎不起作用。

假设你的函数让用户得到一个范围看起来像这样(注意,我把它放在一个标准的模块,而不是在用户forms的代码):

 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 

然后你的代码closures用户窗体并让用户select一个范围应该看起来像这样(注意,我把它放在一个commandbutton中,先closures用户窗体,然后要求用户select范围,把这个放在Unload Me所在的位置):

 Private Sub CommandButton1_Click() Unload Me Dim r As Range 'Get the range from the input box and verify user did not press cancel On Error Resume Next Set r = GetRange On Error GoTo 0 If r Is Nothing Then Exit Sub 'Pressed cancel so no range is returned, cannot proceed 'Do what you want with the selected range here MsgBox "'" & r.Parent.Name & "'!" & r.Address End Sub 

这听起来像你的用户表单正在显示为模态

默认情况下,用户窗体显示为模态,这意味着代码执行将暂停,直到用户以某种方式与窗体交互为止。 这也阻止了用户select范围或改变表单等。

您可以通过在VBEdevise窗口中更改“Modal”属性来显示窗体为非模态,或者在调用窗体时提供参数:

 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属性在devise时已经被保留为默认的“True”。