Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос по созданию файла MS WORD. run-time error 462 - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Макрос по созданию файла MS WORD. run-time error 462
rvshestakov Дата: Четверг, 19.03.2015, 16:35 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
Добрый день всем!
Заметил странную особенность, если не сказать больше.
Если при выполнении макроса по созданию файла MS WORD в диспетчере задач WINDOWS нет процесса WINWORD.EXE - выполнение макроса прерывается ошибкой run-time error 462.
Причём при нажатии кнопки debug подсвечивается строка с форматированием листа создаваемого файла - ParagraphFormat.LeftIndent = CentimetersToPoints(0).

Если процесс WINWORD.EXE активен - код работает исправно.
Код макроса прикладывать пока не буду. Если потребуется, приложу.
Заранее спасибо!
 
Ответить
СообщениеДобрый день всем!
Заметил странную особенность, если не сказать больше.
Если при выполнении макроса по созданию файла MS WORD в диспетчере задач WINDOWS нет процесса WINWORD.EXE - выполнение макроса прерывается ошибкой run-time error 462.
Причём при нажатии кнопки debug подсвечивается строка с форматированием листа создаваемого файла - ParagraphFormat.LeftIndent = CentimetersToPoints(0).

Если процесс WINWORD.EXE активен - код работает исправно.
Код макроса прикладывать пока не буду. Если потребуется, приложу.
Заранее спасибо!

Автор - rvshestakov
Дата добавления - 19.03.2015 в 16:35
doober Дата: Четверг, 19.03.2015, 17:22 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 967
Репутация: 330 ±
Замечаний: 0% ±

Excel 2010
Код макроса прикладывать пока не буду

Здесь вам помогут без кода макроса.


 
Ответить
Сообщение
Код макроса прикладывать пока не буду

Здесь вам помогут без кода макроса.

Автор - doober
Дата добавления - 19.03.2015 в 17:22
rvshestakov Дата: Пятница, 20.03.2015, 06:36 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
doober, :D
просто в моём случае ошибка может быть очевидной, поэтому я подумал, что возможно и не в коде дело и моя ошибка лежит на поверхности :)

[vba]
Код
     Dim PathForFile As String
      Dim NameWRD As String
      Set AppWord = CreateObject("Word.Application")
      NameWRD = Sheets(1).Range("НомерЗакупки").Value & ". Проект решения " & Sheets(1).Range("ТипПрезентации").Value & ".docx"
      PathForFile$ = ThisWorkbook.Path   
      Set FSO = CreateObject("Scripting.FileSystemObject")
      If Not FSO.FolderExists(PathForFile$) Then
          FSO.CreateFolder (PathForFile$)    '
      End If
      Set FSO = Nothing

      AppWord.Documents.Add
      AppWord.Selection.Paste
      AppWord.Selection.WholeStory
      If AppWord.Selection.PageSetup.Orientation = wdOrientPortrait Then
          AppWord.Selection.PageSetup.Orientation = wdOrientLandscape
      Else
          AppWord.Selection.PageSetup.Orientation = wdOrientPortrait
      End If
      With AppWord.Selection.ParagraphFormat
          .SpaceBefore = 0
          .SpaceBeforeAuto = False
          .SpaceAfter = 0
          .SpaceAfterAuto = False
          .LineUnitBefore = 0
          .LineUnitAfter = 0
          .LeftIndent = CentimetersToPoints(0)
          .SpaceBeforeAuto = False
          .SpaceAfterAuto = False
          .SpaceBeforeAuto = False
          .SpaceAfterAuto = False
          .FirstLineIndent = CentimetersToPoints(0)
      End With
With AppWord.Selection
          .Font.Name = "Times New Roman"
'       .Font.Size = 14
          .PageSetup.Orientation = wdOrientLandscape
          .PageSetup.PageWidth = CentimetersToPoints(42)
          .PageSetup.PageHeight = CentimetersToPoints(29.7)
          .PageSetup.TopMargin = CentimetersToPoints(1)
          .PageSetup.BottomMargin = CentimetersToPoints(1)
          .PageSetup.LeftMargin = CentimetersToPoints(1.5)
          .PageSetup.RightMargin = CentimetersToPoints(1)
End With
      AppWord.Visible = True
     'AppWord.Documents.Add.Range.PasteExcelTable False, False, False
      AppWord.ActiveDocument.SaveAs2 PathForFile$ & "\" & NameWRD, _
                      12, False, "", True, "", False, False, False, False, False, 14
      AppWord.ActiveDocument.Close
      Application.CutCopyMode = False
      Set AppWord = Nothing
[/vba]


