我正在尝试在Excel 2007 VBA中开发一个用户表单,并想要提供一个范围选择图标给用户,类似于这样:
然而,我没有找到任何内置的表单设计工具或任何在线工具可以提供这个功能,或者至少给我一个想法。如果有人有任何想法,请帮助我,非常感谢。
这个控件被称为RefEdit控件。
要使用它,您必须首先通过右键单击工具箱窗口并选择附加控件...将其添加到工具箱窗口。然后选择RefEdit.Ctrl并关闭对话框。
现在您可以在工具箱中选择它并将其放置在您的表单上。
除了使用RefEdit.Ctrl之外,另一种选择是利用TextBox控件的一些未公开功能并使用Application.InputBox函数。
有两个TextBox控件的属性不会出现在属性对话框中,它们允许您在右侧添加一个按钮。它们是DropButtonStyle和ShowDropButtonWhen。当单击该按钮时,它将为控件触发DropButtonClick事件,在该事件中您可以显示输入框。
首先在表单上放置一个TextBox控件。然后将以下内容添加到UserForm_Initialize过程中:
Private Sub UserForm_Initialize()
txtRefersTo.DropButtonStyle = frmDropButtonStyleReduce
txtRefersTo.ShowDropButtonWhen = frmShowDropButtonWhenAlways
End Sub
然后添加一个事件处理程序到 DropButtonClick 事件中,如下所示,使用 Application.InputBox 对话框来捕获范围:
Private Sub txtRefersTo_DropButtonClick()
Me.Hide
txtRefersTo.Text = Application.InputBox("Select the range", "Range Picker", txtRefersTo.Text, Type:=8)
Me.Show vbModal
End Sub
我喜欢@krey的回答,它基本上是@stifin回答中分享链接的一个非常简化版本--> https://www.thespreadsheetguru.com/blog/vba-to-select-range-with-inputbox
但两者都使用了“奇怪”的按钮名称,我认为指南应该使用默认名称/值,以便最终用户易于理解和操作。此外,我添加了一个CommandButton
来“运行”用户窗体和一个“选择”语句进行初始测试。我还想提供一个初始值,因为我尝试预填充我的用户窗体,但允许最终用户在需要时覆盖。
这里是最终代码片段,利用一个名为TextBox1
(默认)和一个名为CommandButton1
(也是默认)的TextBox
的用户窗体。
Option Explicit
Public rng As Range
Public Sub UserForm_Initialize()
Me.TextBox1.DropButtonStyle = fmDropButtonStyleReduce
Me.TextBox1.ShowDropButtonWhen = fmShowDropButtonWhenAlways
Set rng = Range("A1:B4")
TextBox1.Value = rng.Address(False, False)
End Sub
Public Sub CommandButton1_Click()
rng.Select
Unload Me
End Sub
Public Sub TextBox1_DropButtonClick()
Me.Hide
Set rng = Application.InputBox("Select the range", "Range Picker", TextBox1.Text, Type:=8)
TextBox1.Value = rng.Address(False, False)
Me.Show
End Sub