用于VBA Userform文件select的省略号文本框
我试图为我一直在努力的广泛的VBA程序创build一个pathselect用户界面,但我似乎无法得到我想要的省略号文本框。 这是一个非常常见的function,特别是在选项表中。 这是我想从VBA选项面板直接得到的一个例子:
我会喜欢find一种方法来获取用户窗体中的相同function。 我迄今为止唯一find的解决scheme是使用combobox,并启用省略号箭头选项。 但是,似乎没有一种明显的方法来使用combobox箭头的激活来运行对话框,也似乎没有办法使其看起来不像combobox。 最后一招,我在文本框下面使用了一个button,但是我真的更喜欢这样做的不那么笨重的方式。
任何解决scheme将不胜感激。
我迄今为止唯一find的解决scheme是使用combobox,并启用省略号箭头选项。 然而,似乎没有一种明显的方法来使用combobox箭头的激活来运行对话框,似乎也没有办法让它看起来不像一个combobox
你的build议确实有效,而且肯定不如两个控件一起工作, Button + Textbox
更简单更优雅。
一个组合可以完成所需的function,以下面的方式。
1)在devise模式下,将button样式设置为省略号
DropButtonStyle = fmDropButtonStyleEllipsis
最后,通过设置devise时间属性,使得省略号仅在组合input时出现:
ShowDropButtonWhen = ShowDropButtonWhenFocus
2)如果需要,您可以设置其他devise时间属性以具有一些外观和感觉 。 默认值看起来不错。
3)将以下处理程序添加到父级用户窗体。 片段模拟启动对话框并获取新值或取消。 它不显示任何下拉窗口。 (但是你仍然可以控制:如果你想根据某些条件显示它,你仍然可以调用ComboBox1.DropDown
方法)
Private Sub ComboBox1_DropButtonClick() ' The following two lines avoid to call the routine twice, at entry and at exit Static i As Integer i = (i + 1) Mod 2: If i = 0 Then Exit Sub With ComboBox1 s = InputBox("enter some text", , .Value) '<~~ simulates any dialog If s <> "" Then .Value = s SendKeys ("{Enter}") '<~~ to close immediately the dropdown window End With End Sub
尝试一下 ;)
ComboBoxes不仅有Dropbutton,所以TextBoxes(就像Excel的RefEdit控件一样)。 即使您在devise时无法访问文本框的“放下button”,也可以在运行时进行操作。 使用文本框避免必须处理下拉列表的combobox。
给定一个名为TextBox1
的文本框,以下代码将提供所需的省略号放置button:
Private Sub UserForm_Initialize() With Me.TextBox1 .DropButtonStyle = fmDropButtonStyleEllipsis .ShowDropButtonWhen = fmShowDropButtonWhenAlways End With End Sub
然后使用文本框的DropButtonClick事件来执行所需的任何操作:
Private Sub TextBox1_DropButtonClick() '' Code here to do what you need End Sub
Excel的片状RefEdit控件替代Excel中有一个广泛的例子,它使用带有“Reduce”下拉button的文本框来复制Excel的不可靠的RefEdit控件的function。