powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программное создание макроса
12 сообщений из 12, страница 1 из 1
Программное создание макроса
    #37544236
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Пытаюсь создать макрос программно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub CreateMacrosForWorkSheets()
    MacrosText = "Private Sub Worksheet_SelectionChange(ByVal Target As Range) "
    MacrosText = MacrosText & Chr( 13 ) + "RefreshData " & Chr( 13 ) + "End Sub "
    For i =  1  To ThisWorkbook.VBProject.VBComponents.Count
      ThisWorkbook.VBProject.VBComponents.Item(i).CodeModule.AddFromString (MacroText)
    Next i
    'For Each iVBComponent In ThisWorkbook.VBProject.VBComponents
    '  iVBComponent.CodeModule.AddFromString (MacrosText)
    'Next
End Sub

Во-первых, не могу понять почему закомментированный код создает макрос, а не закомментированный отрабатывает без ошибок, но ничего не создается. Во-вторых, не знаю, как проверить для какого элемента VBComponents создаю. Мне надо, чтоб создавался обработчик события Worksheet_SelectionChange для каждого листа.
Заранее спасибо :)
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544292
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделала так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub CreateMacrosForWorkSheets()
    MacrosText = "Private Sub Worksheet_SelectionChange(ByVal Target As Range) "
    MacrosText = MacrosText & Chr( 13 ) + "RefreshData " & Chr( 13 ) + "End Sub "
    For i =  1  To Worksheets.Count
      a = Worksheets(i).Name
      If a <> "Списки" Then
        ThisWorkbook.VBE.VBProject.VBComponents(Worksheets(i).Name).CodeModule.AddFromString (MacroText)
      End If
    Next i
End Sub
Но так тоже не работает... хотя вроде должно... никакой обибки не выдает, но и не создается....
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544313
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksandraNНо так тоже не работает... хотя вроде должно... никакой обибки не выдает, но и не создается....Очень странно, что не выдается ошибки. Объект Workbook не имеет свойства VBE.
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544317
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потому что у меня так:
ThisWorkbook.VBProject.VBComponents(Worksheets(i).Name).CodeModule.AddFromString (MacroText)
- это ошибка копирования (из разных мест копировала)
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544378
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделала так,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    For i =  1  To Worksheets.Count
      a = Worksheets(i).Name
      If a <> "Списки" Then
        With ThisWorkbook.VBProject.VBComponents(a).CodeModule
            LineNum = .CreateEventProc("SelectionChange", "Worksheet")
            LineNum = LineNum +  1 
            .InsertLines LineNum, "    RefreshData "
        End With
      End If
    Next i
Теперь все создается, но что-то мешает... появляется сообщение "can't enter break mode at this time"
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544515
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего вы пытаетесь добавлять код в текущий модуль , который находится на исполнении
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544547
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Да, так и есть) Спасибо)
...
Рейтинг: 0 / 0
Программное создание макроса
    #37544605
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня все ломается, когда лист называется как-то так : "390106121".... думала, что он воспинимает наименование как число... перевожу в строку вручную и все равно ругается...
...
Рейтинг: 0 / 0
Программное создание макроса
    #37547172
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не решилась у меня проблема с цифрами в наименовании листа.... Если лист называется как-то так "CODE_133" или "133" или "CODE133", появляется сообщение об ошибке : "Run-time error '9'" .
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    For i =  1  To Worksheets.Count
      If (Worksheets(i).Name <> "Списки") And (Worksheets(i).Name <> "Титульный лист") Then
        With ThisWorkbook.VBProject.VBComponents(CStr(Worksheets(i).Name)).CodeModule
          If .Find("Sub" & _
                iProcedure$,  1 ,  1 , .CountOfLines,  1 ) = False Then
              LineNum = .CreateEventProc("SelectionChange", "Worksheet")
              LineNum = LineNum +  1 
              .InsertLines LineNum, "    RefreshData "
          End If
        End With
      End If
    Next i

На строчке:
Код: plaintext
1.
    If (Worksheets(i).Name <> "Списки") And (Worksheets(i).Name <> "Титульный лист") Then

В чем может быть проблема?
...
Рейтинг: 0 / 0
Программное создание макроса
    #37547175
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, не на той, вот на этой строчке....
Код: plaintext
1.
    With ThisWorkbook.VBProject.VBComponents(CStr(Worksheets(i).Name)).CodeModule
...
Рейтинг: 0 / 0
Программное создание макроса
    #37549485
AleksandraNМне надо, чтоб создавался обработчик события Worksheet_SelectionChange для каждого листа.Для этого не надо менять текст модулей рабочих листов. Во-первых, посмотрите Workbook.SheetSelectionChange и Application.SheetSelectionChange. Во-вторых, почитайте про описания переменных с ключевым словом WithEvents.
...
Рейтинг: 0 / 0
Программное создание макроса
    #37550195
AleksandraN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем, с этим вроде разобралась...
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программное создание макроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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