Предположим, у меня есть пользовательская форма с командной кнопкой с именем cmd_1
.Получить имя объекта в функции обратного вызова для объекта VBA?
Для моей заявки у меня есть много проверок, которые я хотел бы сделать в этом клике - см. this question для обсуждения того, что я пытаюсь сделать. В основном я надеюсь реализовать единую функцию обратного вызова с логическими правилами, которые я проверяю на основе имени вызывающего объекта, чтобы определить правомочность действий этого элемента управления.
Это будет выглядеть примерно так:
private function isValid(p_controlName as string) as boolean
'logical checks based on the the value of p_controlName
'returning true/false as appropriate
end function
и я бы использовать что-то вроде этого
Private Sub cmd_1_Click()
if isValid("cmd_1") = false then exit sub
End Sub
Теперь я буду помещать это в много обратных вызовов интерфейса (Мне не нравится думать о том, сколько). Я бы предпочел избежать утомительного добавления имени элемента управления для каждого обратного вызова. Я очень, очень много предпочел бы сделать что-то вроде:
Private Sub cmd_1_Click()
'this is not valid syntax
if isValid(ThisControl.name) = false then exit sub
End Sub
Это лучше целому ряду причин, в простоте реализации, последовательности, с меньшей вероятностью ошибок и т.д.
Однако я не могу, кажется, найти способ получить имя вызывающего элемента управления в функции обратного вызова.
- Есть ли способ получить имя элемента управления в коде VBA из функции обратного вызова для использования в качестве аргумента, как я пытаюсь?
Хм это, кажется, скорее всего, будет именно то, что мне нужно. Я, вероятно, буду постоянно параноидальным, что 'ActiveControl' вернет недействительный элемент управления по любой причине, хотя ... – enderland