我已经创建了一个用于更新数据库的小型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
我在想我错过了一两行,但却找不到我在网上需要的东西
答案 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个不同的宏。
问候, 大桶