Excel vba копирование макроса

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Еще…Меньше

Если книга содержит макрос Visual Basic для приложений(VBA),который вы хотите использовать в другом месте, вы можете скопировать модуль, содержащий этот макрос, в другую открытую книгу с помощью редактора Visual Basic(VBE).

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

  • Чтобы Windows, перейдите в меню Параметры > >Настроить ленту.

  • Для Macперейдите на Excel > параметры… >ленты & панели инструментов.

  • Затем в разделе Настройка ленты в разделе Основные вкладкиубедитесь в том, что в разделе Разработчик.

Общие сведения о макросах и VBA

Если вы не знакомы с макросами и VBA в целом, вам могут пригодиться следующие сведения:

  • Макрос — это действие или набор действий, которые можно использовать для автоматизации задач.

  • Макрос можно записать с помощью команды Запись макроса на вкладке Разработчик.

  • Макрос записуется на языке программирования VBA.

  • Вы можете проверить и изменить макрос в редакторе Visual Basic, которое открывается Excel. Вот пример окна VBE для Windows:

    Модуль, содержащий два макроса, которые хранятся в Модуле1 в Книге1

Макрос с именами MakeCellGreen и SetRowHeight находится в модуле Module1,который хранится в книге Book1.

Копирование модуля из одной книги в другую

  1. Откройте книгу, содержаную макрос, который вы хотите скопировать, и книгу, в которую вы хотите его скопировать.

  2. На вкладке Разработчик щелкните Visual Basic, чтобы открыть редактор Visual Basic редактора.

  3. В редакторе Visual Basic меню Вид выберите Project проводник Изображение кнопкиили нажмите CTRL+R .

  4. В области Project проводника перетащите модуль, содержащий макрос, который нужно скопировать в 9-ю книгу. В этом случае мы копируете Module1 из Book2.xlsm в Book1.xlsm.
     

    Окно проекта VBA

  1. Модуль1, скопирован из Book2.xlsm

  2. Копия модуля1, скопированная в Book1.xlsm

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

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

Нужна дополнительная помощь?

Иногда возникает необходимость перенести макрос из одной книги Excel в другую. Для тех, кто слабо ориентируется в макросах предназначена эта пошаговая инструкция.

  1. Откройте в Excel файл, содержащий макрос, который надо перенести в другую книгу

  2. Перейдите в редактор Visual Basic for Applications (VBA) через комбинацию клавиш Alt+F11

  3. Слева в окне Project-VBAProject последовательно найдите ваш файл, далее раздел Modules, далее тот модуль, содержимое которого вы собираетесь переносить.

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

  5. Для каждого модуля, предназначенного к переносу, нажимайте на нём правую кнопку мыши (ПКМ) и выбирайте Export File…

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

  7. Проделайте это со всеми нужными вам модулями.

  8. Откройте целевой файл Excel, который должен иметь тип Книга Excel с поддержкой макросов (*.xlsm) или Двоичная книга Excel (*.xlsb). Если тип файла у вас не такой (обычно это Книга Excel (*.xlsx)), то пересохраните файл, через Сохранить как и укажите нужный нам тип.

  9. Точно также найдите этот файл в проектах редактора VBA (смотри выше)

  10. Нажмите на любом листе файла ПКМ и выберите пункт меню Import File…

  11. Выберите ранее сохраненный файл и нажмите Открыть

  12. Модуль будет проимпортирован в вашу книгу

  13. Повторите это для всех модулей

  14. Закройте VBA редактор

  15. Закройте файлы Excel с сохранением результатов

Копирование макроса

light26

