Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос, создающий макрос / 8 сообщений из 8, страница 1 из 1
24.07.2012, 13:34
    #37890446
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
Всем привет. У меня такая проблема: работаю над макросом1 ексель, который в процессе своей работы создает новый лист. Мне необходимо к этому листу привязать другой макрос2 (обработка события). Код макроса2 есть. Так как макрос1 каждый раз создает этот лист заново, то вручную привязать макрос2 к листу я не могу (он просто будет каждый раз исчезать). Отсюда вопрос - как можно в коде макроса1 прописать присвоение кода макроса2 определенному листу.
Заранее спасибо за помощь!
...
Рейтинг: 0 / 0
24.07.2012, 13:55
    #37890492
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
makkostyaВсем привет. У меня такая проблема: работаю над макросом1 ексель, который в процессе своей работы создает новый лист. Мне необходимо к этому листу привязать другой макрос2 (обработка события). Код макроса2 есть. Так как макрос1 каждый раз создает этот лист заново, то вручную привязать макрос2 к листу я не могу (он просто будет каждый раз исчезать). Отсюда вопрос - как можно в коде макроса1 прописать присвоение кода макроса2 определенному листу.
Заранее спасибо за помощь!
вместе activesheet использовать объектную переменную.
Подробнее - нужен код макроса
...
Рейтинг: 0 / 0
24.07.2012, 14:53
    #37890617
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
Структурно код такой:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
            Case Range("A1").Address
                Range("B1") = 1
            Case Range("A2").Address
                Range("B2") = 2
    End Select
End Sub
...
Рейтинг: 0 / 0
24.07.2012, 15:09
    #37890671
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Dim WithEvents newSheet as Worksheet

...

Set newSheet = Worksheets.Add(...)

...

Private Sub newSheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Address
            Case Range("A1").Address
                Range("B1") = 1
            Case Range("A2").Address
                Range("B2") = 2
    End Select
End Sub
...
Рейтинг: 0 / 0
24.07.2012, 15:32
    #37890750
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
А какой код куда писать?
У меня макрос1 записан в отдельном модуле. В него не хочет вводиться Dim WithEvents newSheet as Worksheet, ругается на WithEvents. Я его привязал к объекту "Эта книга" - там не ругается, но и не работает.
...
Рейтинг: 0 / 0
24.07.2012, 16:55
    #37890968
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
Нужно в класс писать.
...
Рейтинг: 0 / 0
24.07.2012, 18:28
    #37891108
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
makkostyaВсем привет. У меня такая проблема: работаю над макросом1 ексель, который в процессе своей работы создает новый лист. Мне необходимо к этому листу привязать другой макрос2 (обработка события). Код макроса2 есть. Так как макрос1 каждый раз создает этот лист заново, то вручную привязать макрос2 к листу я не могу (он просто будет каждый раз исчезать). Отсюда вопрос - как можно в коде макроса1 прописать присвоение кода макроса2 определенному листу.
Заранее спасибо за помощь!

Этот пример должен дать некоторое представление:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    For intVBComponent = 1 To ioobjExcel.VBE.VBProjects("VBAProject").VBComponents.Count
        If ioobjExcel.VBE.VBProjects("VBAProject").VBComponents(intVBComponent).Name = "ThisWorkbook" Then
            With ioobjExcel.VBE.VBProjects("VBAProject").VBComponents(intVBComponent).CodeModule
               .DeleteLines 1, .CountOfLines
               .AddFromString "Option Explicit"
               .AddFromString vbCrLf
               .AddFromString "Private Sub Workbook_Open()" & vbCrLf & _
               "    ThisWorkbook.Application.Calculation = xlCalculationManual" & vbCrLf & _
               "End Sub"
            End With
        End If
    Next intVBComponent
...
Рейтинг: 0 / 0
26.07.2012, 10:15
    #37893314
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос, создающий макрос
Всем спасибо за помощь - разобрался. Сделал через классы.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    For intVBComponent = 1 To ioobjExcel.VBE.VBProjects("VBAProject").VBComponents.Count
        If ioobjExcel.VBE.VBProjects("VBAProject").VBComponents(intVBComponent).Name = "ThisWorkbook" Then
            With ioobjExcel.VBE.VBProjects("VBAProject").VBComponents(intVBComponent).CodeModule
               .DeleteLines 1, .CountOfLines
               .AddFromString "Option Explicit"
               .AddFromString vbCrLf
               .AddFromString "Private Sub Workbook_Open()" & vbCrLf & _
               "    ThisWorkbook.Application.Calculation = xlCalculationManual" & vbCrLf & _
               "End Sub"
            End With
        End If
    Next intVBComponent


За это отдельное спасибо, это походу именно то что я спрашивал, но для меня это пока сложновато, да и через классы моя задача проще решилась
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос, создающий макрос / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]