Мне нужно в .OnAction процедуры модуля ЭтаКнига прописать имя процедуры, размещённой в стандартном модуле и определённой как Private Sub (Private - чтобы не мозолила глаза в "Макросах" . Модуль пока называется по умолчанию Module1, но при "причёсывании" кода скорее всего будет переименован. Вот я и хотел .OnAction сделать составным из программно задаваемого (через переменную) имени модуля и имени процедуры. А узнать имя модуля что-то не получается
Указать в коде имя модуля листа, где работает процедура, просто:
Код
Sub Module_Name()
Debug.Print Me.Name
End Sub
А как указать имя стандартного модуля?
Изменено: Alex_ST - 22.02.2013 14:28:15(Сплющился в одну строку код... Долбаные тэги!)
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Однако, если необходимо на OnAction вешать, то проще задать однозначное имя проекта(Tools-VBAProject Properties). Например - AlexStVBP. И тогда на OnAction можно вешать так: AlexStVBP.ИмяПроцедуры
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Юрий, Дмитрий, спасибо за советы. В .VBProject забираться не хотелось, но придётся, наверное... Дмитрий, кто-то кого-то не понял, наверное... У меня в модуле Private Sub, которую я хочу вызывать по OnAction из модуля ЭтаКнига Разве ЛОКАЛЬНО видную только а в текущем модуле Private Sub будет видно из другого модуля, когда она будет указываться как процедура проекта?
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Юрий М пишет: Какая разница - в каком модуле будет процедура?
В том-то и дело, что Private Sub, размещённая а стандартном модуле, не хочет вызываться в OnAction процедуры, расположенной в модуле ЭтаКнига, если не указать имя модуля перед именем процедуры.
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)
Alex_ST пишет: (Private - чтобы не мозолила глаза в "Макросах")
Alex_ST, option private module не поможет? в списке по Alt+F8 не видать, и вызывается без проблем, без указания имени модуля. только private перед sub не надо писать.
другой вариант - объявить обычную (т.е. по дефолту public) процедуру с "фальшивым" аргументом. в списке макросов ее тоже не будет.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
В том-то и дело, что Private Sub, размещённая а стандартном модуле, не хочет вызываться в OnAction процедуры, расположенной в модуле ЭтаКнига, если не указать имя модуля перед именем процедуры.
Алексей, с чего это не хочет вызываться? Должен же! Назначение Obj.OnAction = "MyMacro" в модуле ЭтаКнига при Private Sub MyMacro() в стандартном модуле работает, что для Shape, что для CommandBarButton в качестве Obj. Нужно только позаботиться, чтобы имя макроса было уникальным, т.е. чтобы не было макросов с таким же именем в других модулях этой же книги. Может, уже пора и примерчик, а то видите, как тяжело по праздникам угадывается
гм... может быть, я чего недопонял... я понял так: есть какие-то процедуры "OnAction" (т.е. обработчики событий), расположенные в модуле книги. Workbook_Open Workbook_SheetChange ну или какие-то другие...
и вот из них есть нужда вызвать процедуру, расположенную в стандартном модуле. причем не просто процедуру, а объявленную сгоряча как Private причем объявленную так только лишь для того, чтобы это процедура не светилась в списке макросов. (без обид, но - это как для борьбы с перхотью записаться в очередь на гильотину)
да, VBA ругается. пишет Sub or Function not defined
мои предложения были исходя из этого. например, при объявлении Option Private Module - и овцы цели, и волки сыты.
но если вопрос в другом... ждём-с.
фрилансер Excel, VBA - контакты в профиле "Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Ребята, спасибо за помощь. У меня дома ремонт, поэтому до компа добрался только сейчас и то не надолго (уже вон на меня ворчат, что немного прибрать инструменты было бы не плохо, а не в интернете копаться без дела). Так что проверить ваши рекомендации смогу только в понедельник на работе. Я на досуге пытаюсь часть своих нужных макросов с кнопочками сделать создаваемыми программно внутри стандартных менюшек Excel'я и оформить в виде надстроек, а то Personal.xls уж больно большой стал. Да и на 2010-й переползать так удобнее. Поэтому все "труды плодов" на рабочем компе.
С уважением, Алексей(ИМХО: Excel-2003 - THE BEST!!!)