Как узнать имя макроса excel


Download Article

An easy-to-use guide to find and manage macros in your Excel workbook


Download Article

This wikiHow teaches you how to see a list of macros in your Excel workbook, as well as how to view each macro’s details in the Visual Basic Editor. Before you can work with macros, you’ll need to enable the Developer tab in Excel—fortunately, this is super easy to do.

Steps

  1. Image titled View Macros in Excel Step 1

    1

    Open a workbook in Excel. You can double-click the name of the workbook to open it in Excel. Alternatively, open Excel first from the Windows Start menu or your Mac’s Applications folder, click Open, and then double-click the file.

  2. Image titled View Macros in Excel Step 2

    2

    Enable the Developer tab. If the Developer tab is enabled, it’ll be in the menu bar at the top of Excel. If you don’t see it, here’s how to enable it:

    • Windows:

      • Click the File menu and select Options.
      • Click Customize Ribbon.
      • Select Main Tabs from the «Customize the ribbon» drop-down menu.[1]
      • Check the box next to Developer and click OK.
    • macOS:

      • Click the Excel menu and select Preferences.[2]
      • Select Main Tabs under «Customize the Ribbon.»
      • Check the box next to Developer.
      • Click Save.

    Advertisement

  3. Image titled View Macros in Excel Step 3

    3

    Click the Developer tab. It’s at the top of Excel.

  4. Image titled View Macros in Excel Step 4

    4

    Click Macros. It’s on the left side of the toolbar. This displays a list of macros in all open workbooks by default.

    • To see macros in a particular workbook only, select that workbook’s name from the «Macros in» menu.
  5. Image titled View Macros in Excel Step 5

    5

    Select a macro and click Edit. This displays the macro in the Visual Basic Editor.

  6. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Thanks for submitting a tip for review!

References

About This Article

Article SummaryX

1. Open a workbook.
2. Click the Developer tab.
3. Click Macros.
4. Select a Macro.
5. Click Edit.

Did this summary help you?

Thanks to all authors for creating a page that has been read 41,480 times.

Is this article up to date?

1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

1

Excel

Получить имя текущего макроса

28.10.2022, 12:23. Показов 1204. Ответов 23


Студворк — интернет-сервис помощи студентам

Здравствуйте уважаемые форумяне! возможно ли решить такой вопрос, мне нужно получить имя макроса в котором я была, по принципу как есть клавиши ALT+X+А, которыми попадаешь в книгу макросов и как правило в тот макрос из которого выходишь

мне это нужно чтобы фиксировать историю изменений и не лезть в начало макроса для копии его имени

Благодарю!



0



531 / 164 / 27

Регистрация: 10.05.2021

Сообщений: 535

Записей в блоге: 7

28.10.2022, 12:27

2

Оксана33, здравствуйте!
Насколько мне известно, получить название запущенного макроса можно только с помощью макропарсинга проекта VBA (чтение строк). Это очень сложно и нужно иметь доступ к модели (галочка в настройках безопасности Excel).

Если вам нужно другое, то уточните…



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

28.10.2022, 20:19

 [ТС]

3

нет, не запущенного, а «последнего», тот, в котором находился перед выходом из редактора VB, ну или тот, в котором были сохранены последние изменения



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

29.10.2022, 07:00

4

Оксана33, наверно, это можно сделать красиво, но можно попробовать топорно:
1. Ввести паблик-переменную
2. при входе в нужные вам макросы смотреть и что-то делать с именем предыдущего макроса, записанного в паблик
3. записать в паблик имя макроса, в котором находимся.
Пункты 2 и 3 можно оформить тоже в макрос.
Думаю, что можно построить и схему вызова макросов.



3



129 / 109 / 21

Регистрация: 08.02.2017

Сообщений: 582

29.10.2022, 07:44

5

А что нужно, отслеживать изменения в макросах или макросов? Если 1е то, даже если это можно сделать через API, то наверное будет очень много кода.



1



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

29.10.2022, 15:53

 [ТС]

6

Цитата
Сообщение от testuser2
Посмотреть сообщение

отслеживать изменения в макросах или макросов

наверно последнее, если под первым вы имеете в виду в запуске

я просто веду учет на страничке в Excel — имя макроса и дата, чтобы потом знать если что не так, откуда корни

Добавлено через 2 минуты

Цитата
Сообщение от Burk
Посмотреть сообщение

записать в паблик имя макроса, в котором находимся.

возможно что то из этого, мне нужно чтобы на страничке в Эксель я вставила имя макроса, в котором делала изменения



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

29.10.2022, 16:58

7

Оксана33, теперь я что-то совсем не понимаю о чём речь — до этого я понимал, что необходимо знать вносил ли некий макрос изменения в рабочую книгу. Если речь идет о слежении за изменением самого тела макроса, то это не ко мне.

Цитата
Сообщение от Оксана33
Посмотреть сообщение

имя макроса, в котором делала изменения



0



811 / 465 / 181

Регистрация: 09.03.2009

Сообщений: 1,577

29.10.2022, 17:21

8

CVS в VBA хотите? Хм.

Обходной путь: при наличии доступа к VBE можно экспортировать код из книги. Дальше его сравнивать с прошлым вариантом. Либо в каждом макросе записать вызов функции, передавая ей свое имя. Функция экспортирует переданную процедуру, считает от нее CRC и пишет дату, время, имя, контрольную сумму в другой файл или на лист.

С год назад делал некое сравнение: выбираем 2 файла, макрос создает лист, где сверяет строки. Только синхронизации там нет, если начался добавленный/удаленный блок, будет показывать несоответствие. Это решили уж руками двигать.

Почему там через VBS делается — работа с кодом возможна только для текущей книги. Но если вам пойдет, можно и в код XLSM перенести.



0



testuser2

129 / 109 / 21

Регистрация: 08.02.2017

Сообщений: 582

29.10.2022, 19:06

9

Цитата
Сообщение от Оксана33
Посмотреть сообщение

наверно последнее

Если последнее, то с этим нет особых сложностей, что-то выше уже описали. Допустим так
Модуль книги

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Static rw&, cl&, ShMacro As Worksheet, logBl As Boolean, tmpArr(1 To 1, 1 To 3)
    If logBl = False Then
        If rw = 0 Then
            Set ShMacro = ThisWorkbook.Sheets("Макросы")
            rw = ShMacro.Rows(Rows.Count).End(xlUp).Row
            cl = 1
        End If
        If Len(lastMacro) Then
            logBl = True
            rw = rw + 1
            tmpArr(1, 1) = lastMacro                            'имя макроса
            tmpArr(1, 2) = Now                                  'время изменения
            tmpArr(1, 3) = Sh.Name & " " & Target.Address(0, 0) 'адресс измененного диапазона
            With ShMacro
              Range(.Cells(rw, cl), .Cells(rw, cl + 2)) = tmpArr
            End With
            lastMacro = Empty
            logBl = False
        End If
    End If
    
End Sub

Стандартный модуль

