许多button(userform)控制一个单独的macros,根据select打开不同的用户表单

我创build了一个小的excel表单来更新数据库。 工作很好,虽然工作人员做了奇怪的事情,必须用一个干净的版本每周更换Excel。 所以我想创build更新Excel表(DutySelection)的用户forms。 我有很多button(用户窗体)A4:A31将控制一个单独的macros,打开3个不同的用户forms取决于B4:B31下拉列表select

目前我的代码只能从B4工作,无论我点击哪个button。 EG:B4select开始,开始表格打开。 B6select完成,“开始”窗体打开

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 

我在想,我错过了一两行,但只是不能find我所需要的在线

Sheet.Range(“B4,B31”)不会返回您认为它所做的事情:它返回一个由2个区域组成的复合范围,区域1为单元格B4,区域2为单元格B31。 也就是说,当你select单元格B4,然后按住Ctrl单击单元格B31时,就会得到相同的结果。

我认为你的意思是“B4:B31”,但是这也会返回一些其他的东西:一个数组填充(范围在B4到B31范围内的所有单元格的值)。 你不能把它和一个文本string进行比较。

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

另一个问题是,你的代码只能作用于匹配的第一个文本。 因此,如果单元格B4包含“开始”,那么ElseIf将无法评估,即使单元格B5包含“职务types”也不行。 处理这个问题的最好方法取决于你如何获得你的工作表中B列的文本。

如果我正确理解了你,你在B列旁边的每一行都有一个button,点击它就会调用相应行中列B中select的动作,对吗?

在这种情况下,我会build议你把3个button放在一起,调用3个不同的macros。

问候,增值税