IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   VB: удалить макрос (http://www.imho.ws/showthread.php?t=110097)

vuk 23.10.2006 13:01

VB: удалить макрос
 
есть макрос в Ворде который автоматически стартует при открытии документа ("Private Sub Document_Open()") выполняет некоторые действия и потом сохраняет новый документ.
Проблема в том, что в новом сохраненном файле макрос не нужен совершенно.
делаю следующее:
Код:

ThisDocument.SaveAs FileName:="F:\" + variable + ".doc"

 Application.OrganizerDelete Source:= _
        "F:\" + variable + ".doc" _
        , Name:="Имя макроса", Object:=wdOrganizerObjectProjectItems 'криво, я знаю :)

получаю:
Цитата:

"Run-time error 5936
элемент проекта не может быть удален"
подозреваю, это потому что работающий макрос сам себя удалить не может, но не создавать же новый файл с отдельным "удалятелем"...
задача максимум: удалить макрос в новом документе
задача минимум: убрать автостарт макроса в новом документе

Atiin 25.10.2006 14:10

Отвечу по старой памяти.
Если удерживать SHIFT при открытии, то макрос работать не будет...

Либо как вариант, отключить вообще макросы, потом отредактировать, потом включить.

vuk 25.10.2006 15:03

не вариант, автоматика нужна, для того и макрос

LightImage 26.10.2006 13:53

Удаление всего VBA-проекта для Excel, для Word думаю будет аналогично:
Код:

Private Sub DelProject()
' Полная очистка всего VBA-проекта
' Использовать осторожно!
' В Excel 2002 для того, чтобы эта функция выполнилась, надо
' зайти в меню Сервис/Макрос/Безопасность и на вкладке
' "Надежные источники" поставить галочку "Доверять доступ к Visual Basic Project"
Dim prj, x, MeVBComponent
Const vbext_ct_StdModule As Integer = 1
Const vbext_ct_ClassModule As Integer = 2
Const vbext_ct_MSForm As Integer = 3
Const vbext_ct_ActiveXDesigner As Integer = 11
Const vbext_ct_Document As Integer = 100
    Set prj = VBProject.VBComponents
    For Each x In prj
        Select Case x.Type
            Case vbext_ct_StdModule, vbext_ct_ClassModule, _
                vbext_ct_MSForm, vbext_ct_ActiveXDesigner
                prj.Remove x
            Case vbext_ct_Document
                If x.Name = Me.CodeName Then
                    Set MeVBComponent = x
                Else
                    x.CodeModule.DeleteLines 1, x.CodeModule.CountOfLines
                End If
        End Select
    Next
    If Not IsEmpty(MeVBComponent) Then
        MeVBComponent.CodeModule.DeleteLines 1, MeVBComponent.CodeModule.CountOfLines
    End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Пример использования функции очистки проекта
    If Me.FileFormat <> xlTemplate Then
        DelProject
    End If
End Sub

Про _автоматическое_ удаление макросов пока подсказать не могу.
P.S. Зато можно сохранить документ в формате RFT (в нем макросов не будет), потом, если нужно, этот rtf можно снова сохранить в doc:
Код:

ThisDocument.SaveAs FileName:="F:\" + variable + ".doc", FileFormat:=wdFormatRTF

vuk 27.10.2006 11:39

Set prj = VBProject.VBComponents -> object required
If x.Name = Me.CodeName Then -> Method or data member not found

с RTF задача минимум выполнена, псиб.

Atiin 27.10.2006 16:44

Цитата:

vuk:
Проблема в том, что в новом сохраненном файле макрос не нужен совершенно.
делаю следующее
Если только отключить макрос в другом документе, то можно просто сравнивать:

Допустим, начальный документ start.doc

Private Sub Document_Open()
If ActiveWindow.Document.Name = "start.doc" Then
MsgBox ("Начали!")
Else
Exit Sub
End If
End Sub

Вместо MsgBox макрос, который надо запустить.
Если не start.doc, то не запускается.


А там, наверно, и удалить лишнее можно...

demoniqus 05.11.2006 00:10

А про Excel можете написать, пожалуйста, как в нем удалить макрос программным путем?

EvroStandart 06.11.2006 12:46

А если создать из макроса новый документ и скопировать туда что нужно?


Часовой пояс GMT +4, время: 21:14.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.