Visual Basic
1
2
3
4
5
6
Public lastMacro As String
'проверка
Sub Макрос1()
    lastMacro = "Макрос1" 'в каждом макросе первой строчкой присваиваем его имя глобальной переменной
    Sheets("Лист1").Range("A5") = 854
End Sub

Добавлено через 30 минут
Есть конечно нюансы в таком подходе, если в макросе будут отключаться события, то данный метод не будет работать, поэтому желательно их включать при выводе результата на лист. Потом, если макрос будет делать какие-то многократные изменения листа, логирование будет все тормозить.

Добавлено через 11 минут
Да, еще нюанс упустил, если в макросе будет запускаться или инициироваться другой макрос, то он будет перезаписывать глобальную переменную и последующие изменения в «родительском» макросе будут фиксироваться уже под неправильным именем. В общем требуется усложнение схемы..



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

31.10.2022, 18:40

 [ТС]

10

testuser2, насколько я поняла, в вашем примере я должна вызывать каждый макрос по имени, чтобы отследить время изменений и тд, то есть мне его нужно находить его в огромном списке, но мне не это нужно, мне не нужно отслеживать дату и сами изменения, поскольку дату я ставлю сама автоматом, а с изменениями я не сильно разобралась, хотя это и интересно, но мне куда важнее сразу получить тот самый макрос, а именно его имя, в котором я только что сделала изменения, чтобы внести его в список

Добавлено через 6 минут

Цитата
Сообщение от Burk
Посмотреть сообщение

Если речь идет о слежении за изменением самого тела макроса, то это не ко мне.

не тела, хотя бы имени)

PS. подозреваю что это невозможно(



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

01.11.2022, 05:32

11

Оксана33, ваш ответ неоднозначный, давайте чуть по-другому — 1. вы делаете какие-то изменения в теле макроса (в редакторе) и хотите сохранить имя макроса, в котором сделали изменения или 2.если при работе макроса с книгой он произвёл какие-то изменения в книге, то сохранить имя этого макроса



0



129 / 109 / 21

Регистрация: 08.02.2017

Сообщений: 582

01.11.2022, 07:50

12

Цитата
Сообщение от Оксана33
Посмотреть сообщение

вызывать каждый макрос по имени

Не вызвзать макрос, а макрос (каждый) должен сообщить свое имя в глобальную переменную в начале своего выполнения, а макрос события Worksheet_Change взять это имя и зафиксировать изменения.



0



531 / 164 / 27

Регистрация: 10.05.2021

Сообщений: 535

Записей в блоге: 7

01.11.2022, 09:33

13

Цитата
Сообщение от Burk
Посмотреть сообщение

наверно, это можно сделать красиво, но можно попробовать топорно:
1. Ввести паблик-переменную

ну, я бы не назвал это «топорностью» — скорее, это вынужденный костыль за неимением штатных способов опознавания текущего макроса. Обычно, для подобных целей используется метод .Parent но не тут.
Я считаю, что метод простой, надёжный и прекрасно работающий — даже захотелось ввести у себя в надстройке, чтобы понимать, на каком моменте что-то пошло не так. Спасибо!



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34709 / 19230 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

01.11.2022, 10:49

14

«Дверь и форточка»

Если что-то упорно не получается, остановитесь и подумайте: не пытаетесь ли вы влезть в форточку, когда рядом — открытая дверь.

Я не понимаю, зачем Вам имя макроса…



0



531 / 164 / 27

Регистрация: 10.05.2021

Сообщений: 535

Записей в блоге: 7

01.11.2022, 11:21

15

Catstail, позвольте, я отвечу из личного опыта…
Есть функция, IsErr(iVal, Optional MsgTrue As Boolean) которая проверяет переданное значение и, при необходимости, выводит сообщение, мол «вот тут ошибка, а её быть не должно».
Такая функция всегда вызывается из другой процедуры/функции, которая, в свою очередь, также может вызываться из другой. Так вот, при появлении такого сообщения, было бы удобно видеть, какая процедура вызвала функцию, наткнувшуюся на ошибку. А лучше всю цепочку процедур/функций. Это значительно облегчает понимание, где и что пошло не так.
Можно, конечно, вместо Optional MsgTrue As Boolean ввести Optional Where$, но, в таком случае, я могу увидеть только последнюю процедуру, вызвавшую эту функцию (потому что при вызове функции передам имя процедуры, из которой она была вызвана).
Публичная переменная позволит копить всю историю и не использовать дополнительные аргументы, а прсот обращаться к ней, когда нужно посмотреть историю.
Это удобно, но нужно не забыть об очистке)))



1



Модератор

Эксперт функциональных языков программированияЭксперт Python

34709 / 19230 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

01.11.2022, 11:24

16

Jack Famous, Я делал такой ADD-IN для полного VB6. У меня велся стек вызываемых процедур. Можно было бы (используя VBE) сделать нечто подобное для VBA.



1



531 / 164 / 27

Регистрация: 10.05.2021

Сообщений: 535

Записей в блоге: 7

01.11.2022, 11:32

17

Catstail, ну так текстовую переменную вести гораздо проще, чем стек (или я не прав? в чём выигрыш?), а, если что — сплитануть в одномерный массив



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34709 / 19230 / 4040

Регистрация: 12.02.2012

Сообщений: 32,197

Записей в блоге: 13

01.11.2022, 11:50

18

Jack Famous, пожалуй, попроще. Это не принципиально.



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

05.11.2022, 00:34

 [ТС]

19

Цитата
Сообщение от Burk
Посмотреть сообщение

1. вы делаете какие-то изменения в теле макроса (в редакторе) и хотите сохранить имя макроса, в котором сделали изменения

именно это

Добавлено через 3 минуты

Цитата
Сообщение от testuser2
Посмотреть сообщение

Не вызвзать макрос, а макрос (каждый) должен сообщить свое имя

все таки мы говорим о разный вещах, но ваш метод тоже очень пригодится, спасибо!



0



1 / 1 / 0

Регистрация: 03.12.2014

Сообщений: 329

06.11.2022, 17:50

 [ТС]

20

Цитата
Сообщение от Burk
Посмотреть сообщение

1. вы делаете какие-то изменения в теле макроса (в редакторе) и хотите сохранить имя макроса

или получить его, так это возможно?



0



 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#1

20.09.2018 11:16:29

Доброго времени суток, Планетяне!

Хочу в обработчик ошибок добавить сообщение, о том, в каком макросе она произошла. Чтобы не прописывать вручную, пытаюсь узнать, как получить это имя ссылкой/переменной. После этого можно данный обработчик просто во все макросы добавить. Теперь будет неважно, насколько длинная цепочка макросов задействована при запуске — если произойдёт ошибка, то я буду точно знать, на каком этапе. Я вижу код примерно так…

Код
Option Explicit
Sub Test()
On Error GoTo er ' в случае ошибки, идём на обработчик
' какой-то код

Exit Sub ' если ошибки нет, то завершаем
er: MsgBox "Check «" & Application.ИмяЗапущенногоМакроса & "»", vbCritical, "Add-In ERROR" ' в случае ошибки, говорим, какой макрос нужно проверить
End Sub

Как правильно должна выглядеть запись Application.ИмяЗапущенногоМакроса?

