powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Добавление кода в новь созданный лист
14 сообщений из 14, страница 1 из 1
Добавление кода в новь созданный лист
    #33538772
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день знатоки!!

Вот хочу сделать так, чтобы новый лист создавался с кодом по моему желанию.

Нашел в книжке как это делается:

dim newsheet as worksheets
set newsheet =sheet.add
code="Нужный код"
with ActiveWorkbook.VBProject.VBComponents(newsheet.name).CodeModule
nextline = .countoflines + 1
.InsertLines nextline, code
End With

Что делаю не правильно!!! Плиз!!!
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33538773
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Exell 2003
Доверенный доступ включил
Что ещё???
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33538778
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка номер "9"
Мол объект на который ссылаюсь не существует
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33539883
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что у тебя неверно не смотрел, скорее всего от-того, что в пустом модуле нечего ворошить. это работающий код.
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub test115()
Dim S As String
S = "Private Sub Worksheet_Change(ByVal Target As Range)" & Chr( 10 ) & _
 "MsgBox ""My Change!""" & Chr( 10 ) & _
 "End Sub"
Workbooks("Книга3").VBProject.VBComponents("Лист1").CodeModule.AddFromString S
End Sub
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33539887
1. dim newsheet as worksheets
Ты объявляешь коллекцию листов, а не отдельно взятый лист.

2. set newsheet = sheet.add
sheet.add поменяй на sheets.add или worksheets.add

Полный пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub AddCode()
    Dim ws As Worksheet
    Dim strCode As String
    Dim intIdx As Integer
    
    strCode = "Нужный код"
    
    Set ws = Worksheets.Add
    
    ' В данном случае лучше воспользоваться свойством CodeName,
    ' т.к. нас интересует имя модуля листа, а не само имя листа,
    ' хотя в начале они имеют одинаковые имена.
    With ActiveWorkbook.VBProject.VBComponents(ws.CodeName).CodeModule
        intIdx = .CountOfLines +  1 
        .InsertLines intIdx, strCode
    End With
End Sub
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33541992
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я написал вот так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim newsheet As Worksheet
Dim code As String
Dim nextline As Integer

 Set newsheet = Sheets.Add

code = "Dim bilo As String" & vbCrLf
code = code & "Dim bilo As String" & vbCrLf
code = code & "Dim stalo As String" & vbCrLf

With ActiveWorkbook.VBProject.VBComponents(newsheet.CodeName).CodeModule
    nextline = .countoflines +  1 
    .InsertLines nextline, code
End With

Всё работает, но машина отрабатывает .InsertLines nextline, code выдаёт сообщение can't enter break mode at this time и даёт выбор END, CONTINUE, HELP . Если CONTINUE то создаётся лист с кодом. Если code состоит из многих строк то выдаётся ексел выполнил недопустимую операцию.

Как это победить!!
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33542497
Вот статейка:

XL97: "Can't Enter Break Mode" Stepping Through a Macro

Но это для 97 Excel и для случая, если ты добавляешь ActiveX контрол на лист.

Попробуй еще отключить "require variable declaration" в Tools->Options->Editor, может поможет.

Или еще вариант. Подключи библиотеку Microsoft Visual Basic for Applications Extensibility и перепиши код следующим образом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Dim newsheet As Worksheet
    Dim code As String
    Dim nextline As Integer
    Dim cm As CodeModule
    
    Set newsheet = Sheets.Add
    
    code = "Dim bilo As String" & vbCrLf
    code = code & "Dim bilo As String" & vbCrLf
    code = code & "Dim stalo As String" & vbCrLf
    
    Set cm = ActiveWorkbook.VBProject. _
      VBComponents(newsheet.CodeName).CodeModule
    
    With cm
        nextline = .countoflines +  1 
        .InsertLines nextline, code
    End With

Пробуй.
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33547501
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не получается:

Если :
Пользователь2Попробуй еще отключить "require variable declaration" в Tools->Options->Editor, может поможет.

Или еще вариант. Подключи библиотеку Microsoft Visual Basic for Applications Extensibility и перепиши код следующим образом.

Dim newsheet As Worksheet
Dim code As String
Dim nextline As Integer
Dim cm As CodeModule

Set newsheet = Sheets.Add

code = "Dim bilo As String" & vbCrLf
code = code & "Dim bilo As String" & vbCrLf
code = code & "Dim stalo As String" & vbCrLf

Set cm = ActiveWorkbook.VBProject. _
VBComponents(newsheet.CodeName).CodeModule

With cm
nextline = .countoflines + 1
.InsertLines nextline, code
End With


