Страницы: 1
RSS
Запись кода в модуль листа.
 
Добрый вечер. Подскажите плиз. Как можно записать код в модуль листа. Мне нужно записать 3 процедуры, одна из которых Worksheet_activate.
Идея записывать построчно мне не понятна. Желательно как то сделать это экспортом из файла типа *.bas. Если тема обсуждалась - тыкните пальцем.. Не получилось найти.
 
А в чём проблема именно с модулем листа? Открываете модуль, в левом КомбоБоксе выбираете Worksheet, в правом КомбоБоксе выбираете нужную процедуру.
 
Это нужно сделать не руками а с помощью другой процедуры
 
Т.е. вариант просто скопировать код и вставить его в модуль листа не подходит?
 
Нет. Мне нужно открыть документ(1). Удалить в документе лист с этим кодом. Поле этого скопировать лист с таким же названием из другого документа(2). Вся проблема в том что там есть события которые мне вредят при работе. И поэтому я не могу в документе 2 оставить код вредоносный. Но он должен быть в последующем вставлен на свое место. (Один дурак на работе разработал неудачную концепцию и это все внедрили и требуют использовать)
 
Вообще не вижу проблемы: копируйте лист (вместе с ним скопируется и код). После этого в новом листе удалите этот код.
 
А я вижу проблему. Идея теряет весь смысл, поскольку начинают  срабатывать события в документе 2... А они как раз мне и вредят сволочи.  Порочный круг выходит.
 
Цитата
Sla_0412 написал:
поскольку начинают  срабатывать события в документе 2...
ну так отключите временно обработку событий Application.EnableEvents=False.
По вопросам из тем форума, личку не читаю.
 
Это конечно вариант. Спасибо. Ну а все таки.. Можно или нельзя сделать экспорт кода в лист?
 
Сначала экспортируем в bas, потом импортируем.
Или так: комментируем все нужные процедуры, копируем лист, затем убираем блокировку на нужном листе.
 
идея изменить код кодом порочна сама по себе
если вы в состоянии написать код, который должен изменить код, то просто напишите код, который со старта учтет все необходимое
стандартно,
опишите не проблему к которой вы пришли пытаясь изменить код кодом, а задачу, которую решаете все это наверняка можно будет написать кодом, который учтет все варианты
и, отвечая на ваш вопрос:
Цитата
Запись кода в модуль листа.
1. скопируйте этот
Код
Sub InsSub2List1()
  Dim m
  With ThisWorkbook.VBProject.VBComponents(Worksheets(1).CodeName).CodeModule
    .InsertLines .CountOfLines + 1, vbLf & "sub " & NM & "()" & vbLf & _
    "'   this sub insert here by another code" & vbLf & "end sub"
  End With
End Sub

Function NM$()
  Dim s$, i&
  Randomize: s = "SB_"
  For i = 1 To 10 + Rnd() * 20
    s = s & Chr(65 + Rnd() * 24)
  Next
  NM = s
End Function
в программный модуль
2. доверте VBA доступ к обектной модели VBA
- Файл
- Параметры
- Центр управления безопасностью
- Параметры центра управления безопасностью
- Параметры макросов
- Доверить доступ к обектной модели VBA - поставте птичку
- Ок
- Ок
3. жмите в файле Alt+F8, выполните InsSub2List1
сколько раз выполните InsSub2List1, столько новых процедур появится в модуле листа 1
удачи!
Изменено: Ігор Гончаренко - 14.12.2019 06:28:52
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх