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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование макроса (Как скопировать макрос в другой документ)
Копирование макроса
light26 Дата: Среда, 31.08.2011, 11:57 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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


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

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

Автор - light26
Дата добавления - 31.08.2011 в 11:57
Саня Дата: Среда, 31.08.2011, 12:22 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

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

Автор - Саня
Дата добавления - 31.08.2011 в 12:22
light26 Дата: Среда, 31.08.2011, 12:30 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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


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

Автор - light26
Дата добавления - 31.08.2011 в 12:30
RAN Дата: Среда, 31.08.2011, 12:52 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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

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

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

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


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

Сообщение отредактировал RAN - Среда, 31.08.2011, 12:56
 
Ответить
СообщениеОткрываешь свой файл и файл с календарем.
Заходишь в редактор VBA.
Открываешь Wiev - Project Explorer (если закрыт)
Открываешь Forms
Хватаешь мышом DateForm и тащишь в норку (свой файл).
Аналогично с модулями и модулями класса.

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

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

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

Автор - RAN
Дата добавления - 31.08.2011 в 12:52
light26 Дата: Среда, 31.08.2011, 12:56 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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

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


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

Сообщение отредактировал light26 - Среда, 31.08.2011, 12:56
 
Ответить
СообщениеRAN,
Quote (RAN)
Открываешь Forms
Хватаешь мышом DateForm и тащишь в норку (свой файл).
Аналогично с модулями и модулями класса.

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

Автор - light26
Дата добавления - 31.08.2011 в 12:56
RAN Дата: Среда, 31.08.2011, 13:06 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Сказочник!
К сообщению приложен файл: light26.rar (37.8 Kb)


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

Автор - RAN
Дата добавления - 31.08.2011 в 13:06
Саня Дата: Среда, 31.08.2011, 13:15 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 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

 
Ответить
Сообщение
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


Автор - Саня
Дата добавления - 31.08.2011 в 13:15
light26 Дата: Среда, 31.08.2011, 13:18 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (RAN)
Сказочник!

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


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

Сообщение отредактировал light26 - Среда, 31.08.2011, 13:19
 
Ответить
Сообщение
Quote (RAN)
Сказочник!

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

Автор - light26
Дата добавления - 31.08.2011 в 13:18
RAN Дата: Среда, 31.08.2011, 13:24 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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

Я же говорю - сказочник!
В оригинале такого листа тоже не было!
А в твоем файле вот он, туточки! tongue
К сообщению приложен файл: 7327651.png (1.9 Kb)


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Quote (light26)
а листа Private Sub Worksheet_SelectionChange не нашел. в оригинальном файле он был, а тут нету

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

Автор - RAN
Дата добавления - 31.08.2011 в 13:24
light26 Дата: Среда, 31.08.2011, 13:24 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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


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

Автор - light26
Дата добавления - 31.08.2011 в 13:24
light26 Дата: Среда, 31.08.2011, 13:26 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 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
 
Ответить
Сообщение
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:26
RAN Дата: Среда, 31.08.2011, 13:30 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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


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

Автор - RAN
Дата добавления - 31.08.2011 в 13:30
Саня Дата: Среда, 31.08.2011, 13:32 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

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


этот код вставлять никуда не надо, я тебе показываю, как в принципе, программируется VBE, а как ты сделаешь в своем конкретном случае, я не знаю...
 
Ответить
Сообщение
Quote (light26)
Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?


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

Автор - Саня
Дата добавления - 31.08.2011 в 13:32
light26 Дата: Среда, 31.08.2011, 13:32 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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


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

Автор - light26
Дата добавления - 31.08.2011 в 13:32
light26 Дата: Среда, 31.08.2011, 13:34 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Саня)
я тебе показываю, как в принципе, программируется VBE

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


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Саня)
я тебе показываю, как в принципе, программируется VBE

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

Автор - light26
Дата добавления - 31.08.2011 в 13:34
RAN Дата: Среда, 31.08.2011, 13:37 | Сообщение № 16
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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


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

Автор - RAN
Дата добавления - 31.08.2011 в 13:37
light26 Дата: Среда, 31.08.2011, 13:37 | Сообщение № 17
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

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


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

Автор - light26
Дата добавления - 31.08.2011 в 13:37
light26 Дата: Среда, 31.08.2011, 13:44 | Сообщение № 18
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (RAN)
Private Sub Worksheet_SelectionChange <>Private Sub Worksheet_Change
Это как-бы две разных процедуры по двум разным событиям

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


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (RAN)
Private Sub Worksheet_SelectionChange <>Private Sub Worksheet_Change
Это как-бы две разных процедуры по двум разным событиям

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

Автор - light26
Дата добавления - 31.08.2011 в 13:44
RAN Дата: Среда, 31.08.2011, 13:58 | Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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


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

Автор - RAN
Дата добавления - 31.08.2011 в 13:58
light26 Дата: Среда, 31.08.2011, 14:09 | Сообщение № 20
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (RAN)
Эти процедуры должны быть обе в модуле листа1

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


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (RAN)
Эти процедуры должны быть обе в модуле листа1

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

Автор - light26
Дата добавления - 31.08.2011 в 14:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование макроса (Как скопировать макрос в другой документ)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

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