Возможно ли для xlam Excel addin переопределить подпрограмму из рабочей книги? - PullRequest
0 голосов
/ 29 марта 2019

Надстройка xlam Excel, которую я создаю, взаимодействует с электронной таблицей из внешних источников. Беда в том, что лист, помимо прочего, в событии Workbook Change содержит код, который выдает всплывающее окно MsgBox, связанное с автоматизацией, ожидающей ввода данных пользователем. Всплывающее окно не вызывается напрямую - событие Workbook Change вызывает пользовательский Sub с именем ShowPopup. Затем внутри ShowPopup у нас есть вызов MsgBox.

Я думал, что если бы я мог переопределить саб ShowPopup, я мог бы помешать ему создать MsgBox. Можно ли это сделать?

Ограничения на возможные решения:

  • Полное переопределение события Workbook Change не требуется, есть вещи, которые действительно необходимы.
  • Я не могу внести какие-либо изменения в код внешнего источника, с которым надстройка xlam Excel взаимодействует с
  • Application.DisplayAlerts = False не работает для явно вызываемых MsgBox'es

1 Ответ

1 голос
/ 29 марта 2019

Мне удалось решить мою проблему, хотя и не так, как я планировал изначально. В конце концов, это включает переопределение функции MsgBox.

Для дальнейшего использования здесь приведены шаги.

  1. В любом из модулей расширения .xlam создайте глобальную переменную Global macroRunning As Boolean
  2. В подпрограмме, где находится цикл автоматизации, мы помещаем это перед циклом: macroRunning = True и наоборот после цикла.
  3. Создайте новый модуль, я назвал его MsgBoxHack и поместил этот код внутри:

    Public Function MsgBox( _
    Prompt, _
    Optional Buttons As VbMsgBoxStyle = vbOKOnly, _
    Optional Title, _
    Optional HelpFile, _
    Optional Context _
    ) _
    As VbMsgBoxResult
    
      If IsMissing(Title) Then
          Title = "Overriden MsgBox"
      End If
    
      If macroRunning = False Then
          MsgBox = VBA.Interaction.MsgBox(Prompt, Buttons, Title, HelpFile, Context)
      End If
    
    End Function
    
    1. Вот и все, когда ваша глобальная переменная macroRunning установлена ​​в True, вы не увидите никаких MsgBoxes

Недостаток - эта переопределенная функция MsgBox будет работать на всех книгах, над которыми вы работаете, пока надстройка включена в Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...