Как сохранить и использовать свои макросы VBA во всех книгах Excel?
Возможны многочисленные ситуации, когда вам может понадобиться многократно использовать один и тот же макрос VBA в разных книгах Excel для выполнения задач, таких как автоматизация повторяющихся вычислений, форматирование данных или пользовательские функции, например, преобразование чисел в слова. Распространённой проблемой является то, что по умолчанию макросы сохраняются только в той книге, где они были созданы, а это означает, что доступ к ним или их повторное использование в новых документах затруднено. Однако Excel предлагает несколько гибких методов, чтобы сделать макрос VBA доступным глобально, устраняя необходимость каждый раз копировать код при создании новой книги. Это руководство предоставляет подробные инструкции по различным подходам, чтобы обеспечить легкий доступ к вашим макросам VBA во всех книгах, увеличивая вашу продуктивность и упрощая рабочий процесс.
Сохранение и использование кода VBA во всех книгах
Метод личной книги макросов
Например, предположим, что вы хотите иметь возможность преобразовывать числа в их эквивалент на английском языке с помощью пользовательского кода VBA и быть уверенным, что эта функция всегда будет доступна, независимо от того, в какой книге вы работаете. При правильном подходе вы можете сохранить свои модули VBA так, чтобы они были многоразовыми, когда вам нужно их использовать в Excel. Это особенно полезно для пользовательских функций или автоматизации, которые вы хотите иметь под рукой каждый раз без дублирования кода в нескольких файлах.
Для этого вы можете упаковать свой код VBA в виде пользовательского надстройки Excel. Эта надстройка может быть включена в Excel и предоставит вашу пользовательскую функциональность как глобально доступную функцию.
Следуйте этим шагам:
1. Нажмите Alt + F11 в Excel, чтобы открыть окно "Microsoft Visual Basic for Applications".
2. В редакторе VBA нажмите Вставка > Модуль и вставьте следующий макрос в новое окно Модуля.
Код VBA: Преобразование чисел в слова
Function NumberstoWords(ByVal MyNumber)
'Update by ExtendofficeDim xStr As StringDim xFNum As IntegerDim xStrPointDim xStrNumberDim xPoint As StringDim xNumber As StringDim xP() As VariantDim xDPDim xCnt As IntegerDim xResult, xT As StringDim xLen As IntegerOn Error Resume NextxP = Array("", "Thousand ", "Million ", "Billion ", "Trillion ", " ", " ", " ", " ")
xNumber = Trim(Str(MyNumber))
xDP = InStr(xNumber, ".")
xPoint = ""
xStrNumber = ""
If xDP >0 ThenxPoint = " point "
xStr = Mid(xNumber, xDP +1)
xStrPoint = Left(xStr, Len(xNumber) - xDP)
For xFNum =1 To Len(xStrPoint)
xStr = Mid(xStrPoint, xFNum,1)
xPoint = xPoint & GetDigits(xStr) & " "
Next xFNumxNumber = Trim(Left(xNumber, xDP -1))
End IfxCnt =0xResult = ""
xT = ""
xLen =0xLen = Int(Len(Str(xNumber)) /3)
If (Len(Str(xNumber)) Mod3) =0 Then xLen = xLen -1Do While xNumber <> ""
If xLen = xCnt ThenxT = GetHundredsDigits(Right(xNumber,3), False)
ElseIf xCnt =0 ThenxT = GetHundredsDigits(Right(xNumber,3), True)
ElsexT = GetHundredsDigits(Right(xNumber,3), False)
End IfEnd IfIf xT <> "" ThenxResult = xT & xP(xCnt) & xResultEnd IfIf Len(xNumber) >3 ThenxNumber = Left(xNumber, Len(xNumber) -3)
ElsexNumber = ""
End IfxCnt = xCnt +1LoopxResult = xResult & xPointNumberstoWords = xResultEnd FunctionFunction GetHundredsDigits(xHDgt, xB As Boolean)
Dim xRStr As StringDim xStrNum As StringDim xStr As StringDim xI As IntegerDim xBB As BooleanxStrNum = xHDgtxRStr = ""
On Error Resume NextxBB = TrueIf Val(xStrNum) =0 Then Exit FunctionxStrNum = Right("000" & xStrNum,3)
xStr = Mid(xStrNum,1,1)
If xStr <> "0" ThenxRStr = GetDigits(Mid(xStrNum,1,1)) & "Hundred "
ElseIf xB ThenxRStr = "and "
xBB = FalseElsexRStr = " "
xBB = FalseEnd IfEnd IfIf Mid(xStrNum,2,2) <> "00" ThenxRStr = xRStr & GetTenDigits(Mid(xStrNum,2,2), xBB)
End IfGetHundredsDigits = xRStrEnd FunctionFunction GetTenDigits(xTDgt, xB As Boolean)
Dim xStr As StringDim xI As IntegerDim xArr_1() As VariantDim xArr_2() As VariantDim xT As BooleanxArr_1 = Array("Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen ")
xArr_2 = Array("", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety ")
xStr = ""
xT = TrueOn Error Resume NextIf Val(Left(xTDgt,1)) =1 ThenxI = Val(Right(xTDgt,1))
If xB Then xStr = "and "
xStr = xStr & xArr_1(xI)
ElsexI = Val(Left(xTDgt,1))
If Val(Left(xTDgt,1)) >1 ThenIf xB Then xStr = "and "
xStr = xStr & xArr_2(Val(Left(xTDgt,1)))
xT = FalseEnd IfIf xStr = "" ThenIf xB ThenxStr = "and "
End IfEnd IfIf Right(xTDgt,1) <> "0" ThenxStr = xStr & GetDigits(Right(xTDgt,1))
End IfEnd IfGetTenDigits = xStrEnd FunctionFunction GetDigits(xDgt)
Dim xStr As StringDim xArr_1() As VariantxArr_1 = Array("Zero ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ")
xStr = ""
On Error Resume NextxStr = xArr_1(Val(xDgt))
GetDigits = xStrEnd Function
3. Теперь нажмите значок «Сохранить», расположенный в верхнем левом углу окна, или просто нажмите Ctrl + S чтобы открыть диалоговое окно «Сохранить как».
4. В окне «Сохранить как» введите желаемое имя файла в поле «Имя файла». Для выпадающего списка «Тип файла» обязательно выберите Надстройка Excel (*.xlam).
5. Нажмите кнопку «Сохранить», чтобы сохранить вашу книгу в виде файла надстройки Excel. Это создаст многоразовую надстройку, которую можно включить в любое время для любой книги.
6. После сохранения вернитесь в Excel и закройте книгу, которую вы только что преобразовали в надстройку.
7. Откройте новую или существующую книгу, где вы хотите использовать свой макрос. Введите пользовательскую формулу в соответствующую ячейку (например, в B2):
=NumberstoWords(A2)

8. Перейдите на вкладку Разработчик и нажмите кнопку Надстройки Excel в группе Надстройки.
9. В появившемся диалоговом окне Надстройки выберите Обзор.
10. Найдите и выберите ранее сохранённый файл надстройки, затем нажмите OK.
11. Ваша пользовательская надстройка, например, «Convert Number To Words Add-in», теперь должна появиться в списке надстроек. Убедитесь, что она отмечена, и нажмите OK чтобы включить её.
12. Теперь снова введите пользовательскую функцию в целевую ячейку (например, в B2) и нажмите Enter. Вы должны увидеть, что формула возвращает правильные английские слова для числа.
=NumberstoWords(A2)
13. Чтобы быстро применить формулу преобразования к нескольким числам, перетащите маркер автозаполнения ячейки вниз, чтобы скопировать функцию в другие ячейки.

Советы и примечания:
- Сохранение вашего макроса в виде надстройки позволяет использовать одни и те же пользовательские функции, код или автоматизацию во всех ваших книгах, экономя время и повышая согласованность.
- Если Excel закрыт или надстройка позднее отключена, функции из надстройки могут временно показывать «#ИМЯ?», пока надстройка не будет загружена снова. Чтобы избежать путаницы, убедитесь, что надстройка всегда включена в менеджере надстроек, когда это необходимо.
- Некоторые пользователи могут не видеть вкладку Разработчик по умолчанию. Чтобы включить её, щёлкните правой кнопкой мыши ленту, выберите «Настроить ленту» и отметьте опцию «Разработчик».
- Хорошей практикой является хранение надстроек в постоянной папке, чтобы избежать пропусков ссылок при перемещении или переименовании файлов.
Если вы предпочитаете запускать код вручную, это также возможно и иногда полезно при отладке или для использования на лету:
- Вы можете назначить макрос на Панель быстрого доступа для однократного выполнения в любой видимой книге. Для этого щёлкните правой кнопкой мыши Панель быстрого доступа, выберите «Настроить Панель быстрого доступа», затем добавьте свой макрос.
- Вы также можете нажать Alt + F11, чтобы открыть редактор VBA, вручную выбрать свой макрос и нажать F5, чтобы запустить код по мере необходимости.
Преимущества: Это решение позволяет создавать и делиться богатым, многоразовым функционалом макросов, который всегда будет работать, если надстройка включена.
Недостатки: Пользователям нужно помнить о загрузке надстройки, и если книги передаются другим, также нужно передавать файл надстройки и детали функции. Кроме того, надстройки нельзя использовать в Excel Online.
Ещё один очень практичный способ убедиться, что ваши любимые или наиболее часто используемые макросы готовы в каждом сеансе Excel, независимо от открытой книги, — это использование Личной книги макросов (PERSONAL.XLSB). Это специальный скрытый файл Excel, который автоматически загружается каждый раз при запуске Excel, позволяя любому макросу, хранящемуся внутри, быть доступным во всех открытых книгах.
Применимые сценарии: идеально подходит для личной автоматизации, регулярных скриптов форматирования или служебных функций, которые не нужно распространять как официальные надстройки Excel. Макросы в PERSONAL.XLSB доступны на вашем компьютере независимо от того, какой файл открыт.
Преимущества: Макросы доступны глобально для вашего локального профиля Excel и не требуют установки дополнительных надстроек или файлов.
Недостатки: Макросы, сохранённые таким образом, можно использовать только на том компьютере и в той учётной записи, где существует PERSONAL.XLSB. Обмен с другими пользователями требует экспорта и импорта модулей вручную.
- Чтобы использовать этот метод, сначала нужно записать или создать макрос и убедиться, что он сохранён в Личной книге макросов.
Следуйте этим шагам:
- Откройте Excel. На вкладке Вид нажмите Макросы, затем Запись макроса.
- В диалоговом окне, в разделе «Сохранить макрос в», выберите Личная книга макросов. Завершите запись (вы можете сразу остановить запись, если это не требуется).
- Нажмите Alt + F11, чтобы войти в редактор VBA, где вы увидите проект для PERSONAL.XLSB. Здесь вставьте новый модуль или вставьте нужный код макроса.
- Сохраните изменения. Excel автоматически создаёт и поддерживает книгу PERSONAL.XLSB в своей стартовой папке.
- Макросы в PERSONAL.XLSB затем можно запустить через диалоговое окно Макросы (Alt + F8), назначить на кнопки ленты или панели инструментов или вызвать из VBA.
Устранение неполадок и обслуживание: Если макросы в PERSONAL.XLSB недоступны, проверьте, не запускается ли Excel в безопасном режиме или не установлены ли параметры безопасности макросов на «Отключить все макросы». Кроме того, PERSONAL.XLSB скрыт по умолчанию; если вы случайно закроете его без сохранения или удалите, вам может потребоваться перезаписать макрос для его воссоздания.
C:\Users\[YourUserName]\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
Код VBA для вывода списка всех надстроек в Excel
В Excel вы можете добавить или вставить некоторые надстройки для лучшего управления данными. Как известно, мы можем перейти в окно Параметры, чтобы просмотреть все надстройки, но есть ли способ вывести список всех надстроек на лист? В этом руководстве представлен код VBA для вывода списка всех надстроек в Excel.
Как запустить макрос VBA при открытии или закрытии книги?
В этой статье я расскажу вам, как запускать код VBA при каждом открытии или закрытии книги.
Как защитить / заблокировать код VBA в Excel?
Точно так же, как вы можете использовать пароль для защиты книг и листов, вы также можете установить пароль для защиты макросов в Excel.
Как использовать задержку времени после запуска макроса VBA в Excel?
В некоторых случаях вам может понадобиться таймер задержки для запуска макроса VBA в Excel. Например, при нажатии для запуска определённого макроса он вступит в силу через 10 секунд. Эта статья покажет вам метод достижения этого.
Лучшие инструменты для повышения продуктивности в Office
Повысьте свои навыки работы в Excel с Kutools для Excel и ощутите новую эффективность. Kutools для Excel предлагает более300 расширенных функций для повышения продуктивности и экономии времени. Щелкните здесь, чтобы получить наиболее нужную вам функцию...
Office Tab добавляет вкладочный интерфейс в Office, делая вашу работу значительно проще
- Включите редактирование и чтение во вкладках в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
- Открывайте и создавайте несколько документов во вкладках одного окна, а не в новых окнах.
- Увеличьте свою продуктивность на50% и сократите сотни кликов мышью ежедневно!