powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление кода средствами VBA
12 сообщений из 12, страница 1 из 1
Удаление кода средствами VBA
    #33083593
kdimetrius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем. Тут на днях тема обсуждалась о вставке текста кода средствами VBA. У меня обратная задача, с дополнительным ньюансом:
1. Необходимо удалить код програмно
2. Текст кода "нацеплен" на лист Excel (чтобы быть более точным - это Worksheet_Activate). Пытался рыть в сторону ActiveWorkbook.VBProject.VBComponents, но чего-то ничего не нарыл. Помогите пожалуста. Заранее благодарен, Дмитрий
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33083673
Фотография rrrrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ламерское решение: добавить лист, скопировать на него данные, удалить исходный
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33083898
kdimetrius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том-то и дело, что этот вариант не подходит. Необходимо сохранить все настройки для это листа: колонтитулы, области печати, размеры и т.д. Для этого необходимо перемещать весь лист в новую книгу, а этот код сидит там как ... Ну вот я пока и не знаю, как именно мне удалить этот модуль. Да, и чего греха таить, интересно все же узнать как это вообще делается.
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33084035
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdimetriusПытался рыть в сторону ActiveWorkbook.VBProject.VBComponents, но чего-то ничего не нарыл.
А ты точно рыть пытался?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
For i =  1  To ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.CountOfLines
   If ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.Lines(i,  1 ) = "Private Sub Worksheet_Activate()" Then
      StartLine = i
      For j = i+ 1  To ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.CountOfLines
         If ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.Lines(j,  1 ) = "End Sub" Then
            EndLine = j
            ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.DeleteLines StartLine, (EndLine - StartLine)
         End If
      Next
   End If
Next
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33086329
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я как-то уже публиковал такой код
Sub zzz()
With ThisWorkbook.VBProject
For Each VBR In .References
If Not VBR.BuiltIn Then .References.Remove VBR
Next VBR
For Each VBC In .VBComponents
If VBC.Type = 100 Then
Call VBC.CodeModule.DeleteLines(1, VBC.CodeModule.CountOfLines)
Else
.VBComponents.Remove VBC
End If
Next VBC
End With
End Sub
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33087095
kdimetrius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl kdimetriusПытался рыть в сторону ActiveWorkbook.VBProject.VBComponents, но чего-то ничего не нарыл.
А ты точно рыть пытался?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
For i =  1  To ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.CountOfLines
   If ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.Lines(i,  1 ) = "Private Sub Worksheet_Activate()" Then
      StartLine = i
      For j = i+ 1  To ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.CountOfLines
         If ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.Lines(j,  1 ) = "End Sub" Then
            EndLine = j
            ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule.DeleteLines StartLine, (EndLine - StartLine)
         End If
      Next
   End If
Next

При выполнении кода выскакивает ошибка (см. рисунок). Как этого избежать?
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33087364
kdimetrius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу ошибки сам догадался, отбой.
По ходу возникла другая проблемка. Лист, на котором висел код перенес в новую книгу, удалил текст кода, сохранил книгу под другим именем и казалось бы, при открытии этой книги ни о каких макросах речи быть неможет, ан нет. При открытии выскакивает сообщение о налии макросов и т.д. Может кто подскажет в чем моя ошибка или это глюк? И по возможности способ решения.
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33088406
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то макросы все же остались.... Ищи внимательнее.
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #33088764
kdimetrius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlГде-то макросы все же остались.... Ищи внимательнее.
Да нет там макросов. Я вот чего попробовал: взял в этой книге в этом листе после сохранения на месте кода понабирал всякую чепуху, а потом сразу и удалил ручками. При закрытии книги мне было предложено сохраниться. А вот при повторном открытии ни о каких макросах речи уже не было. Чепуха какая-то. Я уже думал, что где-то пустая строчка осталась. Нет ничего. Может Ёксел где-то прописывает, что в ём были макросы? Может еще что? Я уже второй день бьюсь. Обидно :(
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление кода средствами VBA
    #34235459
Stanislaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdimetriusПо поводу ошибки сам догадался, отбой.
По ходу возникла другая проблемка. Лист, на котором висел код перенес в новую книгу, удалил текст кода, сохранил книгу под другим именем и казалось бы, при открытии этой книги ни о каких макросах речи быть неможет, ан нет. При открытии выскакивает сообщение о налии макросов и т.д. Может кто подскажет в чем моя ошибка или это глюк? И по возможности способ решения.

Как исправить эту ошибку??? на которую ты сам догадался !
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #34235470
Stanislaus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stanislaus kdimetriusПо поводу ошибки сам догадался, отбой.
По ходу возникла другая проблемка. Лист, на котором висел код перенес в новую книгу, удалил текст кода, сохранил книгу под другим именем и казалось бы, при открытии этой книги ни о каких макросах речи быть неможет, ан нет. При открытии выскакивает сообщение о налии макросов и т.д. Может кто подскажет в чем моя ошибка или это глюк? И по возможности способ решения.

Как исправить эту ошибку??? на которую ты сам догадался !


Смотри ка и я догадался))) просто хелп нажал и все!!))
...
Рейтинг: 0 / 0
Удаление кода средствами VBA
    #34235552
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub RemoveVBACodeProcedure(SourceWb As Workbook, ComponentName As String, ProcName As String)
'удаляет из заданного модуля заданной книги заданную процедуру
'SourceWb       - объект - книга, из которой нужно удалить процедуру
'ComponentName  - строка, название модуля, из которого нужно удалить процедуру
'ProcName       - строка, имя процедуры, которую нужно удалить
Dim iVBComponent As VBComponent
Dim StartProcLine As Long
Dim CountProcLine As Long

    Set iVBComponent = SourceWb.VBProject.VBComponents(ComponentName)

    StartProcLine = iVBComponent.CodeModule.ProcBodyLine(ProcName, vbext_pk_Proc)
    CountProcLine = iVBComponent.CodeModule.ProcCountLines(ProcName, vbext_pk_Proc)

    If StartProcLine + CountProcLine >= iVBComponent.CodeModule.CountOfLines Then
        CountProcLine = CountProcLine -  1 
    End If

    iVBComponent.CodeModule.DeleteLines StartProcLine, CountProcLine

    Set iVBComponent = Nothing

End Sub
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление кода средствами VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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