и если:
sergeyvg Sub test115()
Dim S As String
S = "Private Sub Worksheet_Change(ByVal Target As Range)" & Chr(10) & _
"MsgBox ""My Change!""" & Chr(10) & _
"End Sub"
Workbooks("Книга3").VBProject.VBComponents("Лист1").CodeModule.AddFromString S
End Sub


Хотя sergeyvg написал что код работает.

Проблема в том же:
Всё работает, но машина отрабатывает .InsertLines nextline, code выдаёт сообщение can't enter break mode at this time и даёт выбор END, CONTINUE, HELP. Если CONTINUE то создаётся лист с кодом. Если code состоит из многих строк то выдаётся ексел выполнил недопустимую операцию.
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33547531
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glazz_gmsвыдаёт сообщение can't enter break mode at this time
Оно попыталось сделать предварительную компиляцию твоего кода и не смогло. Ошибка синтаксическая в добавляемом коде.
Конкретнее - дважды объявляешь переменную bilo.
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33547601
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если то в чем дело:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub test()

Dim newsheet As Worksheet
Dim code As String
Dim nextline As Integer
Dim cm As CodeModule
    
Set newsheet = Sheets.Add
    
code = "sub test1" & vbCrLf
code = code & "m=1" & vbCrLf
code = code & "end sub" & vbCrLf
    
Set cm = ActiveWorkbook.VBProject. _
  VBComponents(newsheet.CodeName).CodeModule
    
With cm
    nextline = .countoflines +  1 
    .InsertLines nextline, code
End With

End Sub



Эффект тот же.
В чем же дело?
Помогите разобраться
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33547704
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Эффект тот же", это какой? Как полностью текст ошибки?
Кстати, в добавляемом коде опять синтаксическая проблема. Перменная m не объявлена. Если в VBA по умолчанию включен контроль за объявлением переменных это будет расценено как ошибка.
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #33548991
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ура товарищи!!

Я разобрался. Ура!!!(3 раза), но когда выполняешь код по шагам то вылетает ошибка
glazz_gms Машина отрабатывает .InsertLines nextline, code выдаёт сообщение can't enter break mode at this time и даёт выбор END, CONTINUE, HELP. Если CONTINUE то создаётся лист с кодом.

а если сразу (F5) то все работает. Почему????
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Добавление кода в новь созданный лист
    #39654765
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
glazz_gms,

Добрый день! Понимаю что продолжать эту тему давно минувших лет дело так себе но тем не менее она для меня очень животрепещущая.
Юзаю функционал по добавлению кода приведённый в источнике:
https://www.excel-vba.ru/chto-umeet-excel/kak-dobavit-kod-procedury-programmno-skopirovat-modul/comment-page-1/#comment-226873

Что делаю:
1) Копирую типовые листы из другой книги в рабочую. Никакого дополнительного кода импортируемые листы не содержат на момент копирования.
2) Добавляю 2 события для импортированного листа
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Private Sub Worksheet_Activate()
If VE.LoadData True Then Activate_CubeSheet ActiveSheet

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If VE.LoadData True Then
Set VE.iBook = ActiveWorkbook
Set VE.iSheet = VE.iBook.ActiveSheet
Set VE.iRange = Selection 'VE.iSheet.Selection

VE.firstRange = GetStartLocationAddressRange(Selection)
VE.endRange = GetEndLocationAddressRange(Selection)
VE.shzoom = ActiveWindow.Zoom
VE.SC = ActiveWindow.ScrollColumn
VE.SR = ActiveWindow.ScrollRow

VE.iBook.Worksheets("StdGiDNames").Range("H1") = VE.firstRange
VE.iBook.Worksheets("StdGiDNames").Range("I1") = VE.endRange
VE.iBook.Worksheets("StdGiDNames").Range("J1") = VE.shzoom
VE.iBook.Worksheets("StdGiDNames").Range("K1") = VE.SC
VE.iBook.Worksheets("StdGiDNames").Range("L1") = VE.SR
End If

End Sub



Получаю ошибку "can't enter break mode at this time"
Далее неприятно уже работать. Точки останова не работают.

Код: vbnet
1.
2.
3.
Application.DisplayAlerts = False - не помогает, как и прочие
Application.Wait time:=Now + 1 / 10 ^ 9
DoEvents



Был бы очень признателен если бы вы подсказали как исключить этот конфликт!
...
Рейтинг: 0 / 0
Добавление кода в новь созданный лист
    #39654979
MAGRAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто нибудь, кто в теме, пожалуйста подскажите!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Добавление кода в новь созданный лист
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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