用于VBA Userform文件select的省略号文本框

我试图为我一直在努力的广泛的VBA程序创build一个pathselect用户界面,但我似乎无法得到我想要的省略号文本框。 这是一个非常常见的function,特别是在选项表中。 这是我想从VBA选项面板直接得到的一个例子:

ellipsis_textbox_example

我会喜欢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。