Дата: Среда, 31.08.2011, 11:57 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Всем доброго времени суток.
Уважаемые мастера, подскажите как копировать тело макроса из одного файла в другой. Ведь, если я правильно понимаю, при написании макроса его код сохраняется вместе с таблицей Excel в файле, назовем его Х1.xls. То есть где бы я впоследствии этот файл не открыл, макрос будет выполняться. в то же время, если я открою в Excele файл, скажем Х2.xls и захочу выполнить макрос записанный в Х1.xls, то у меня ничего не получится.
Разберем на примере
Вот ссылка к макросу выпадающего календаря (в «Готовых решениях»)
Календарь
Как мне заставить этот макрос работать в другом файле(см. вложение)
Я пытался найти ответ на страницах интернета, но безуспешно (((

К сообщению приложен файл:

5417587.xls
(42.0 Kb)


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 12:07

 

Ответить

Саня

Дата: Среда, 31.08.2011, 12:22 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

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

 

Ответить

light26

Дата: Среда, 31.08.2011, 12:30 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Вот как раз первый вариант у меня не получается (не знаю че делаю не так), а второй вариант не пробовал. это как?


Я не волшебник. Я только учусь

 

Ответить

RAN

Дата: Среда, 31.08.2011, 12:52 |
Сообщение № 4

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Открываешь свой файл и файл с календарем.
Заходишь в редактор VBA.
Открываешь Wiev — Project Explorer (если закрыт)
Открываешь Forms
Хватаешь мышом DateForm и тащишь в норку (свой файл).
Аналогично с модулями и модулями класса.

ВСЕ! Календарь в твоем файле!

А для запуска календаря в модуле Лист1 прописан код
Private Sub Worksheet_SelectionChange
Но этот код вызывает календарь только в столвце F
Процедуру вызова необходимо изменить в соответствии с желаниями.

Поищи на планете «всплывающий календарь, открытый код» или «почему к всех работает, а у Мули нет»
Там куча различных процедур запуска календаря


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANСреда, 31.08.2011, 12:56

 

Ответить

light26

Дата: Среда, 31.08.2011, 12:56 |
Сообщение № 5

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

RAN,

Quote (RAN)

Открываешь Forms
Хватаешь мышом DateForm и тащишь в норку (свой файл).
Аналогично с модулями и модулями класса.

я пробовал. Он не по русски матом начинает ругаться (((


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 12:56

 

Ответить

RAN

Дата: Среда, 31.08.2011, 13:06 |
Сообщение № 6

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Сказочник!

К сообщению приложен файл:

light26.rar
(37.8 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

Саня

Дата: Среда, 31.08.2011, 13:15 |
Сообщение № 7

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

Quote (light26)

а второй вариант не пробовал. это как?

1)

Code

        ‘ — переброс модуля  
         Dim Filename As String
         Filename = ThisWorkbook.Path & «tempMod.bas»

         WbFrom.VBProject.VBComponents(«имя_модуля»).Export Filename

         WbTo.VBProject.VBComponents.Import Filename
         Kill Filename

2)

Code

Public Const z As String = vbNewLine
         ‘ — в модуль «ЭтаКнига» ———————————————-
         s = «»
         s = s & «Option Explicit» & z & z

         s = s & «Private Sub Workbook_Open()» & z & z

         s = s & »    If Environ(«»UserName»») = «»login»» Then» & z
         s = s & »        Cells(1, » & n & «).EntireColumn.Hidden = False» & z
         s = s & »    End If» & z
         s = s & «End Sub»

         Set vbComp = wb.VBProject.VBComponents(«ЭтаКнига»)

         With vbComp.CodeModule
             .InsertLines .CountOfLines + 1, s
         End With

         Set vbComp = Nothing

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:18 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013


Да нет, правда! Сейчас у меня тоже получилось. а раньше такой мат трехэтажный стоял… )))
Но все-равно. я скопировал вроде все модули, а листа с Private Sub Worksheet_SelectionChange не нашел. в оригинальном файле он был, а тут нету (
не знаю где че не так делаю. буду разбираться. спасибо


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 13:19

 

Ответить

RAN

Дата: Среда, 31.08.2011, 13:24 |
Сообщение № 9

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Quote (light26)

а листа Private Sub Worksheet_SelectionChange не нашел. в оригинальном файле он был, а тут нету

Я же говорю — сказочник!
В оригинале такого листа тоже не было!
А в твоем файле вот он, туточки! tongue

К сообщению приложен файл:

7327651.png
(1.9 Kb)


Быть или не быть, вот в чем загвоздка!

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:24 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:26 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Quote (RAN)

А в твоем файле вот он, туточки!

а-а-а-а, а я-то его в модулях искал ))))))
значит эту запись мне тоже надо добавить в самом листе?
Потому что сейчас запись на листе у меня выглядит вот так:

