Всем доброго времени суток. Уважаемые мастера, подскажите как копировать тело макроса из одного файла в другой. Ведь, если я правильно понимаю, при написании макроса его код сохраняется вместе с таблицей Excel в файле, назовем его Х1.xls. То есть где бы я впоследствии этот файл не открыл, макрос будет выполняться. в то же время, если я открою в Excele файл, скажем Х2.xls и захочу выполнить макрос записанный в Х1.xls, то у меня ничего не получится. Разберем на примере Вот ссылка к макросу выпадающего календаря (в "Готовых решениях") Календарь Как мне заставить этот макрос работать в другом файле(см. вложение) Я пытался найти ответ на страницах интернета, но безуспешно (((
Всем доброго времени суток. Уважаемые мастера, подскажите как копировать тело макроса из одного файла в другой. Ведь, если я правильно понимаю, при написании макроса его код сохраняется вместе с таблицей Excel в файле, назовем его Х1.xls. То есть где бы я впоследствии этот файл не открыл, макрос будет выполняться. в то же время, если я открою в Excele файл, скажем Х2.xls и захочу выполнить макрос записанный в Х1.xls, то у меня ничего не получится. Разберем на примере Вот ссылка к макросу выпадающего календаря (в "Готовых решениях") Календарь Как мне заставить этот макрос работать в другом файле(см. вложение) Я пытался найти ответ на страницах интернета, но безуспешно (((light26
Открываешь свой файл и файл с календарем. Заходишь в редактор VBA. Открываешь Wiev - Project Explorer (если закрыт) Открываешь Forms Хватаешь мышом DateForm и тащишь в норку (свой файл). Аналогично с модулями и модулями класса.
ВСЕ! Календарь в твоем файле!
А для запуска календаря в модуле Лист1 прописан код Private Sub Worksheet_SelectionChange Но этот код вызывает календарь только в столвце F Процедуру вызова необходимо изменить в соответствии с желаниями.
Поищи на планете "всплывающий календарь, открытый код" или "почему к всех работает, а у Мули нет" Там куча различных процедур запуска календаря
Открываешь свой файл и файл с календарем. Заходишь в редактор VBA. Открываешь Wiev - Project Explorer (если закрыт) Открываешь Forms Хватаешь мышом DateForm и тащишь в норку (свой файл). Аналогично с модулями и модулями класса.
ВСЕ! Календарь в твоем файле!
А для запуска календаря в модуле Лист1 прописан код Private Sub Worksheet_SelectionChange Но этот код вызывает календарь только в столвце F Процедуру вызова необходимо изменить в соответствии с желаниями.
Поищи на планете "всплывающий календарь, открытый код" или "почему к всех работает, а у Мули нет" Там куча различных процедур запуска календаряRAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Среда, 31.08.2011, 12:56
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"
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
Да нет, правда! Сейчас у меня тоже получилось. а раньше такой мат трехэтажный стоял... ))) Но все-равно. я скопировал вроде все модули, а листа с Private Sub Worksheet_SelectionChange не нашел. в оригинальном файле он был, а тут нету ( не знаю где че не так делаю. буду разбираться. спасибо
Quote (RAN)
Сказочник!
Да нет, правда! Сейчас у меня тоже получилось. а раньше такой мат трехэтажный стоял... ))) Но все-равно. я скопировал вроде все модули, а листа с Private Sub Worksheet_SelectionChange не нашел. в оригинальном файле он был, а тут нету ( не знаю где че не так делаю. буду разбираться. спасибоlight26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Среда, 31.08.2011, 13:19
Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?
Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?light26
а-а-а-а, а я-то его в модулях искал )))))) значит эту запись мне тоже надо добавить в самом листе? Потому что сейчас запись на листе у меня выглядит вот так:
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
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
Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?
этот код вставлять никуда не надо, я тебе показываю, как в принципе, программируется VBE, а как ты сделаешь в своем конкретном случае, я не знаю...
Quote (light26)
Саня, то-есть мне надо открыть редактор VBA, в VBAProject (Имя файла) (или в имени листа) кликнуть правой кнопкой, выбрать insert, затем Module и в появившееся окно вставить этот код?
этот код вставлять никуда не надо, я тебе показываю, как в принципе, программируется VBE, а как ты сделаешь в своем конкретном случае, я не знаю...Саня
Да никак. Эти процедуры должны быть обе в модуле листа1 Одна обрабатывает событие перемещения по ячейкам - Private Sub Worksheet_SelectionChange, а другая - событие изменения значения в ячейке - Private Sub Worksheet_Change
Да никак. Эти процедуры должны быть обе в модуле листа1 Одна обрабатывает событие перемещения по ячейкам - Private Sub Worksheet_SelectionChange, а другая - событие изменения значения в ячейке - Private Sub Worksheet_ChangeRAN