Поиск дал только инфу про

имя модуля

. И да — если просто убрать обработчики, то окно с дебагом и так подсветит строку в макросе с ошибкой. Только пользователь этого всего видеть не должен. Вместе с этим сообщением (как в коде) «для разработчика», пользователь увидит другое сообщение «для пользователя» о том, чтобы он сообщил разработчику. Я запущу макрос и сразу пойму, где искать ошибку из всей цепочки задействованных макросов.

Изменено: Jack Famous20.09.2018 11:31:41

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

Может проще стоит в каждом из макросов записывать его название в глобальную переменную перед выполнением ? И обрабатывать значение этой переменной в случае ошибки.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#3

20.09.2018 11:47:35

Цитата
VSerg: Может проще

тогда уж проще вместо

Код
er: MsgBox "Check «" & Application.ИмяЗапущенногоМакроса & "»", vbCritical, "Add-In ERROR"

писать

Код
er: MsgBox "Check «Test»", vbCritical, "Add-In ERROR"

и в каждом макросе своё имя ручками 1 раз указать.
Думаю, что мой пример использования не очень удачный, т.к. тут и руками не проблема сделать, но, уверен, есть другие задачи, где это серьёзно поможет…

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

ivanok_v2

Пользователь

Сообщений: 712
Регистрация: 19.08.2018

#4

20.09.2018 11:50:33

Код
Sub test()
 
    On Error Resume Next
