Страницы: 1
RSS
Подсчет количества строк кода процедуры (Управление компонентами VBA)
 
Имеем UserForm1    
в ней несколько Controls  c кодом  
Хочу найти код конкретного Controlа (Label1) в общем коде, а именно строку начальую  
и конечную для последующего удаленияи вот не могу никак сладить с оператором ProcCountLines  либо ProcOfLine. Выдает ошибку №35  может надо чего в референсах добавить или синтаксис не тот :(  
(у меня Excel2003, доверять доступ VBE установлен)  
 
0  Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForm1")  
1  For i = 1 To UFvbc.CodeModule.CountOfLines  
2    dd = UFvbc.CodeModule.Lines(i, 1)          
3    If InStr(1, dd, "Private Sub Label") > 0 Then  
         
4          j2 = UFvbc.CodeModule.ProcCountLines(dd, vbext_pk_Proc)  
         
5        MsgBox (j2)  
6     End If  
7  Next i
 
А зачем код удалять???  
Не проще ли скрыть этот элемент управления,  
или написать код так, чтобы при выполнении какого-то условия этот кусок кода не использовался?  
 
PS: Много лет пишу макросы - но ни разу не встречался с необходимостью программно удалять из проекта часть кода...
 
Спасибо за уделенное внимание.  
 
можно удалять можно заменить на обновленный...    
важно найти конец процедуры.  
первая строка найдена. конечно можно вставить цикл и тупо найти  
ближайший "End Sub", но академический интерес заставляет потратить время и понять почему же готовые операторы поиска конца процедуры  (ProcOfLine) или числа строк в процедуре (ProcCountLines )  не работают...выдают ошибку функция не определена №35  и все тут, а вот оператор поиска конца всего кода  
.CodeModule.CountOfLines работает прекрасно....  
ПОМОГИТЕ АСЫ!!! чую гдето галочка не стоит...
 
пример! пример!
Живи и дай жить..
 
вот сделал файл пример  
уверен что галочку "доверять доступ к Vb project" в безопасности поставить не забудете... :)))  
   
строка 9 для начала процедуры Private Sub Label1_Click()нашлась, а вот сколько строк в этой конкретной процедуре дает ошибку №35.
 
Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForm1").CodeModule  
   With UFvbc  
       i = .ProcStartLine("Label1_Click", vbext_pk_Proc)  
       j2 = .ProcCountLines("Label1_Click", vbext_pk_Proc)  
       MsgBox "начало " & i & "  строк " & j2  
   End With
Живи и дай жить..
 
аааааааааа вот же я чайник  
поймал вчера глюк от перенапряжения...  
конечно    
я за название принял всю строку:  Private Sub Label1_Click()  
а надо только название : Label1_Click  
все таки синтаксис...  
 
Огромное спасибо!!!
Страницы: 1
Читают тему
Loading...