В чем проблема. Пишу макрос, добавляющий вызов процедуры во всплывающее по правой кнопке контекстное меню. На Win версии Excel (свежеобновленная 2021) в "Эта книга" вставляю следующий код: [vba]
Код
Private Sub Workbook_Open() ThisWorkbook.Workbook_SheetActivate ActiveSheet End Sub
Public Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Base" Then With Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = "Send" .OnAction = "Send2Spec" .FaceId = 1154 .BeginGroup = True End With ElseIf Sh.Name = "Spec" Then With Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = "Final" .OnAction = "Final" .FaceId = 1156 .BeginGroup = True End With End If End Sub
Public Sub Workbook_SheetDeactivate(ByVal Sh As Object) On Error Resume Next Application.CommandBars("Cell").Controls("Send").Delete Application.CommandBars("Cell").Controls("Final").Delete On Error GoTo 0 End Sub
[/vba]
И всё прекрасно работает. Но только на Windows. На Mac-версии Excel (2021, 16.82 24012414) в VBA код после открытия файла виден, но он отображается не в "Эта книга", а в "Ёта нига" (а ниже по списку появляется "ЭтаКнига1", без кода внутри). Хотя при этом наверху в редакторе VBA нормально отображается, например, Workbook и SheetActivate. Но не важно, собственно, как отображается — главное, что даже не пытается исполняться по эвентам. Расставлял брекпойнты по коду — никаких попыток нет. Естественно, в "безопасности" разрешено выполнение любых макросов. Если сделать новый файл на маке и положить этот же код в него — всё работает, но вряд ли хорошая мысль купить себе мак для разработки одного файла.
Что нужно сделать, чтобы разрабатываемый на Win-версии код работал на Mac? Может быть какие-то настройки в Win-версии нужно поправить? Какое-то из свойств книги скорректировать из дефолта? Или как-то отключить русификацию дефолтных имен книг, чтобы вместо "Эта книга" было "This Workbook" (но тогда как?).
Коллеги, добрый день!
В чем проблема. Пишу макрос, добавляющий вызов процедуры во всплывающее по правой кнопке контекстное меню. На Win версии Excel (свежеобновленная 2021) в "Эта книга" вставляю следующий код: [vba]
Код
Private Sub Workbook_Open() ThisWorkbook.Workbook_SheetActivate ActiveSheet End Sub
Public Sub Workbook_SheetActivate(ByVal Sh As Object) If Sh.Name = "Base" Then With Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = "Send" .OnAction = "Send2Spec" .FaceId = 1154 .BeginGroup = True End With ElseIf Sh.Name = "Spec" Then With Application.CommandBars("Cell").Controls.Add(Type:=msoControlButton, Temporary:=True) .Caption = "Final" .OnAction = "Final" .FaceId = 1156 .BeginGroup = True End With End If End Sub
Public Sub Workbook_SheetDeactivate(ByVal Sh As Object) On Error Resume Next Application.CommandBars("Cell").Controls("Send").Delete Application.CommandBars("Cell").Controls("Final").Delete On Error GoTo 0 End Sub
[/vba]
И всё прекрасно работает. Но только на Windows. На Mac-версии Excel (2021, 16.82 24012414) в VBA код после открытия файла виден, но он отображается не в "Эта книга", а в "Ёта нига" (а ниже по списку появляется "ЭтаКнига1", без кода внутри). Хотя при этом наверху в редакторе VBA нормально отображается, например, Workbook и SheetActivate. Но не важно, собственно, как отображается — главное, что даже не пытается исполняться по эвентам. Расставлял брекпойнты по коду — никаких попыток нет. Естественно, в "безопасности" разрешено выполнение любых макросов. Если сделать новый файл на маке и положить этот же код в него — всё работает, но вряд ли хорошая мысль купить себе мак для разработки одного файла.
Что нужно сделать, чтобы разрабатываемый на Win-версии код работал на Mac? Может быть какие-то настройки в Win-версии нужно поправить? Какое-то из свойств книги скорректировать из дефолта? Или как-то отключить русификацию дефолтных имен книг, чтобы вместо "Эта книга" было "This Workbook" (но тогда как?).vlutoshkin
Вроде бы заработало, еще раз спасибо. Я думал, что это прямо зашитые имена и если их изменить - не будут работать функции типа Workbook.Open. Был не прав
Вроде бы заработало, еще раз спасибо. Я думал, что это прямо зашитые имена и если их изменить - не будут работать функции типа Workbook.Open. Был не прав vlutoshkin