imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 23.10.2006, 13:01     # 1
vuk
Member
 
Регистрация: 12.04.2003
Сообщения: 213

vuk Известность не заставит себя ждатьvuk Известность не заставит себя ждать
VB: удалить макрос

есть макрос в Ворде который автоматически стартует при открытии документа ("Private Sub Document_Open()") выполняет некоторые действия и потом сохраняет новый документ.
Проблема в том, что в новом сохраненном файле макрос не нужен совершенно.
делаю следующее:
Код:
ThisDocument.SaveAs FileName:="F:\" + variable + ".doc"

 Application.OrganizerDelete Source:= _
        "F:\" + variable + ".doc" _
        , Name:="Имя макроса", Object:=wdOrganizerObjectProjectItems 'криво, я знаю :)
получаю:
Цитата:
"Run-time error 5936
элемент проекта не может быть удален"
подозреваю, это потому что работающий макрос сам себя удалить не может, но не создавать же новый файл с отдельным "удалятелем"...
задача максимум: удалить макрос в новом документе
задача минимум: убрать автостарт макроса в новом документе
__________________
Чтобы сделать что-то невозможное, надо не знать, что это - невозможно.
vuk вне форума  
Старый 25.10.2006, 14:10     # 2
Atiin
Guest
 
Сообщения: n/a

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

Либо как вариант, отключить вообще макросы, потом отредактировать, потом включить.
 
Старый 25.10.2006, 15:03     # 3
vuk
Member
 
Регистрация: 12.04.2003
Сообщения: 213

vuk Известность не заставит себя ждатьvuk Известность не заставит себя ждать
не вариант, автоматика нужна, для того и макрос
__________________
Чтобы сделать что-то невозможное, надо не знать, что это - невозможно.
vuk вне форума  
Старый 26.10.2006, 13:53     # 4
LightImage
Junior Member
 
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96

LightImage Нимб уже пробиваетсяLightImage Нимб уже пробивается
Удаление всего 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
__________________
1 миллибайт = 1/1024 байта

Последний раз редактировалось LightImage; 26.10.2006 в 14:00.
LightImage вне форума  
Старый 27.10.2006, 11:39     # 5
vuk
Member
 
Регистрация: 12.04.2003
Сообщения: 213

vuk Известность не заставит себя ждатьvuk Известность не заставит себя ждать
Set prj = VBProject.VBComponents -> object required
If x.Name = Me.CodeName Then -> Method or data member not found

с RTF задача минимум выполнена, псиб.
__________________
Чтобы сделать что-то невозможное, надо не знать, что это - невозможно.
vuk вне форума  
Старый 27.10.2006, 16:44     # 6
Atiin
Guest
 
Сообщения: n/a

Цитата:
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, то не запускается.


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

Последний раз редактировалось Atiin; 27.10.2006 в 16:47.
 
Старый 05.11.2006, 00:10     # 7
demoniqus
Guest
 
Сообщения: n/a

А про Excel можете написать, пожалуйста, как в нем удалить макрос программным путем?
 
Старый 06.11.2006, 12:46     # 8
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
А если создать из макроса новый документ и скопировать туда что нужно?
EvroStandart вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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