Страницы: Пред. 1 2
RSS
запуск нужного макроса с панели инструментов
 
Поменяйте  
n$ = ThisWorkbook.Name  
на  
n$ = ThisWorkbook.FullName  
P. S. Проверял на 2003 Excel, панель и кнопка создавались с Temporary:=True
 
anvg, я это первым делом проверил.  
Увы, не помогает, - всё работает точно также, как и с ThisWorkbook.Name  
 
Проверял тоже на Excel  2003.
 
Извиняюсь, пропустил, что в обсуждении упоминалось об установленном флаге IsAddIn. Именно при нём получается такое поведение. На обычных книгах работает правильно.  
Как вариант из обсуждённых обходов, могу предложить следующее.  
1. Переименовать объект книги с ЭтаКнига на, допустим, MyBookV1 для первого, MyMacroV2 для второго и т. д..  
2. Разместить методы обработчики событий кнопок панели непостредственно в коде книги.  
3. OnAction будет равен ThisWorkBook.CodeName & ".MyMacro".  
 
Естественно, если это не требует существенного изменения кода, то вызовы методов выполняются правильно.
 
а у меня и в 2003м работает - caller  имею ввиду..  
 
хотя в справке и не описана такая возможность  
 
но у меня два офиса стоят рядом 7 и 3
Живи и дай жить..
 
anvg, вариант с изменениями кодовых имен не подходит  
Проще уж тогда макросы переименовать, и не мудрить ничего.  
Как я уже говорил, дело в том, что код нужен универсальный - модуль кода (один и тот же) будет вставляться в множество разных файлов (надстроек)  
А если начать что-то переименовывать - я сам запутаюсь во всех этих именах,  
да и постоянно корректировать код - мало удовольствия.  
К тому же, решение уже найдено (3 лишних строки кода)  
 
 
слэн, у меня на домашнем компе 3 офиса вместе установлены (2003,2007,2010)  
на другом компе - только 2003.  
Но ошибка вылазит на обоих компах.  
Видимо, потому в справке про это ничего и не написали.
 
если через параметр, то что-то очень сложно там, мне кажется можно аналогично моему:  
 
Private Sub Workbook_Open()  
   With Application  
       On Error Resume Next  
       .CommandBars(.ThisWorkbook.Name).Delete  
       On Error GoTo 0  
       With .CommandBars.Add(.ThisWorkbook.Name, msoBarTop, False, True)  
           .Visible = True  
           With .Controls.Add(, , , , True)  
               .Caption = Application.ThisWorkbook.Name  
               .Style = msoButtonIconAndCaption  
               .OnAction = "CommonMacro"  
               .Tag = "macro"  
               .FaceId = 487  
               .parameter = "'" & ThisWorkbook.Name & "'!macro"  
           End With  
       End With  
   End With  
End Sub  
 
Sub macro()  
MsgBox 1  
End Sub  
 
Sub CommonMacro()  
Application.Run Application.CommandBars.ActionControl.parameter  
End Sub  
а можно и вообще не на параметр, а на имя меню повесить:  
Application.CommandBars.ActionControl.parent.name
Живи и дай жить..
Страницы: Пред. 1 2
Читают тему
Наверх