许多按钮(userform)控制单个宏根据选择打开不同的用户形式

时间:2016-01-24 14:43:09

标签: excel vba userform

我已经创建了一个用于更新数据库的小型excel表单。工作得很好,虽然工作人员正在做一些奇怪的事情,并且必须用干净的版本每周更换excel。所以我正在考虑创建更新excel表(DutySelection)的用户表单。 我有很多按钮(用户形式)A4:A31将控制一个宏,根据B4打开3个不同的用户形式:B31下拉列表选择

目前我的代码仅适用于B4,无论我点击哪个按钮。 EG:B4选择开始,打开开始表格。 B6选择完成,打开开始表单

Sub Duty()

    If Sheets("DutySelection").Range("B4,B31") = "Start" Then
        frmStart.Show

    ElseIf Sheets("DutySelection").Range("B4,B31") = "Duty Type" Then
        ReportUpdate.Show

    Else: Sheets("DutySelection").Range("B4,B31") = "Finish" 'Then
        frmFinish.Show

    End If
End Sub

我在想我错过了一两行,但却找不到我在网上需要的东西

2 个答案:

答案 0 :(得分:1)

Sheet.Range(" B4,B31")没有返回您的想法:它返回一个由2个区域组成的复合范围,区域1是单元格B4,区域2是单元格B31。即,与选择单元格B4时相同,然后按住Ctrl键单击单元格B31。

我认为你的意思是" B4:B31",但这也会返回其他内容:一个数组填充(B4到B31范围内所有单元格的值)。您无法将其与文本字符串进行比较。

这里你想要的是循环遍历B4和B31之间的所有单元格,然后将它们的值与你感兴趣的文本进行比较。

另一个问题是您的代码只会对匹配的第一个文本执行操作。因此,如果单元格B4包含"开始"那么即使单元格B5包含" Duty Type"也不会评估ElseIf。处理此问题的最佳方法取决于您如何在工作表的B栏中获取这些文本。

答案 1 :(得分:0)

如果我理解正确,你在B栏旁边的每一行都有一个按钮,然后点击它会调用相应行中B列中选择的动作,对吗?

在这种情况下,我建议您将3个按钮放在一起,调用3个不同的宏。

问候, 大桶