Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Добавление кода в новь созданный лист / 14 сообщений из 14, страница 1 из 1
11.02.2006, 13:47
    #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
11.02.2006, 13:48
    #33538773
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
Exell 2003
Доверенный доступ включил
Что ещё???
...
Рейтинг: 0 / 0
11.02.2006, 13:51
    #33538778
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
Ошибка номер "9"
Мол объект на который ссылаюсь не существует
...
Рейтинг: 0 / 0
13.02.2006, 08:26
    #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
13.02.2006, 08:41
    #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
13.02.2006, 20:22
    #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
14.02.2006, 08:45
    #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
15.02.2006, 19:26
    #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
15.02.2006, 19:51
    #33547531
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
glazz_gmsвыдаёт сообщение can't enter break mode at this time
Оно попыталось сделать предварительную компиляцию твоего кода и не смогло. Ошибка синтаксическая в добавляемом коде.
Конкретнее - дважды объявляешь переменную bilo.
...
Рейтинг: 0 / 0
15.02.2006, 20:37
    #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
15.02.2006, 22:26
    #33547704
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
"Эффект тот же", это какой? Как полностью текст ошибки?
Кстати, в добавляемом коде опять синтаксическая проблема. Перменная m не объявлена. Если в VBA по умолчанию включен контроль за объявлением переменных это будет расценено как ошибка.
...
Рейтинг: 0 / 0
16.02.2006, 13:43
    #33548991
glazz_gms
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
Ура товарищи!!

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

а если сразу (F5) то все работает. Почему????
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.06.2018, 11:42
    #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
04.06.2018, 15:36
    #39654979
MAGRAV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление кода в новь созданный лист
Кто нибудь, кто в теме, пожалуйста подскажите!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Добавление кода в новь созданный лист / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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