Code

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim arr
     If Target.Count <> 1 Then Exit Sub
     If Not Intersect(Target, Columns(2)) Is Nothing Then
     Application.EnableEvents = False
     arr = www
         If Target = arr(3, 1) Then Target.Offset(, 22) = Format(Now, «hh:nn DD.MM.YYYY»)
         If Target = arr(4, 1) Then Target.Offset(, 23) = Format(Now, «hh:nn DD.MM.YYYY»)
         If Target = arr(5, 1) Then Target.Offset(, 26) = Format(Now, «hh:nn DD.MM.YYYY»)
         If Target = arr(6, 1) Then Target.Offset(, 24) = Format(Now, «hh:nn DD.MM.YYYY»)
         If Target = arr(7, 1) Then Target.Offset(, 25) = Format(Now, «hh:nn DD.MM.YYYY»)
     Application.EnableEvents = True
     End If
End Sub


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 13:28

 

Ответить

RAN

Дата: Среда, 31.08.2011, 13:30 |
Сообщение № 12

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Какую запись добавить? surprised
Я же туда уже все вставил, и даже диапазоны поменял! lol


Быть или не быть, вот в чем загвоздка!

 

Ответить

Саня

Дата: Среда, 31.08.2011, 13:32 |
Сообщение № 13

Группа: Друзья

Ранг: Ветеран

Сообщений: 1067


Репутация:

560

±

Замечаний:
0% ±


XL 2016

Quote (light26)

Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?

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

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:32 |
Сообщение № 14

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

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


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:34 |
Сообщение № 15

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Quote (Саня)

я тебе показываю, как в принципе, программируется VBE

у-у-у, до этого мне еще далеко ))))
но все-равно спасибо. )


Я не волшебник. Я только учусь

 

Ответить

RAN

Дата: Среда, 31.08.2011, 13:37 |
Сообщение № 16

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Куда делся не знаю, но
Private Sub Worksheet_SelectionChange <>Private Sub Worksheet_Change
Это как-бы две разных процедуры по двум разным событиям


Быть или не быть, вот в чем загвоздка!

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:37 |
Сообщение № 17

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

RAN, Можно просьбу?
подпиши, пожалуйста, что делает каждая строка. ( с if target я разобрался сам на 95%) )))


Я не волшебник. Я только учусь

 

Ответить

light26

Дата: Среда, 31.08.2011, 13:44 |
Сообщение № 18

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Quote (RAN)

Private Sub Worksheet_SelectionChange <>Private Sub Worksheet_Change
Это как-бы две разных процедуры по двум разным событиям

ну и как их «объединить?


Я не волшебник. Я только учусь

 

Ответить

RAN

Дата: Среда, 31.08.2011, 13:58 |
Сообщение № 19

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Да никак.
Эти процедуры должны быть обе в модуле листа1
Одна обрабатывает событие перемещения по ячейкам — Private Sub Worksheet_SelectionChange,
а другая — событие изменения значения в ячейке — Private Sub Worksheet_Change


Быть или не быть, вот в чем загвоздка!

 

Ответить

light26

Дата: Среда, 31.08.2011, 14:09 |
Сообщение № 20

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Quote (RAN)

Эти процедуры должны быть обе в модуле листа1

а сделать-то это как?


Я не волшебник. Я только учусь

 

Ответить

Нет. Есть файл, который создаёт новую книгу с макросами и кнопками. Считайте это книгой-инструментом, которая создаёт книгу с макросами и кнопками. Какой она будет — выбирает пользователь, поэтому заранее подготовить нельзя.  

  Я додумался, что менять пути макроса можно. НО! Макрос запускается из старой книги, которая в процессе работы закрывается. Почему-то в новой изменения не происходят — где я ошибаюсь, не подскажите? Вот сокращенный код:  

  Application.ScreenUpdating = False  
ActiveWorkbook.VBProject.VBComponents(«Module1»).Export («c:Module1.bas»)  
   Sheets(Array(«Scorecard», «Reserved», «CopyData»)).Select  
   Sheets(Array(«Scorecard», «Reserved», «CopyData»)).Copy  
Workbooks(«TM Scorecard Builder — копия.xlsm»).Close (False)  
Application.VBE.ActiveVBProject.VBComponents.Import («c:Module1.bas»)  
Kill («c:Module1.bas»)  
   ActiveSheet.Shapes.Range(Array(«Bevel 11»)).Select  
   Selection.OnAction = «Лист1.SCAs»  