2: a = 1 / 0
    MsgBox "Line " & Erl & "   """ & Err.Description & """"
End Sub

как вариант выводить номер строки

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#5

20.09.2018 11:55:04

Цитата
ivanok_v2 написал:
выводить номер строки

это если все строки в модуле пронумерованы. А по теме: нет нормальных встроенных средств для отслеживания имени макроса.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#6

20.09.2018 11:56:51

Цитата
ivanok_v2: выводить номер строки

спасибо, но это лишнее. Зная макрос с ошибкой я просто добавлю On Error GoTo 0 и сделаю прогон в штатном режиме, где мне всё подсветится (плюс Locals в помощь и вообще весь штатный функционал). После исправления эту строку удалю и обновлю надстройку. Нужно только узнать, какой макрос в цепочке сбоит, т.к. комплексные программы могут задействовать десятки «базовых» макросов из надстройки и перебирать их все, с «отключением» перехода по ошибке очень долго.

Цитата
Дмитрий(The_Prist) Щербаков: нет нормальных встроенных средств

ну, собсна, я так и думал  :sceptic: спасибо!

Изменено: Jack Famous20.09.2018 11:59:50

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

#7

20.09.2018 12:00:05

Цитата
VSerg написал:
Может проще стоит в каждом из макросов записывать его название в глобальную переменную перед выполнением ? И обрабатывать значение этой переменной в случае ошибки.

ага, при этом предыдущее значение сохранять в локальную переменную и возвращать при выходе из процедуры все обратно.

Jack Famous, В чем глубокий смысл? Сделать универсальную процедуру вывода ошибки?

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

Доброе время суток.
Алексей, вы всё же разберитесь или в конкретном макросе или в стеке вызова? Это всё же VBA — нет там таких удобных механизмов, как, например в VB.NET для такого случая. Так что всё будет только самодельное, вот что предлагает интернет

Managing a programmatically accessible stack trace

(вариант).

Изменено: Андрей VG20.09.2018 12:03:17

 

VSerg

Пользователь

Сообщений: 370
Регистрация: 01.01.1970

#10

20.09.2018 12:02:55

Jack Famous,
Я имел ввиду что-то типа:

Код
Public MacroName As String
Sub Main()
    On Error GoTo er
    Call Test1
    Call Test2
    Call Test3
er:    MsgBox "Check: " & MacroName
End Sub

Sub Test1()
    MacroName = "Test1"
End Sub

Sub Test2()
    MacroName = "Test2"
    Dim a As Integer
    a = 1 / 0
End Sub

Sub Test3()
    MacroName = "Test3"
End Sub
 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#11

20.09.2018 12:04:26

Цитата
БМВ: В чем глубокий смысл?

узнать возможность (спойлер — узнал и нельзя :( )

А для данного вопроса — да, универсальность. это сейчас у меня всё в каждом коде и можно руками, а так ведь можно макрос обработчика сделать, UDF или (не дай бог такого профессионализма) пользовательский класс. И вот тогда уже ручки не помогут и нужно будет возвращать для каждого макроса своё имя в автоматическом режиме.

Изменено: Jack Famous20.09.2018 12:04:53

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#12

20.09.2018 12:09:14

Юрий М, Андрей VG, спасибо. По первому взгляду очень похоже на вариант от VSerg.

Цитата
Андрей VG: в конкретном макросе или в стеке вызова?

пока так:

есть макрос, который в процессе работы использует много других макросов. При возникновении ошибки нужно узнать, в каком именно макросе она произошла. Как я понимаю, при таком раскладе, писать ручками в обработчик ошибок каждого «базового» макроса его имя — самая надёжная идея. С отдельным маросом для обработки ошибок будет сложнее, но примера пока нет (не нужен).

Цитата
VSerg: Я имел ввиду

а мне нравится — может сработать  :) спасибо! Только добавляется писанины, как сказал БМВ.

Изменено: Jack Famous20.09.2018 12:28:47

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

наличия любого дополнительного сервиса в эксплуатации макроса — это дополнительный геморрой в его реализации (в коде)
т.е. само собой оно не появиться
погеморроитесь с кодом — получите дополнительные возможности
когда обьемы геморра начнут превышать обьемы пользы — забросите эту идею…

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#14

20.09.2018 12:19:22

Цитата
Ігор Гончаренко: когда обьёмы геморра начнут превышать обьёмы пользы — забросите эту идею…

золотые слова  :D сколько раз так бывало…

Думаю, что пока оставлю всё как есть:

Вся модель структуры

в этом случае пользователь увидит 2 сообщения:

первое — «для разработчика» (в каком базовом макросе надстройки ошибка), второе — для него (о том, что нужно сообщить мне)

Изменено: Jack Famous20.09.2018 12:30:21

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Доброго времени суток, Планетяне!

Можеть чууууууть-чуть не по теме, но кто знает, как можно сделать так, чтобы текст автофигуры или обычной кнопки, или ActiveX-кнопки менялся в зависимости от того, какой макрос на неё сейчас назначен?  :)

Изменено: Jack Famous21.09.2018 09:56:03

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

Jack Famous, Алексей, иногда мне кажется , что добываете Вы огонь ля самокрутки, которая не поместилась на аватарку. :-)

По вопросам из тем форума, личку не читаю.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

БМВ, а я что — я ничего :D  ну правда ведь круто было бы — не надо каждый раз окно открывать, чтобы глянуть, какой макрос назначен. Удобненько, однако))

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Казанский

Пользователь

Сообщений: 8839
Регистрация: 11.01.2013

#18

21.09.2018 10:54:45

Цитата
Jack Famous написал:
чтобы текст автофигуры или обычной кнопки

в первом приближении так

Код
Sub bb()
Dim s As Shape, x
  For Each s In ActiveSheet.Shapes
    x = s.OnAction
    If Len(x) Then s.TextFrame.Characters.Text = x
  Next
End Sub
Цитата
Jack Famous написал:
или ActiveX-кнопки

У элементов ActiveX вполне определенные имена обработчиков событий.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Казанский, большое вам спасибо! Всё работает  ;)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

#20

21.09.2018 11:02:35

так пропишите в макрос при вызове Caller прописывать :-) после первого запуска будет то что хотите.

Код
ActiveSheet.DrawingObjects(Application.Caller).Characters.Text = "Macro1"

Блин, чур меня, че-то на темную сторону потянулу, и уже не первый раз на этой неделе :-(

Изменено: БМВ21.09.2018 11:05:50

По вопросам из тем форума, личку не читаю.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#21

21.09.2018 11:14:38

БМВ, спасибо))

Цитата
БМВ: на темную сторону потянуло

Прикрепленные файлы

  • 1.jpg (69.14 КБ)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

БМВ

Модератор

Сообщений: 21383
Регистрация: 28.12.2016

Excel 2013, 2016

По вопросам из тем форума, личку не читаю.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#23

21.09.2018 13:49:04

Цитата
БМВ написал:
Алексей, иногда мне кажется , что добываете Вы огонь ля самокрутки…

А мне кажется, что Джек стремится сделать УНИВЕРСАЛЬНЫЙ макрос на все случаи жизни, которые ещё даже не случились ))
Ну а с текстом на кнопках вообще беда: была вменяемая надпись, понятная пользователю — «Удалить пустые строки», а после работы макроса, который призван облегчить Джеку поиск нужной процедуры (ведь выполнить правый клик по кнопке => Назначить макрос => Правка,- это сложно), появится текст, например, «DelEmptyRows». Очень информативно :-)

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#24

21.09.2018 13:51:37

Код
MsgBox "Обратитесь к разработчику…", vbCritical, "НЕПРЕДВИДЕННАЯ ОШИБКА"

Вот это не приветствую. Не должно быть непредвиденных ошибок. И использовать часто-густо On Error… не очень хорошая привычка.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Юрий М, «»Всяк кулик своё болото хвалит»  :) . Я спрашивал исключительно для себя, потому что сейчас тестирую

стенд

, а там одна кнопка и более 10 макросов. Кнопка называется «ПУСК». После манипуляций с листом легко забываешь, какой макрос тестишь (похожи). Для этого случая решение «динамического текста» кнопки отличное.

vikttur, «Знать всё на свете нереально, Но я, мечту свою лелея, Решил проблему гениально — Везде втыкаю «GoTo Error»»  :D
И что же вы предлагаете? Предусмотреть ВООБЩЕ всё? Сомневаюсь, что это возможно, а, если и так, то затраченное время не оправдывает результата…

Изменено: Jack Famous21.09.2018 14:07:12

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#26

21.09.2018 14:03:12

Цитата
Jack Famous написал:
После манипуляций с листом легко забываешь, какой макрос тестишь (похожи)

А если при ошибке отправлять к строке Stop — не выход?

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Юрий М, а если ошибки нет и просто забыл, что за макрос?… Выходов много, как и путей решения. Мне этот нравится и удобен. А чем больше инструментов знаешь, тем шире возможности.

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#28

21.09.2018 14:08:19

Цитата
vikttur написал:
Вот это не приветствую. Не должно быть непредвиденных ошибок.

Вот тут полностью согласен. Сначала верификация данных под обработку. Если что не так, то лист лог с перечнем где, что и почему не так (можно сразу на почту начальству косяки отправлять, чтобы не было потом иных толкований источника данных :) )

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#29

21.09.2018 14:14:06

Цитата
Jack Famous написал: И что же вы предлагаете? Предусмотреть ВООБЩЕ всё?

Предлагаю использовать обработчик ошибок намного реже и только там, где необходимо. Всего, естественно, не предусмотришь, но за 6-7 лет ни разу не применял «а не пошли бы вы к разработчику?». Обычно возможные ошибки обходятся с помощью проверок. Непроверенные проявляются в первые недели-месяцы и устраняются. Потом программы долго и упорно работают.
Да и к кому обращаться, если разработчик сменил профиль работы или в космос улетел? :)

Тяжело отучаться от привычек, тем более плохих. Лучше не приучаться.

 

Jack Famous

Пользователь

Сообщений: 10852
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#30

21.09.2018 14:15:09

Господа, что-то моя тема в лютый оффтоп скатывается))
Каждый (как и всегда) в чём-то по-своему прав. Мне часто приходится переделывать решения под новые нужды и тратить много времени (а обработка ошибок занимает бОльшую его часть) я не могу. ТЗ у меня нет, как и понимания, какие точно данные будут и где/как/что пользователь решит нажать. Каждый адаптируется под условия работы, а послать всех нахрен и сказать «без ТЗ ничего делать не буду» — такой себе выход. Я люблю свою работу  :)

Цитата
vikttur: Непроверенные проявляются в первые недели-месяцы и устраняются. Потом программы долго и упорно работают.

полностью согласен, но в том-то и дело, что до полноценных тестов не доходит — сразу на что-то другое переключают. И вообще вы вот предполагаете, а ведь совсем не знаете специфику моей работы. Спросили бы что-ли, если уж на то пошло, а то получается, вы говорите о том, что «мясо долго можно хранить только в морозилке», а я вам про то, что «у меня даже холодильник барахлит и морозилка у начальства только в планах»  :D

Цитата
vikttur: Тяжело отучаться от привычек, тем более плохих. Лучше не приучаться.

а кто судей судить-то будет?))

Кто хочет обсудить, создавайте тему в курилке, пожалуйста  ;)

Изменено: Jack Famous21.09.2018 14:23:27

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

Хитрости »

1 Май 2011              465162 просмотров


Что такое макрос и где его искать?

Скачать файл, используемый в видеоуроке:

  Tips_Macro_Basic_Video.xls (63,5 KiB, 4 006 скачиваний)


Наверное, многие слышали это слово «макрос«, но не все имеют точное представление что это, если заглянули на эту страничку.

Макрос

— это макрокоманда(так звучит в правильном переводе с англ.языка), содержащая последовательность действий, записанных пользователем. Запись производится с помощью встроенного в пакет Microsoft Office языка программирования — Visual Basic for Application(VBA).

Зачем же нужны макросы? А нужны они для того, чтобы избавить Вас от рутинного выполнения одних и тех же действий. Например, Вам каждый день приходиться удалять из ежедневных отчетов по несколько столбцов и добавлять новые строки для шапки и т.п. Скучно и утомительно. Вы просто можете записать один раз все эти действия макрорекордером, а в дальнейшем только вызывать записанный макрос и он все сделает за Вас. Что немаловажно, для использования макрорекордера и записи макроса не надо обладать никакими навыками программирования.
В этой статье:

  • Подготовка к записи макроса
  • Запись макроса
  • Параметры записи макроса
  • Воспроизведение макроса
  • В каких файлах можно хранить макросы?
ПОДГОТОВКА К ЗАПИСИ МАКРОСА

Прежде чем начать работать с макросами необходимо разрешить их выполнение, т.к. по умолчанию они отключены. Для этого необходимо сделать следующее:

  • Excel 2003:
    Сервис-Безопасность-Уровень макросов «Низкий»
  • Excel 2007:
    Кнопка ОфисПараметры Excel (Excel Options)Центр управления безопасностью (Trust Centr)Параметры центра управления безопасностью (Trust Centr Settings)Параметры макросов (Macro Settings)Разрешить все макросы (Enable All Macros)
  • Excel 2010:
    Файл (File)Параметры (Options)Центр управления безопасностью (Trust Centr)Параметры центра управления безопасностью (Trust Centr Settings)Параметры макросов (Macro Settings)Разрешить все макросы (Enable All Macros)
  • После изменения параметров безопасности макросов необходимо перезапустить приложение Excel: закрыть его полностью и открыть заново. Только после этого изменения вступят в силу.

Прежде чем начать записывать макрос необходимо помнить следующее:

  • Макрорекордер записывает АБСОЛЮТНО ВСЕ ваши действия – ошибки, прокручивание экрана, переключение между листами, выделение ячеек и т.д. Поэтому перед записью своих действий необходимо сначала тщательно продумать все свои действия, чтобы в дальнейшем записать только то, что действительно необходимо записать и в дальнейшем воспроизвести. Это сократит как сам код, так и время его выполнения
  • Макрорекордер записывает действия выполненные только в пределах Microsoft Excel. Если вы переключитесь в другое приложение – действия в этой программе записаны не будут. Если закроете Excel – запись прекратится
  • Макрорекордер может записать только те действия, которые можно проделать вручную(те, которые доступны для выполнения из меню и с панелей)
  • Если во время кода вы совершили ошибочное действие и нажали кнопку отмены(Ctrl+Z) – отмененное действие не будет записано в макрос, как будто вы его просто не делали
ЗАПИСЬ МАКРОСА

Для пользователей Excel 2003 запись макроса возможна через меню:
СервисМакрос Начать Запись
Начать запись

Для пользователей Excel 2007-2010 и старше:

ПАРАМЕТРЫ ЗАПИСИ МАКРОСА

Перед записью можно задать имя записываемому макросу и назначить сочетание клавиш, при нажатии которых этот макрос будет запускаться. После нажатия кнопки для начала записи макроса появится окно:
Диспетчер записи макроса

Имя макроса

– не должно содержать пробелов, запятых, двоеточий и т.п. Допустимы символы кириллицы, латиницы, цифры и нижнее подчеркивание (я рекомендую давать макросам имена, содержащие только буквы латиницы). Имя макроса всегда должно начинаться с буквы и не должно совпадать со встроенным именем Excel или именем другого объекта в книге (например, не должно носить имя Workbook, Cells или ЭтаКнига). Лучше давать макросу сразу понятное имя, отражающее примерную суть того, что он делает.

Сочетание клавиш

– можно назначить вызов макроса сочетанием клавиш. Доступно назначение любой цифры или буквы в сочетании с Ctrl.

Сохранить в

– выбираете место хранения записываемого макроса. Доступны варианты:

  • Эта книга (This Workbook) – макрос будет записан в той же книге, из которой была запущена запись. Записанный макрос будет доступен из приложения только если книга открыта
  • Новая книга (New Workbook) – будет создана новая книга, в которой записан макроса. Записанный макрос будет доступен из приложения только если книга открыта
  • Личная книга макросов (Personal Macro Workbook) – самый интересный вариант. Если его выбрать, то макрос будет сохранен в отдельной книге PERSONAL.XLS (для Excel 2007 и выше — PERSONAL.XLSB). Макросы, записанные в эту книгу доступны из всех открытых книг Excel и эта книга подключается автоматически при запуске самого Excel. Т.е. однажды записав где-то макрос в эту книгу – он теперь будет доступен из любой книги независимо от того, открыта ли книга, из которой был записан макрос или нет. Изначально эта книга отсутствует и создается в момент первого обращения к ней (т.е. как только вы первый раз выбрали Сохранить в личную книгу макросов)
ВОСПРОИЗВЕДЕНИЕ МАКРОСА

После записи макроса запустить его можно разными способами:

  1. ПРИ ПОМОЩИ СОЧЕТАНИЯ КЛАВИШ: Alt+F8
    Этот способ универсальный и его можно использовать из любой версии Excel. Достаточно нажать сочетание клавиш Alt+F8 и выбрать нужный макрос из списка:
    Вызов макроса
  2. ВЫЗОВ ИЗ МЕНЮ:
    Excel 2007-2010 и старше: вкладка Разработчик (Developer)Макросы (Macros)
    Excel 2003: СервисМакросМакросы
  3. НАЖАТИЕМ СОБСТВЕННОЙ КНОПКИ НА ЛИСТЕ:
    Можно разместить на листе собственную кнопку, по нажатии которой будет запускаться записанный макрос. Подробно этот процесс я описал в статье: Как создать кнопку для вызова макроса на листе
  4. ПРИ ПОМОЩИ НАЗНАЧЕННЫХ МАКРОСУ ГОРЯЧИХ КЛАВИШ:
    Если вы перед записью назначили макросу сочетание клавиш, то вы также можете вызвать этот макрос и нажатием данного сочетания. Горячие клавиши макросу можно назначить и после записи: Alt+F8→ Выделяем нужный макрос→ Параметры (Options).
  5. ПРИ НАСТУПЛЕНИИ ОПРЕДЕЛЕННОГО СОБЫТИЯ В ЛИСТЕ ИЛИ КНИГЕ:

    Прежде чем пробовать использовать этот метод рекомендуется изучить статью Что такое модуль? Какие бывают модули?Для этого сначала необходимо вставить код макроса в тело событийной процедуры (подробнее про событийные процедуры). Например, если выбрать процедуру листа Change, то в лист автоматически будет вставлена пустая процедура:

    Private Sub Worksheet_Change(ByVal Target As Range)
     
    End Sub

    Если ранее вами был записан код выделения и удаления двух столбцов – Макрос1:

    Sub Макрос1()
    '
    ' Макрос1 Макрос
    ' макрос удаляет столбцы C и D из активного листа
    '
    ' Сочетание клавиш: Ctrl+Shift+Q
    '
        Columns("C:D").Select
        Selection.Delete Shift:=xlToLeft
    End Sub

    То для выполнения это кода при наступлении события изменения на листе можно вставить вызов этого макроса:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Call Макрос1
    End Sub

    или вставить сам код (без Sub и End Sub) внутрь процедуры Worksheet_Change:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Columns("C:D").Select
        Selection.Delete Shift:=xlToLeft
    End Sub
В каких файлах можно хранить макросы?

Как ни странно, но начиная с версии 2007 Excel не все файлы могут хранить макросы. Это значит, что если макрос был записан в файле и потом файл был сохранен в формате, который хранение макросов не поддерживает — макросы пропадут. Как правило Excel в таком случае выдаст предупреждение о том, что проект VBA в файле этого формата не может быть сохранен и будет удален, если нажать Да:
Сохранение без макросов
Чтобы сохранить файл с поддержкой макросов необходимо будет нажать Нет и из списка форматов выбрать тот, который поддерживает хранение макросов.
Ниже приведены форматы файлов, применяемые в Excel с описанием того, можно ли в них хранить макросы(VBA коды):

  • *.xls – формат книги Excel 97–2003 (поддержка VBA, макросов)
  • *.xla – надстройка Excel 97–2003 (поддержка VBA, макросов)
  • *.xlsx – формат книги Excel 2007 по умолчанию без поддержки макросов
  • *.xlsm – книга Excel 2007 с поддержкой макросов
  • *.xlsb – двоичный формат для больших объемов данных (с поддержкой VBA, макросов)
  • *.xltx – шаблон книги Excel 2007 без поддержки макросов
  • *.xltm – шаблон книги Excel 2007 с поддержкой макросов
  • *.xlam – надстройка Excel 2007

Для смены формата файла его необходимо сохранить в другом формате:

  • Excel 2007: Кнопка ОфисСохранить как(SaveAs) -Выбрать необходимый формат файла
  • Excel 2010: Файл(File)Сохранить как(SaveAs) -Выбрать необходимый формат файла

Теперь несложно понять, что хранить макросы в версиях Excel 2007 и выше можно в форматах: xls, xla, xlsm, xlsb, xltm, xlsm.

Также см.:
Почему не работает макрос?
Как создать кнопку для вызова макроса на листе?
Select и Activate — зачем нужны и нужны ли?
Как ускорить и оптимизировать код VBA


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Как посмотреть какой макрос назначен кнопке

Вы можете использовать кнопку управления формы или кнопку (ActiveX) для запуска макроса, который выполняет действие, когда пользователь щелкает его. Обе эти кнопки также называются push-кнопками, которые можно настроить для автоматизации печати, фильтрации данных или вычисления чисел. Как правило, кнопки управления формы и ActiveX похожи по внешнему виду и функции. Однако между ними есть несколько отличий, которые объясняются в следующих разделах.

Кнопка (управление формы)

В разделах ниже вы узнаете, как добавить макрос на кнопку в Excel для Windows или Mac.

Примечание: ActiveX не поддерживаются на компьютере Mac.

Макрос и средства VBA находятся на вкладке Разработчик, которая по умолчанию скрыта.

Прежде всего нужно включить его. Дополнительные сведения см. в статье Показ вкладки «Разработчик».

Вкладка "Разработчик" на ленте

Добавление кнопки (управление формы)

На вкладке Разработчик в группе Элементы управления нажмите кнопку Вставить, а затем в группе Элементы управления формы нажмитекнопку .

Щелкните на листе место, где должен быть расположен левый верхний угол кнопки. Появится всплывающее окно Назначение макроса.

Назначьте кнопке макрос и нажмите кнопку ОК.

Чтобы задать свойства кнопки, щелкните ее правой кнопкой мыши и выберите форматирование.

Добавление кнопки (ActiveX управления)

На вкладке Разработчик в группе Элементы управления нажмите кнопку Вставить, а затем вгруппе Элементы управления ActiveX нажмите кнопку .

Щелкните на том месте, где должен отображаться левый верхний угол кнопки.

В группе Элементы управления нажмите кнопку Код представления. При этом Visual Basic редактора. Убедитесь, что в списке справа выбрано нажатие кнопки. При нажатии кнопки CommandButton1_Click процедуры (см. рисунок ниже) запускаются эти два макроса: SelectC15 и HelloMessage.

Подпрограмма в редакторе Visual Basic

В подпроцеду для кнопки сделайте следующее:

Введите имя существующего макроса в книге. Макрос можно найти, щелкнув Макрос в группе Код. С помощью кнопки можно запускать несколько макроса, вводя их имена в отдельных строках подпроцесса.

При необходимости добавьте собственный код VBA.

Закроем Visual Basic редактора и нажмите кнопку Режим конструктора режим конструктора, чтобы отключить режим конструктора.

Чтобы запустить код VBA, который теперь является частью кнопки, нажмите кнопку ActiveX, которую вы только что создали.

Чтобы изменить элемент ActiveX, убедитесь, что выбран режим конструктора. На вкладке Разработчик в группе Элементы управления нажмите кнопку Режим конструктора.

Чтобы задать свойства кнопки, на вкладке Разработчик в группе Элементы управления нажмите кнопку Свойства . Можно также щелкнуть правой кнопкой мыши кнопку и щелкнуть свойства .

Примечание: Перед тем как нажать кнопку Свойства, выделите объект, свойства которого требуется просмотреть или изменить.

Появится поле Свойства. Для получения дополнительных сведений о каждом свойстве выберите свойство и нажмите клавишу F1, чтобы отобразить соответствующий раздел справка по Visual Basic. Можно также ввести имя свойства в поле Поиск справки Visual Basic. В следующей таблице 2010 2010 2016 2016 2016 2016 201

Описание параметра

Необходимое свойство

Загружает ли его при открытом книге. (Игнорируется для ActiveX элементов управления.)

Может ли он получать фокус и отвечать на события, созданные пользователем.

Можно ли изменять элемент управления

Имя элемента управления

Способ привязки элемента управления к расположенным под ним ячейкам (не закреплен, можно перемещать, но нельзя изменять размер, можно перемещать и изменять размер)

Можно ли выводить элемент управления на печать

Является ли элемент управления видимым или скрытым

Атрибуты шрифта (полужирный, курсив, размер, зачеркивание, подчеркивание и насыщенность)

Bold, Italic, Size, StrikeThrough, Underline, Weight (форма)

Поясняющий текст элемента управления, определяющий или описывающий его

Будет ли содержимое элемента управления переноситься по словам в конце строки

Размер и положение

Будет ли размер элемента управления изменяться автоматически для отображения всего содержимого

Высота или ширина в пунктах

Height, Width (форма)

Расстояние от элемента управления до левого или верхнего края листа

Форматирование

Стиль фона (прозрачный или непрозрачный)

Цвет переднего плана

Наличие тени элемента управления

Изображение

Точечный рисунок, отображаемый в элементе управления

Положение рисунка относительно его заголовка (слева, сверху, справа и так далее)

Клавиатура и мышь

Сочетание клавиш для элемента управления

Настраиваемый значок мыши

Тип указателя, отображаемого при наведите указатель мыши на определенный объект (стандартный, стрелка, I-указатель и так далее).

Будет ли фокус при щелчке.

Макрос и средства VBA находятся на вкладке «Разработчик», которая по умолчанию скрыта, поэтому сначала нужно включить ее.

Перейдите в Excel > параметры. > ленты & панель инструментов.

В категории Настроить ленту в списке Основные вкладки установите флажок Разработчик, а затем нажмите кнопку Сохранить.

Чтобы добавить его на ленту, выберите его рядом с "Разработчиком"

Добавление кнопки (управление формы)

На вкладке Разработчик нажмите кнопку .

Щелкните на листе место, где должен быть расположен левый верхний угол кнопки. Появится всплывающее окно Назначение макроса.

Примечание: Если кнопка уже вставлена, щелкните ее правой кнопкой мыши и выберите назначить макрос.

Назначьте кнопке макрос и нажмите кнопку ОК.

Чтобы задать свойства кнопки, щелкните ее правой кнопкой мыши и выберите форматирование.

Добавление кнопки (Visual Basic управления)

На вкладке Разработчик нажмите кнопку .

Щелкните место на том месте, где должен отображаться левый верхний угол кнопки.

Примечание: Если кнопка уже вставлена, щелкните ее правой кнопкой мыши и выберите назначить макрос.

В диалоговом окне Назначение макроса выберите Новый, который откроет редактор Visual Basic(VBE)в области со следующим кодом:

В подпроцеду для кнопки между строками Sub и End Sub сделайте следующее:

Введите имя существующего макроса в книге. Вы можете запускать несколько макроса с помощью кнопки, введя их имена в отдельных строках внутри под процедуры.

Добавьте собственный код VBA.

Нажмите кнопку Режим режим конструктора, чтобы режим конструктора отключен, а затем закроем Visual Basic редактора.

Чтобы изменить кнопку, щелкните ее правой кнопкой мыши ивыберите Visual Basic .

Чтобы задать свойства кнопки, щелкните ее правой кнопкой мыши и выберите форматирование.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

Как узнать, какой макрос привязан к кнопке на вкладке приложения?

Уважаемые коллеги!
На вкладке Главная в пользовательской группе Новая группа имеется несколько пользовательских кнопок.
Как узнать, какие макросы привязаны к этим кнопкам?

2 Ответ от Alex_Gur 02.09.2015 09:44:10

  • Alex_Gur
  • Модератор
  • Неактивен
  • Откуда: Москва
  • Зарегистрирован: 28.07.2011
  • Сообщений: 2,758
  • Поблагодарили: 492
Re: Как узнать, какой макрос привязан к кнопке на вкладке приложения?

Уважаемые коллеги!
Ответ на свой вопрос нашел сам:
Открываем вкладку Настройка ленты в Параметрах Word.
В правой части вкладки открываем пользовательскую группу, где находятся пользовательские кнопки и подводим курсор мыши к строке нужной кнопки (но не нажимаем на кнопку мыши).
Через небольшое время на экран выводится подсказка, в конце которой указан искомый макрос (см. рисунок в приложении).

Кнопка и макрос_а.JPG 109.02 Кб, файл не был скачан.

You don’t have the permssions to download the attachments of this post.

Сообщений [ 2 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

Как узнать, какой макрос привязан к кнопке на вкладке приложения?

Если вы по роду своей деятельности работаете с документами, то вам очень часто приходится иметь дело с редактором текстов Microsoft Word. На портале о Microsoft Office Word вы узнаете про: как не ставить номер страниц в ворде 2007. Познакомиться с тонкостями работы в этой программе вы можете на форуме сайта Ворд Эксперт.

Здесь участники делятся друг с другом своими вариантами настроек и принципов форматирования и редактирования текстов. На портале о Microsoft Office Word вы узнаете про: рамки на тектсовом документе по гост. На форуме много внимания уделено написанию макросов, созданию шаблонов и другим способам автоматизировать работу Ворда. На портале о Microsoft Office Word вы узнаете про: заменить одно слово другим vba. Также можно найти информацию по различию в настройках версий программы.

В специальных подразделах возможно оставить заявки или позаимствовать готовые решения. Наш сайт о Microsoft Office Word даст ответ про: как переустановить основной шрифт.

Как записать макрос в Excel? Пошаговая инструкция.

Макрос — это код, написанный на встроенном в Excel языке VBA (Visual Basic for Application). Макросы могут создаваться как вручную, так и записываться автоматически с помощью так называемого макрорекодера.

Макрорекодер — это инструмент в Excel, который пошагово записывает все что вы выполняете в Excel и преобразует это в код на языке VBA. Макрорекодер создает очень подробный код (как мы увидим позже), который вы сможете при необходимости отредактировать в дальнейшем.

Записанный макрос можно будет запускать неограниченное количество раз и Excel повторит все записанные шаги. Это означает, что даже если вы ничего не знаете о VBA, вы можете автоматизировать некоторые задачи, просто записав свои шаги и затем повторно использовать их позже.

Теперь давайте погрузимся и посмотрим, как записать макрос в Excel.

Отображение вкладки «Разработчик» в ленте меню

Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку «Разработчик». Для этого выполните следующие шаги:

  1. Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».Настроить ленту в Excel
  2. В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».Записать макрос в Excel - Включить вкладку «Разработчик»
  3. Нажмите «ОК».

В результате на ленте меню появится вкладка «Разработчик»

Вкладка разработчика в ленте

Запись макроса в Excel

Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например «Excel».

Вот шаги для записи такого макроса:

  1. Перейдите на вкладку «Разработчик».
  2. В группе «Код» нажмите кнопку «Запись макроса». Откроется одноименное диалоговое окно.
    Кнопка «Запись макроса» на вкладке разработчика в ленте
  3. В диалоговом окне «Запись макроса» введите имя для своего макроса, например «ВводТекста». Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов — например, «Ввод_текста».
    Имя макроса в диалоговом окне
  4. Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
    Запись макроса в Excel - назначение ярлыка в диалоговом окне
  5. В поле «Сохранить в» убедитесь, что выбрана опция «Эта книга». Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
    Записать макрос в Excel - сохранить макрос в этой книге
  6. Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
  7. Нажмите «ОК». Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку «Остановить запись» на вкладке «Разработчик», которая указывает, что выполняется запить макроса.
  8. Выберите ячейку A2.
  9. Введите текст «Excel» (или вы можете использовать свое имя).
  10. Нажмите клавишу Enter. Вы попадете на ячейку A3.
  11. Нажмите кнопку «Остановить запись» на вкладке «Разработчик».
    Записать макрос в Excel - Остановить запись

Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.

Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:

  1. Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
  2. Выберите любую ячейку — кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
  3. Перейдите на вкладку «Разработчик».
  4. В группе «Код» нажмите кнопку «Макросы».
  5. В диалоговом окне «Макрос» щелкните макрос «ВводТекста».
  6. Нажмите кнопку «Выполнить».
    Записать макрос в Excel

Вы увидите, что как только вы нажмете кнопку «Выполнить», текст «Excel» будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.

Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.

Что записывает макрос?

Теперь перейдем к редактору кода и посмотрим что у нас получилось.

Вот шаги по открытию редактора VB в Excel:

  1. Перейдите на вкладку «Разработчик».
  2. В группе «Код» нажмите кнопку «Visual Basic».

Вы также можете использовать комбинацию клавиш Alt + F11 и перейти в редактор кода VBA.

Рассмотрим сам редактор кода. Далее коротко опишем интерфейс редактора.

Окно редактора кода

  • Панель меню: содержит команды, которые можно использовать во время работы с редактором VB.
  • Панель инструментов — похожа на панель быстрого доступа в Excel. Вы можете добавить к ней дополнительные инструменты, которыми часто пользуетесь.
  • Окно проектов (Project Explorer) — здесь Excel перечисляет все книги и все объекты в каждой книге. Например, если у нас есть книга с 3 рабочими листами, она появится в Project Explorer. Здесь есть несколько дополнительных объектов, таких как модули, пользовательские формы и модули классов.
  • Окно кода — собственно сам код VBA размещается в этом окне. Для каждого объекта, указанного в проводнике проекта, есть окно кода, например, рабочие листы, книги, модули и т. д. В этом уроке мы увидим, что записанный макрос находится в окне кода модуля.
  • Окно свойств — вы можете увидеть свойства каждого объекта в этом окне. Я часто использую это окно для обозначения объектов или изменения их свойств.
  • Immediate Window (окно предпросмотра) — На начальном этапе оно вам не пригодится. Оно полезно, когда вы хотите протестировать шаги или во время отладки. Он по умолчанию не отображается, и вы можете его отобразить, щелкнув вкладку «View» и выбрав опцию «Immediate Window».

Когда мы записали макрос «ВводТекста», в редакторе VB произошли следующие вещи:

  • Был добавлен новый модуль.
  • Макрос был записан с именем, которое мы указали — «ВводТекста»
  • В окне кода добавлена новая процедура.

Поэтому, если вы дважды щелкните по модулю (в нашем случае модуль 1), появится окно кода, как показано ниже.

Код макроса в модуле

Вот код, который записан макрорекодером:

В VBA, любая строка , которая следует за ‘ (знак апострофа) не выполняется. Это комментарий, который предназначен только для информационных целей. Если вы удалите первые пять строк этого кода, макрос по-прежнему будет работать.

Теперь давайте пробежим по каждой строке кода и опишем что и зачем.

Код начинается с Sub, за которым следует имя макроса и пустые круглые скобки. Sub — сокращение для подпрограммы. Каждая подпрограмма (также называемая процедурой) в VBA начинается с Sub и заканчивается End Sub.

  • Range(«A2»).Select — эта строка выбирает ячейку A2.
  • ActiveCell.FormulaR1C1 = «Excel» — эта строка вводит текст «Excel» в активной ячейке. Поскольку мы выбрали ячейку A2 в качестве первого шага, она становится нашей активной ячейкой.
  • Range(«A3»).Select — выбор ячейки A3. Это происходит, когда мы нажимаем клавишу Enter после ввода текста, результатом которого является выбор ячейки A3.

Надеюсь, что у вас есть некоторое базовое понимание того, как записывать макрос в Excel.

Обращаем внимание, что код, записанный через макрорекордер, как правило, не является эффективным и оптимизированным кодом. Макрорекордер часто добавляет дополнительные ненужные действия. Но это не значит, что не нужно пользоваться макрорекодером. Для тех, кто только изучает VBA , макрорекордер может быть отличным способом проанализировать и понять как все работает в VBA.

Абсолютная и относительная запись макроса

Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали. Например, если вы выберете ячейку A2 и введете текст «Excel», то каждый раз — независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст «Excel» в ячейку A2.

Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет «двигаться» относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки. Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст «Excel» и затем перейдет к ячейке K5.

Теперь давайте запишем макрос в режиме относительных ссылок:

  1. Выберите ячейку A1.
  2. Перейдите на вкладку «Разработчик».
  3. В группе «Код» нажмите кнопку «Относительные ссылки». Он будет подсвечиваться, указывая, что он включен.
    Запишите макрос в Excel - используя «Относительные ссылки»
  4. Нажмите кнопку «Запись макроса».
    Нажмите кнопку «Запись макроса» на вкладке «Разработчик».
  5. В диалоговом окне «Запись макроса» введите имя для своего макроса. Например, имя «ОтносительныеСсылки».
    Записать макрос в Excel - имя макроса
  6. В опции «Сохранить в» выберите «Эта книга».
  7. Нажмите «ОК».
  8. Выберите ячейку A2.
  9. Введите текст «Excel» (или другой как вам нравится).
  10. Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
  11. Нажмите кнопку «Остановить запись» на вкладке «Разработчик».

Макрос в режиме относительных ссылок будет сохранен.

Теперь сделайте следующее.

  1. Выберите любую ячейку (кроме A1).
  2. Перейдите на вкладку «Разработчик».
  3. В группе «Код» нажмите кнопку «Макросы».
  4. В диалоговом окне «Макрос» кликните на сохраненный макрос «ОтносительныеСсылки».
  5. Нажмите кнопку «Выполнить».

Как вы заметите, макрос записал текст «Excel» не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel — ячейка B4 и в конечном итоге выберет ячейку B5.

Вот код, который записал макрорекодер:

Код макроса VBA для относительной ссылки

Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.

Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.

Что нельзя сделать с помощью макрорекодера?

Макро-рекордер отлично подходит для вас в Excel и записывает ваши точные шаги, но может вам не подойти, когда вам нужно сделать что-то большее.

  • Вы не можете выполнить код без выбора объекта. Например, если вы хотите, чтобы макрос перешел на следующий рабочий лист и выделил все заполненные ячейки в столбце A, не выходя из текущей рабочей таблицы, макрорекодер не сможет этого сделать. В таких случаях вам нужно вручную редактировать код.
  • Вы не можете создать пользовательскую функцию с помощью макрорекордера. С помощью VBA вы можете создавать пользовательские функции, которые можно использовать на рабочем листе в качестве обычных функций.
  • Вы не можете создавать циклы с помощью макрорекордера. Но можете записать одно действие, а цикл добавить вручную в редакторе кода.
  • Вы не можете анализировать условия: вы можете проверить условия в коде с помощью макрорекордера. Если вы пишете код VBA вручную, вы можете использовать операторы IF Then Else для анализа условия и запуска кода, если true (или другой код, если false).

Расширение файлов Excel, которые содержат макросы

Когда вы записываете макрос или вручную записываете код VBA в Excel, вам необходимо сохранить файл с расширением файла с поддержкой макросов (.xlsm).

До Excel 2007 был достаточен один формат файла — .xls. Но с 2007 года .xlsx был представлен как стандартное расширение файла. Файлы, сохраненные как .xlsx, не могут содержать в себе макрос. Поэтому, если у вас есть файл с расширением .xlsx, и вы записываете / записываете макрос и сохраняете его, он будет предупреждать вас о сохранении его в формате с поддержкой макросов и покажет вам следующее диалоговое окно:

Сохранение файла с поддержкой макросов

Если вы выберете «Нет», Excel сохранить файл в формате с поддержкой макросов. Но если вы нажмете «Да», Excel автоматически удалит весь код из вашей книги и сохранит файл как книгу в формате .xlsx. Поэтому, если в вашей книге есть макрос, вам нужно сохранить его в формате .xlsm, чтобы сохранить этот макрос.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как узнать имя книги excel
  • Как узнать имена в excel
  • Как узнать значения линии тренда в excel
  • Как узнать значение ячейки excel vba
  • Как узнать значение на графике excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии