Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как правильно делать макросы, работающие и в Win, и в Mac? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно делать макросы, работающие и в Win, и в Mac? (Макросы/Sub)
Как правильно делать макросы, работающие и в Win, и в Mac?
vlutoshkin Дата: Воскресенье, 28.01.2024, 10:41 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

16.82
Коллеги, добрый день!

В чем проблема.
Пишу макрос, добавляющий вызов процедуры во всплывающее по правой кнопке контекстное меню. На 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
Дата добавления - 28.01.2024 в 10:41
Pelena Дата: Воскресенье, 28.01.2024, 12:04 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19137
Репутация: 4409 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Когда-то писала статью на эту тему
Совместимость макросов Excel для Windows и MacOS

чтобы вместо "Эта книга" было "This Workbook"
надо в редакторе VBA переименовать модуль книги


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Когда-то писала статью на эту тему
Совместимость макросов Excel для Windows и MacOS

чтобы вместо "Эта книга" было "This Workbook"
надо в редакторе VBA переименовать модуль книги

Автор - Pelena
Дата добавления - 28.01.2024 в 12:04
vlutoshkin Дата: Воскресенье, 28.01.2024, 13:46 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

16.82
Спасибо, очень познавательная статья!

надо в редакторе VBA переименовать модуль книги


Вроде бы заработало, еще раз спасибо. Я думал, что это прямо зашитые имена и если их изменить - не будут работать функции типа Workbook.Open. Был не прав :)
 
Ответить
СообщениеСпасибо, очень познавательная статья!

надо в редакторе VBA переименовать модуль книги


Вроде бы заработало, еще раз спасибо. Я думал, что это прямо зашитые имена и если их изменить - не будут работать функции типа Workbook.Open. Был не прав :)

Автор - vlutoshkin
Дата добавления - 28.01.2024 в 13:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно делать макросы, работающие и в Win, и в Mac? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!