Управление многими кнопками (пользовательская форма) одного макроса открывает различные пользовательские формы в зависимости от выбора
Я создал небольшую форму Excel для обновления базы данных. отлично работает, хотя сотрудники делают странные вещи и должны еженедельно заменять Excel на чистую версию. Поэтому я думаю о создании пользовательских форм, которые обновляют таблицу Excel (DutySelection). У меня много кнопок (пользовательская форма) A4:A31, которые будут управлять одним макросом, который открывает 3 различные пользовательские формы в зависимости от выбора выпадающего списка B4:B31
В настоящее время мой код работает только с B4 независимо от того, какую кнопку я нажимаю. Например: B4 выбор Start, открывается форма Start. B6 Выбор Finish, открывается форма Start
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 ответа
Sheet.Range("B4,B31") не возвращает то, что вы думаете: он возвращает составной диапазон, состоящий из 2 областей, область 1 - ячейка B4, а область 2 - ячейка B31. То есть, то же самое, что вы получили бы, когда вы выбираете ячейку B4, а затем кликаете по ячейке B31, удерживая нажатой клавишу Ctrl.
Я думаю, что вы имели в виду "B4:B31", но это также возвращает кое-что еще: массив, заполненный (значениями) всех ячеек в диапазоне от B4 до B31. Вы не можете сравнить его с текстовой строкой просто так.
То, что вы действительно хотите здесь, - это перебрать все ячейки между B4 и B31, а затем сравнить их значения с интересующими вас текстами.
Другая проблема заключается в том, что ваш код действует только на первый соответствующий текст. Таким образом, если ячейка B4 содержит "Start", то ElseIf никогда не будет оцениваться, даже если ячейка B5 содержит "Duty Type". Лучший способ справиться с этим зависит от того, как вы получите эти тексты в столбце B на вашем листе.
Если я вас правильно понял, у вас есть кнопка в каждой строке рядом со столбцом B, и нажатие на нее вызывает действие, выбранное в столбце B соответствующей строки, верно?
В этом случае я бы предложил разместить 3 кнопки рядом друг с другом, которые вызывают 3 разных макроса.
Привет, чан