Application.ScreenUpdating = True  

  Что я думал делаться должно?  

  1) Блокируется экран  
2) Экспорт модуля  
3) Выбор и копирование листов  
4) Закрытие старой книги без сохранения  
5) Импорт модуля  
6) Удаление экспортированного модуля  
7) Выбор и замена назначенного макроса  
8) Разблокировка экрана  

  Как это работает на самом деле  

  1) Блокируется экран  
2) Экспорт модуля  
3) Выбор и копирование листов  
4) Закрытие старой книги без сохранения  
5) Импорт модуля  
6) Удаление экспортированного модуля  
7) Разблокировка экрана  

  То бишь, как я вижу, переназначение просто не происходит. Почему??? Моё подозрение в том, что сначала надо выбрать вновь созданную книгу — но как?  

  предварительное удаление файла из пути ничего не даёт  
он вовзращается автоматически при копировании листов

Как экспортировать все макросы из одной книги в другую?

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

Экспорт всех макросов из одной книги в другую с кодом VBA


Экспорт всех макросов из одной книги в другую с кодом VBA

Чтобы экспортировать все коды макросов vba из одного файла Excel в другой, выполните следующие действия:

1. Во-первых, вы должны открыть две книги одновременно, одна содержит макросы, а другая — та, в которую вы хотите экспортировать макросы, см. Снимок экрана:

макросы экспорта документов 1

Вкладка Office: открытие, чтение, редактирование и управление несколькими документами Office в одном окне с вкладками.

Вкладка Office позволяет просматривать, редактировать и управлять приложениями Microsoft Office с вкладками. Вы можете открывать несколько документов / файлов в одном окне с вкладками, например, используя браузер IE 8/9/10, Firefox или Google Chrome. Нажмите, чтобы загрузить и бесплатную пробную версию сейчас!

макросы экспорта документов

2. Удерживайте ALT + F11 , чтобы открыть Microsoft Visual Basic для приложений окно.

3. Нажмите Вставить > Модуль, и вставьте следующий макрос в Модули Окно.

Код VBA: экспорт всех макросов из одной книги в другую:

Sub ExportAndImportModule()
Dim xStrSWSName, xSreDWSName As String
Dim xSWS, xDWS As Workbook
xStrSWSName = "old-workbook"
xSreDWSName = "new-workbook"
Dim xFilePath As String
Dim xObjFD As FileDialog
Set xObjFD = Application.FileDialog(msoFileDialogFolderPicker)
 With xObjFD
        .AllowMultiSelect = False
        .Show
        If .SelectedItems.Count > 0 Then
            xFilePath = .SelectedItems.Item(1)
        Else
            Exit Sub
        End If
End With
On Error GoTo Err1
Set xSWS = Workbooks(xStrSWSName & ".xlsm")
Set xDWS = Workbooks(xSreDWSName & ".xlsm")
Set xvbap = xSWS.VBProject
Set xVBC = xvbap.VBComponents
For Each Module In xSWS.VBProject.VBComponents
If Module.Type = vbext_ct_StdModule Then
Module.Export (xFilePath & "" & Module.Name & ".bas")
xDWS.VBProject.VBComponents.Import (xFilePath & "" & Module.Name & ".bas")
End If
Next Module
Exit Sub
Err1:
    MsgBox "come to nothing!"
End Sub

Внимание: В приведенном выше коде «старая книга»- это имя книги, из которой вы хотите экспортировать макросы, и«новая рабочая тетрадь»- это книга, в которую вы хотите импортировать макросы. Вы должны изменить имена на свои собственные. Обе книги должны быть XLSM формат файла.

макросы экспорта документов 2

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

макросы экспорта документов 3

5. Затем нажмите OK Кнопка, и все макросы были экспортированы из указанной книги в другой файл Excel, а файлы макросов также были сохранены в определенной папке. Смотрите скриншот:

макросы экспорта документов 4

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


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (3)


Оценок пока нет. Оцените первым!

Понравилась статья? Поделить с друзьями:
  • Excel vba колонка строка
  • Excel vba коллекции удалить
  • Excel vba количество ячеек со значением
  • Excel vba количество строк в умной таблице
  • Excel vba количество столбцов на листе