Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программное создание макроса / 12 сообщений из 12, страница 1 из 1
25.11.2011, 13:57
    #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
25.11.2011, 14:20
    #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
25.11.2011, 14:26
    #37544313
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
AleksandraNНо так тоже не работает... хотя вроде должно... никакой обибки не выдает, но и не создается....Очень странно, что не выдается ошибки. Объект Workbook не имеет свойства VBE.
...
Рейтинг: 0 / 0
25.11.2011, 14:29
    #37544317
AleksandraN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
потому что у меня так:
ThisWorkbook.VBProject.VBComponents(Worksheets(i).Name).CodeModule.AddFromString (MacroText)
- это ошибка копирования (из разных мест копировала)
...
Рейтинг: 0 / 0
25.11.2011, 14:51
    #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
25.11.2011, 15:35
    #37544515
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
скорее всего вы пытаетесь добавлять код в текущий модуль , который находится на исполнении
...
Рейтинг: 0 / 0
25.11.2011, 15:43
    #37544547
AleksandraN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
Konst_One,

Да, так и есть) Спасибо)
...
Рейтинг: 0 / 0
25.11.2011, 16:01
    #37544605
AleksandraN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
У меня все ломается, когда лист называется как-то так : "390106121".... думала, что он воспинимает наименование как число... перевожу в строку вручную и все равно ругается...
...
Рейтинг: 0 / 0
28.11.2011, 09:32
    #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
28.11.2011, 09:34
    #37547175
AleksandraN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
ой, не на той, вот на этой строчке....
Код: plaintext
1.
    With ThisWorkbook.VBProject.VBComponents(CStr(Worksheets(i).Name)).CodeModule
...
Рейтинг: 0 / 0
29.11.2011, 11:38
    #37549485
Программное создание макроса
AleksandraNМне надо, чтоб создавался обработчик события Worksheet_SelectionChange для каждого листа.Для этого не надо менять текст модулей рабочих листов. Во-первых, посмотрите Workbook.SheetSelectionChange и Application.SheetSelectionChange. Во-вторых, почитайте про описания переменных с ключевым словом WithEvents.
...
Рейтинг: 0 / 0
29.11.2011, 15:34
    #37550195
AleksandraN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Программное создание макроса
спасибо всем, с этим вроде разобралась...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Программное создание макроса / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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