是否有一种方法可以在提示本身中生成具有多个选项的输入提示。用户可以选择提供的任何一个选项。截至目前,我正在使用“输入字符串”,然后设置变量的值。 例: 哪个表格可供选择? 工作表Sheet1? Sheet2的? 表Sheet 3?
答案 0 :(得分:1)
如果您的意思是使用InputBox()函数:
答案:不,你不能。 InputBox内置于VBA中,无法修改。
但是你可以编写自己的InputBox。做到这一点:
您必须使用组合框,标签和按钮等创建名为formComboInput的用户窗体。
在表单的代码中创建一个名为ReturnVal的公共整数变量。
在formComboInput.InialiseForm子目录中将值-1赋给ReturnVal,并在该子组中填充组合框。
在userform按钮中单击代码,将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
此代码未经测试,因此可能需要进行一些调整,但一般情况下我会实现自定义输入框。
答案 1 :(得分:0)
您可以创建一个包含值的列表(只是另一个工作表中的一些单元格),标记列表并为选择提供一个名称(通常是公式字段左侧的字段),例如“myList”然后选择“list”类型而不是输入字符串,并给出参数= myList。