Сообщение отредактировал rvshestakov - Пятница, 20.03.2015, 06:41
 
Ответить
Сообщениеdoober, :D
просто в моём случае ошибка может быть очевидной, поэтому я подумал, что возможно и не в коде дело и моя ошибка лежит на поверхности :)

[vba]
Код
     Dim PathForFile As String
      Dim NameWRD As String
      Set AppWord = CreateObject("Word.Application")
      NameWRD = Sheets(1).Range("НомерЗакупки").Value & ". Проект решения " & Sheets(1).Range("ТипПрезентации").Value & ".docx"
      PathForFile$ = ThisWorkbook.Path   
      Set FSO = CreateObject("Scripting.FileSystemObject")
      If Not FSO.FolderExists(PathForFile$) Then
          FSO.CreateFolder (PathForFile$)    '
      End If
      Set FSO = Nothing

      AppWord.Documents.Add
      AppWord.Selection.Paste
      AppWord.Selection.WholeStory
      If AppWord.Selection.PageSetup.Orientation = wdOrientPortrait Then
          AppWord.Selection.PageSetup.Orientation = wdOrientLandscape
      Else
          AppWord.Selection.PageSetup.Orientation = wdOrientPortrait
      End If
      With AppWord.Selection.ParagraphFormat
          .SpaceBefore = 0
          .SpaceBeforeAuto = False
          .SpaceAfter = 0
          .SpaceAfterAuto = False
          .LineUnitBefore = 0
          .LineUnitAfter = 0
          .LeftIndent = CentimetersToPoints(0)
          .SpaceBeforeAuto = False
          .SpaceAfterAuto = False
          .SpaceBeforeAuto = False
          .SpaceAfterAuto = False
          .FirstLineIndent = CentimetersToPoints(0)
      End With
With AppWord.Selection
          .Font.Name = "Times New Roman"
'       .Font.Size = 14
          .PageSetup.Orientation = wdOrientLandscape
          .PageSetup.PageWidth = CentimetersToPoints(42)
          .PageSetup.PageHeight = CentimetersToPoints(29.7)
          .PageSetup.TopMargin = CentimetersToPoints(1)
          .PageSetup.BottomMargin = CentimetersToPoints(1)
          .PageSetup.LeftMargin = CentimetersToPoints(1.5)
          .PageSetup.RightMargin = CentimetersToPoints(1)
End With
      AppWord.Visible = True
     'AppWord.Documents.Add.Range.PasteExcelTable False, False, False
      AppWord.ActiveDocument.SaveAs2 PathForFile$ & "\" & NameWRD, _
                      12, False, "", True, "", False, False, False, False, False, 14
      AppWord.ActiveDocument.Close
      Application.CutCopyMode = False
      Set AppWord = Nothing
[/vba]

