Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 23:56   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию Повторное выполнение макроса

Пишу макрос на VBA в Excel. При повторном (сразу после первого) выполнении макроса открывается только документ Акт.doc и робота макроса прекращается. А если после первого выполнения закрыть Excel, открыть Excel и снова выполнить макрос – макрос работает корректно. В чем тут проблема?


Код:
Option Explicit
Sub Akty()
'
' Макрос3 Макрос
' Макрос записан 04.12.2008 Svitlana
'
Dim WordApp As Object
Dim akt As String
 
On Error GoTo handleCancel
Application.EnableCancelKey = xlErrorHandler
 akt = "D:\audit_2\data\ЛДЗ\0903\Акт"
    Set WordApp = CreateObject("Word.application")
    With WordApp
            .Documents.Open Filename:=akt
            .Visible = True
            .Selection.Find.ClearFormatting
            With .Selection.Find
                .ClearFormatting
                .ParagraphFormat.LineSpacing = LinesToPoints(0.06)
                .Text = ""
                .Forward = True
                .Wrap = wdFindContinue
            End With
            While .Selection.Find.Execute
                .Selection.Delete
                DoEvents
            Wend
            .Selection.Find.ClearFormatting
            .Selection.Find.Font.Size = 1
            .Selection.Find.Replacement.ClearFormatting
            With .Selection.Find
                .Text = ""
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindContinue
                .Format = True
            End With
            .Selection.Find.Execute Replace:=wdReplaceAll
            .Selection.WholeStory
            .Selection.Font.Name = "Times New Roman"
            .Selection.Font.Size = 12
        .ActiveDocument.Close False
    End With
    WordApp.Quit
    Set WordApp = Nothing
handleCancel:
    If Err = 18 Then
        WordApp.Quit
        Set WordApp = Nothing
    End If
End Sub
Вложения
Тип файла: zip Акт.zip (31.9 Кб, 16 просмотров)
Jaroslav вне форума Ответить с цитированием
Старый 24.07.2009, 07:38   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Несколько ошибок.
Поскольку вы выполняете этот макрос из Excel, не подключая библиотеку с объектами Word, то должны помнить, что Excel не знает, что такое LinesToPoints, wdReplaceAll, wdFindContinue и прочие вордовские штуки. Поэтому вместо LinesToPoints нужно писать WordApp.LinesToPoints, т.к. это встроенный метод вашего приложения Word. А вместо wdReplaceAll, wdFindContinue их числовые значения. Собственно это и вызывало у вас 18 ошибку: «Object doesn't support this property or method»
Кроме того, желательно полностью указывать имя файла, который открываете.
Ну и весь макрос, как мне кажется, можно сократить
Код:
Sub AktyNew()
'
' Макрос3 Макрос
' Макрос записан 04.12.2008 Svitlana
'
    Dim WordApp As Object
    Dim akt As String
    Dim wdDoc As Object
    On Error GoTo handleCancel
    Application.EnableCancelKey = xlErrorHandler
    akt = "D:\audit_2\data\ЛДЗ\0903\Акт"
    Set WordApp = CreateObject("Word.application")
    Set wdDoc = WordApp.Documents.Open(Filename:=akt)
    With wdDoc.Range.Find
      .ParagraphFormat.LineSpacing = WordApp.LinesToPoints(0.06)
      .Execute Replace:=2 'wdReplaceAll
    End With
    With wdDoc.Range.Find
      .Font.Size = 1
      .Execute Replace:=2 'wdReplaceAll
    End With
    wdDoc.Content.Font.Name = "Times New Roman"
    wdDoc.Content.Font.Size = 12
    wdDoc.Close True
    Set wdDoc = Nothing
    WordApp.Quit
    Set WordApp = Nothing
handleCancel:
    If Err = 18 Then
        WordApp.Quit
        Set WordApp = Nothing
    End If
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 25.07.2009, 00:34   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, Viter.alex. Буду пробовать
Jaroslav вне форума Ответить с цитированием
Старый 26.07.2009, 10:12   #4
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Viter.alex, дело в том, что библиотека Microsoft Word 11.0 Object Library у меня подключена. Если я запущу макрос из екслеля 1 раз - у меня все работает, а вот при повторном запуске макроса (ексель я не закрываю) открывается только документ Акт.doc и робота макроса прекращается. Я писал макрос в ворде, а потом перенес его в ексель
Jaroslav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как остановить выполнение макроса ? kzld Microsoft Office Excel 2 19.07.2009 13:16
Выполнение макроса при нажатии на Лист KinderX Microsoft Office Excel 7 01.07.2009 17:19
Как приостановить выполнение макроса на определенное время? Ranel Microsoft Office Excel 6 16.06.2009 09:27
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Выполнение макроса во всех листах Bu$ter Microsoft Office Excel 18 14.11.2008 14:34