有没有办法在提示本身中生成具有多个选项的输入提示。用户可以选择提供的任何选项。到目前为止,我正在使用“输入字符串”然后设置变量的值。示例:选择哪张纸?表 1?表2?表 3?
问问题
15860 次
2 回答
1
如果您的意思是使用 InputBox() 函数:
回答:不,你不能。InputBox 内置在 VBA 中,无法修改。
但是,您可以编写自己的 InputBox。这样做:
您必须创建一个名为 formComboInput 的用户表单,其中包含组合框、标签和按钮等。
在名为 ReturnVal 的表单代码中创建一个公共整数变量。
将值 -1 分配给 formComboInput.InialiseForm 子中的 ReturnVal,并在该子中填充组合框。
在用户窗体按钮单击代码中,将 formComboInput.comboInput.ListIndex 的值赋给 ReturnVal,并隐藏窗体。
加载表单时,使用 InitialiseForm() 等子例程填充组合框。您可以将组合框范围存储在单独的工作表或静态数组中。
然后插入类似于下面的代码(未经测试,抱歉):
' User form code:
Option Explicit
public ReturnVal as integer
sub InitialiseForm()
dim i as integer
ReturnVal = -1
comboInput.Clear
for i = 1 to ThisWorkbook.Worksheets.Count ' Populates combobox
comboInput.AddItem ThisWorkbook.Worksheets(i).Name
next
end sub
btnOK_Click()
ReturnVal = comboInput.ListIndex ' Change ReturnVal from -1 to the listbox index
Me.Hide
End Sub
' Module/sheet code:
Option Explicit
function ShowComboInput(InputBoxCaption as String, DefaultResult as String) as String
with formComboInput
.InitialiseForm() ' Make the combo box populate etc
.labelCaption = InputBoxCaption
.Show vbModal ' CODE EXECUTION PAUSES HERE UNTIL FORM IS CLOSED
if .ReturnVal > -1 then
ShowComboInput = .comboInput.Value ' Returned if user clicks OK button
else
ShowComboInput = DefaultResult ' Returned if user closes form
end if
end with
end function
sub InputBoxExample() ' Call this sub to test the above code
MsgBox ShowComboInput("Testing", "User didn't click OK button!")
end sub
此代码未经测试,因此可能需要进行一些调整,但通常这是我实现自定义输入框的方式。
于 2013-07-16T23:44:09.660 回答
0
您可以创建一个包含值的列表(只是另一个工作表中的一些单元格),标记列表并为选择命名(通常是公式字段左侧的字段),例如“myList”,然后选择类型而不是输入字符串"list" 并给出参数 =myList。
于 2013-07-16T21:23:26.763 回答