Автор - rvshestakov
Дата добавления - 20.03.2015 в 06:36
rvshestakov Дата: Пятница, 20.03.2015, 06:42 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
Ужас, что происходит с форматированием блока (/code)? <_<
на предпросмотре, всё корректно отображается.
[moder]Потому что для кода надо использовать [vba][code] (кнопка #)[/moder]
 
Ответить
СообщениеУжас, что происходит с форматированием блока (/code)? <_<
на предпросмотре, всё корректно отображается.
[moder]Потому что для кода надо использовать [vba][code] (кнопка #)[/moder]

Автор - rvshestakov
Дата добавления - 20.03.2015 в 06:42
Manyasha Дата: Пятница, 20.03.2015, 07:39 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 901 ±
Замечаний: 0% ±

Excel 2010, 2016
rvshestakov, нужно сначало проверить, запущено ли приложение word:[vba]
Код
   On Error Resume Next
     Set AppWord = GetObject(, "Word.Application")
     If Err <> 0 Then
           Set AppWord = CreateObject("Word.Application")
     End If
     On Error GoTo 0
[/vba]
А потом уже можно работать с файлами[vba]
Код
   AppWord.Documents.Add
[/vba]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Пятница, 20.03.2015, 07:40
 
Ответить
Сообщениеrvshestakov, нужно сначало проверить, запущено ли приложение word:[vba]
Код
   On Error Resume Next
     Set AppWord = GetObject(, "Word.Application")
     If Err <> 0 Then
           Set AppWord = CreateObject("Word.Application")
     End If
     On Error GoTo 0
[/vba]
А потом уже можно работать с файлами[vba]
Код
   AppWord.Documents.Add
[/vba]

Автор - Manyasha
Дата добавления - 20.03.2015 в 07:39
rvshestakov Дата: Пятница, 20.03.2015, 09:51 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
Manyasha, добавил. не помогло :(
 
Ответить
СообщениеManyasha, добавил. не помогло :(

Автор - rvshestakov
Дата добавления - 20.03.2015 в 09:51
rvshestakov Дата: Пятница, 20.03.2015, 10:01 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
комментарии с саппорта Майкрософта:
Visual Basic устанавливает ссылку на Excel из-за наличия в коде строки, вызывающей объект, метод или свойство Excel без квалификации элемента с помощью объектной переменной Excel. Visual Basic не освобождает эту ссылку до завершения работы программы. Эта ошибочная ссылка конфликтует с кодом автоматизации, если этот код выполняется более одного раза.
Чтобы устранить эту проблему, измените код таким образом, чтобы каждый вызов объекта, метода или свойства Excel квалифицировался соответствующей объектной переменной.

тоже не помогло.
 
Ответить
Сообщениекомментарии с саппорта Майкрософта:
Visual Basic устанавливает ссылку на Excel из-за наличия в коде строки, вызывающей объект, метод или свойство Excel без квалификации элемента с помощью объектной переменной Excel. Visual Basic не освобождает эту ссылку до завершения работы программы. Эта ошибочная ссылка конфликтует с кодом автоматизации, если этот код выполняется более одного раза.
Чтобы устранить эту проблему, измените код таким образом, чтобы каждый вызов объекта, метода или свойства Excel квалифицировался соответствующей объектной переменной.

тоже не помогло.

Автор - rvshestakov
Дата добавления - 20.03.2015 в 10:01
Manyasha Дата: Пятница, 20.03.2015, 10:59 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 901 ±
Замечаний: 0% ±

Excel 2010, 2016
rvshestakov, Вы же сами решение и описали:
измените код таким образом, чтобы каждый вызов объекта, метода или свойства Excel квалифицировался соответствующей объектной переменной.

Везде, где вызываются методы, привяжите их к объекту ворда, например
[vba]
Код
    With AppWord.Selection.ParagraphFormat
           .SpaceBefore = 0
           .SpaceBeforeAuto = False
           .SpaceAfter = 0
           .SpaceAfterAuto = False
           .LineUnitBefore = 0
           .LineUnitAfter = 0
           .LeftIndent = AppWord.CentimetersToPoints(0)'изменила
           .SpaceBeforeAuto = False
           .SpaceAfterAuto = False
           .SpaceBeforeAuto = False
           .SpaceAfterAuto = False
           .FirstLineIndent = AppWord.CentimetersToPoints(0)'изменила
       End With
[/vba]
Аналогично и в других строчках. Не [vba]
Код
.PageSetup.PageWidth = CentimetersToPoints(42)
[/vba]а вот так[vba]
Код
.PageSetup.PageWidth = AppWord.CentimetersToPoints(42)
[/vba]

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


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Пятница, 20.03.2015, 11:01
 
Ответить
Сообщениеrvshestakov, Вы же сами решение и описали:
измените код таким образом, чтобы каждый вызов объекта, метода или свойства Excel квалифицировался соответствующей объектной переменной.

Везде, где вызываются методы, привяжите их к объекту ворда, например
[vba]
Код
    With AppWord.Selection.ParagraphFormat
           .SpaceBefore = 0
           .SpaceBeforeAuto = False
           .SpaceAfter = 0
           .SpaceAfterAuto = False
           .LineUnitBefore = 0
           .LineUnitAfter = 0
           .LeftIndent = AppWord.CentimetersToPoints(0)'изменила
           .SpaceBeforeAuto = False
           .SpaceAfterAuto = False
           .SpaceBeforeAuto = False
           .SpaceAfterAuto = False
           .FirstLineIndent = AppWord.CentimetersToPoints(0)'изменила
       End With
[/vba]
Аналогично и в других строчках. Не [vba]
Код
.PageSetup.PageWidth = CentimetersToPoints(42)
[/vba]а вот так[vba]
Код
.PageSetup.PageWidth = AppWord.CentimetersToPoints(42)
[/vba]

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

Автор - Manyasha
Дата добавления - 20.03.2015 в 10:59
rvshestakov Дата: Пятница, 20.03.2015, 12:21 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 56
Репутация: 6 ±
Замечаний: 0% ±

Excel 2010
Manyasha, спасибо за помощь. всё в порядке теперь (пока что) :)
Мой случай заболевания - "смотрю в книгу, вижу фигу".
 
Ответить
СообщениеManyasha, спасибо за помощь. всё в порядке теперь (пока что) :)
Мой случай заболевания - "смотрю в книгу, вижу фигу".

Автор - rvshestakov
Дата добавления - 20.03.2015 в 12:21
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!