3

有没有办法在提示本身中生成具有多个选项的输入提示。用户可以选择提供的任何选项。到目前为止,我正在使用“输入字符串”然后设置变量的值。示例:选择哪张纸?表 1?表2?表 3?

4

2 回答 2

1

如果您的意思是使用 InputBox() 函数:

回答:不,你不能。InputBox 内置在 VBA 中,无法修改。

但是,您可以编写自己的 InputBox。这样做:

  1. 您必须创建一个名为 formComboInput 的用户表单,其中包含组合框、标签和按钮等。

  2. 在名为 ReturnVal 的表单代码中创建一个公共整数变量。

  3. 将值 -1 分配给 formComboInput.InialiseForm 子中的 ReturnVal,并在该子中填充组合框。

  4. 在用户窗体按钮单击代码中,将 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 回答