带选项的输入提示

时间:2013-07-16 20:46:59

标签: excel vba excel-vba

是否有一种方法可以在提示本身中生成具有多个选项的输入提示。用户可以选择提供的任何一个选项。截至目前,我正在使用“输入字符串”,然后设置变量的值。 例: 哪个表格可供选择? 工作表Sheet1? Sheet2的? 表Sheet 3?

2 个答案:

答案 0 :(得分:1)

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

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

但是你可以编写自己的InputBox。做到这一点:

  1. 您必须使用组合框,标签和按钮等创建名为formComboInput的用户窗体。

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

  3. 在formComboInput.InialiseForm子目录中将值-1赋给ReturnVal,并在该子组中填充组合框。

  4. 在userform按钮中单击代码,将formComboInput.comboInput.ListIndex的值指定给ReturnVal,并隐藏表单。

  5. 当表单加载时,使用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。