| imho.ws |
![]() |
|
|
|
# 1 | |
|
Member
Регистрация: 12.04.2003
Сообщения: 213
![]() ![]() |
VB: удалить макрос
есть макрос в Ворде который автоматически стартует при открытии документа ("Private Sub Document_Open()") выполняет некоторые действия и потом сохраняет новый документ.
Проблема в том, что в новом сохраненном файле макрос не нужен совершенно. делаю следующее: Код:
ThisDocument.SaveAs FileName:="F:\" + variable + ".doc"
Application.OrganizerDelete Source:= _
"F:\" + variable + ".doc" _
, Name:="Имя макроса", Object:=wdOrganizerObjectProjectItems 'криво, я знаю :)
Цитата:
задача максимум: удалить макрос в новом документе задача минимум: убрать автостарт макроса в новом документе
__________________
Чтобы сделать что-то невозможное, надо не знать, что это - невозможно. |
|
|
|
|
|
# 4 |
|
Junior Member
Регистрация: 16.10.2002
Адрес: Россия-матушка
Пол: Male
Сообщения: 96
![]() ![]() |
Удаление всего 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. |
|
|
|
|
# 5 |
|
Member
Регистрация: 12.04.2003
Сообщения: 213
![]() ![]() |
Set prj = VBProject.VBComponents -> object required
If x.Name = Me.CodeName Then -> Method or data member not found с RTF задача минимум выполнена, псиб.
__________________
Чтобы сделать что-то невозможное, надо не знать, что это - невозможно. |
|
|
|
|
# 6 | |
|
Guest
Сообщения: n/a
|
Цитата:
Допустим, начальный документ 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. |
|