powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление объектов из рабочей книги
2 сообщений из 2, страница 1 из 1
Удаление объектов из рабочей книги
    #37422250
Пехотинец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, Коллеги.

Столкнулся с проблемой в Excel'е:

Я выгружаю данные из BI Publisher в Excel'ный файл. в обработчике Workbook_Activate добавляю 2 функции. Одна на обработку данных, а вторая - на удаление лишних листов и компонент. Текст второй:


Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Application.DisplayAlerts = False
    Set wsSh = Sheets("Data")
    If wsSh Is Nothing Then
    Else: Workbook.Worksheets("Data").Delete
    End If
        Set wsSh = Sheets("XDO_HIDDEN")
    If wsSh Is Nothing Then
    Else: Workbook.Worksheets("XDO_HIDDEN").Delete
    End If
    Set wsSh = Sheets("Old_Data.xdo")
    If wsSh Is Nothing Then
    Else: Workbook.Worksheets("Old_Data.xdo").Delete
    End If

    Set objVBProject = ActiveWorkbook.VBProject
    
    For Each objWindow In objVBProject.VBE.Windows
          If objWindow.Type =  6  Then
            objWindow.Visible = True
            objWindow.SetFocus: Exit For
        End If
    Next
      SendKeys "~~", True: SendKeys "{ENTER}", True
    
      If ActiveWorkbook.VBProject.Protection =  1  Then
        MsgBox "VBProject Защищен" & vbCrLf & _
                  Exit Sub
    End If

    
 For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        On Error Resume Next
        With oVBComponent
            Select Case .Type
            Case  1     
                .Collection.Remove oVBComponent
            Case  2     
                .Collection.Remove oVBComponent
            Case  3    
                .Collection.Remove oVBComponent
            Case  100     
                    lCountLines = .CodeModule.CountOfLines
                    .CodeModule.DeleteLines  1 , lCountLines
            End Select
        End With
    Next
    Set oVBComponent = Nothing


    
    Set objVBProject = Nothing: Set objVBComponent = Nothing: Set objWindow = Nothing
    
        ActiveWorkbook.Save
    Application.Quit
В результате в получившемся файле удаляется код из ThisWorkbook, однако модули и прочие объекты, доставшиеся от Паблишера остаются. В случае если код запускается отдельно как макрос - все работает как надо и удаляет все объекты.

Может быть кто-то сталкивался с таким.
Заранее спасибо
...
Рейтинг: 0 / 0
Удаление объектов из рабочей книги
    #37422271
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пехотинец, и правильно. Вы первым делом удаляете код из книги, откуда ему выплоняться? Попробуйте:
Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
    Application.DisplayAlerts = False
    On Error Resume Next
    If Not Sheets("Data") Is Nothing Then Worksheets("Data").Delete
    If Not Sheets("XDO_HIDDEN") Is Nothing Then Worksheets("XDO_HIDDEN").Delete
    If Not Sheets("Old_Data.xdo") Is Nothing Then Worksheets("Old_Data.xdo").Delete
    Set objVBProject = ActiveWorkbook.VBProject
    For Each objWindow In objVBProject.VBE.Windows
        If objWindow.Type =  6  Then
            objWindow.Visible = True
            objWindow.SetFocus: Exit For
        End If
    Next
    SendKeys "~~", True: SendKeys "{ENTER}", True
    If ActiveWorkbook.VBProject.Protection =  1  Then
        MsgBox "VBProject Защищен" & vbCrLf
        Exit Sub
    End If
    For Each oVBComponent In ActiveWorkbook.VBProject.VBComponents
        On Error Resume Next
        With oVBComponent
            Select Case .Type
            Case  1 
                .Collection.Remove oVBComponent
            Case  2 
                .Collection.Remove oVBComponent
            Case  3 
                .Collection.Remove oVBComponent
            Case  100 
                If oVBComponent.Name <> "ЭтаКнига" Then
                    lCountLines = .CodeModule.CountOfLines
                    .CodeModule.DeleteLines  1 , lCountLines
                End If
            End Select
        End With
    Next
    With ActiveWorkbook.VBProject.VBComponents("ЭтаКнига")
        lCountLines = .CodeModule.CountOfLines
        .CodeModule.DeleteLines  1 , lCountLines
    End With
    Set oVBComponent = Nothing
    Set objVBProject = Nothing: Set objVBComponent = Nothing: Set objWindow = Nothing
    ActiveWorkbook.Save
    Application.Quit
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление объектов из рабочей книги
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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