Страницы: 1
RSS
Ошибка 462 при повторном запуске макроса
 
Все доброй ночи!  
 
Очень извиняюсь, что касаюсь избитой темы (наверное), но что-то я не смог найти ответа в таком форуме, хотя регулярно пользуюсь подсказками пользователей. До сей поры хватало.\  
 
Суть вот в чем:  
Я хочу из существующей таблицы Excel выдернуть отсортированные значения и вставить их в Word. Казалось бы, что может быть проще:  
 
Sub Import2()  
'  
'  
 
'  
   Mesyats = UserForm1.ComboBox1.Value  
   'Mesyats = "Ноябрь"  
   Dim iLastRow As Long  
   Excel.Sheets("123").Select  
   iLastRow = Cells(Rows.Count, 1).End(xlUp).Row  
   Excel.ActiveSheet.ListObjects("Таблица 3").Range.AutoFilter Field:=1, Criteria1:=Mesyats  
   Excel.Range("B3:D" + Right((Str(iLastRow)), (Len(Str(iLastRow) - 1)))).Select  
   Excel.Selection.Copy  
   Excel.Sheets("123").Select  
   On Error GoTo ErrStartWord  
   Dim Wda As Word.Application  
   Set Wda = GetObject(, "Word.Application")  
   Set Wda = Nothing  
   'If Tasks.Exists("Microsoft Word") Then  
   'End If  
   'Word.Application.Documents.Item  
   Word.Documents.Open Filename:="c:\OLS Reports\Form 2.docx"  
   Word.Application.Activate  
   Word.Selection.StartOf Unit:=wdStory, Extend:=wdMove  
   Word.Selection.MoveDown Unit:=wdLine, Count:=9  
   Word.Selection.MoveLeft Unit:=wdCharacter, Count:=17  
   Word.Selection.Delete Unit:=wdCharacter, Count:=7  
   Word.Selection.TypeText (Mesyats)  
   Word.Selection.MoveEnd  
   Word.Selection.MoveDown Unit:=wdLine, Count:=6  
   Word.Selection.MoveLeft Unit:=wdCharacter, Count:=1  
   WordBasic.EditPaste2  
   'Word.Application.Dialogs(wdDialogFileSaveAs).Show  
   'Word.Documents.Close  
ErrStartWord:  
   If Err.Number = 429 Then ' Word не запущен  
    Dim appWD As Object  
    Set appWD = CreateObject("Word.Application")  
    appWD.Visible = True  
    Resume Next  
   End If  
     If Err.Number = 0 Then  
      'MsgBox "Success!"  
     Else: MsgBox Err.Description & " " & Err.Number, vblnformation  
     End If  
End Sub  
 
Однако не тут-то было (((    
 
При повторном запуске скрипт срубается на строке "Word.Documents.Open Filename:="c:\OLS Reports\Form 2.docx""  
 
с сообщением "The remote server machine does not exist or is unavailable 462", как и положено обработчику ошибок в теле сркипта. Надо полностью закрыть Excel и заново в него зайти. Тогда вновь все заработает, на 1 раз :/ Я так думаю, что скрипт по завершению не очищает какие-то переменные, и нужно выйти из Excel.    
 
Очень надо сделать, работа горит. Сижу уже 4-й час, и ничего не могу поделать ((((  
 
И да. Использую Word 2007 и Excel 2007. Как думаете, в 2003 офисе такой проблемы не возникнет? А то будет жаль перставлять из-за этого.....    
 
Все харанее спасибо.
 
Может стоит как-то так делать?  
Dim Wda As Object  
Set Wda = CreateObject("Word.Application")  
'Set Wda = Nothing - не понял, зачем этой переменной что-то присваивать, чтоб затем сразу очистить??????  
Wda.Documents.Open Filename:="c:\OLS Reports\Form 2.docx"  
Wda.Application.Activate  
Wda.Selection.StartOf Unit:=wdStory, Extend:=wdMove  
Wda.Selection.MoveDown Unit:=wdLine, Count:=9  
Wda.Selection.MoveLeft Unit:=wdCharacter, Count:=17  
Wda.Selection.Delete Unit:=wdCharacter, Count:=7  
Wda.Selection.TypeText (Mesyats)  
Wda.Selection.MoveEnd  
Wda.Selection.MoveDown Unit:=wdLine, Count:=6  
Wda.Selection.MoveLeft Unit:=wdCharacter, Count:=1  
WordBasic.EditPaste2 '- что это? - WordBasic  
'Word.Application.Dialogs(wdDialogFileSaveAs).Show  
Wda.Quit  
Set Wda = Nothing
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Эммм...  
 
т.к. у пользователя может быть открыто много документов WORD, я бы хотел открыть существующий файл, после чего внести туда все необходимые значения.    
команда Бейсика тут нужна для корректной вставки ячеек из буфера (сначала selection.copy, затем вот этот вот WordBasic.EditPaste2, который был вызван при записи макроса: правой кнопкой на ячейке таблицы - вставить ячейки)    
 
Set Wda = GetObject("Word.Application")  
Set Wda = Nothing  
Конструкция была придумана для проверки, запущен ли Word. При ошибке - мы запустим Word, в противном случае - продолжим с открытием файла.  
Читая Интернеты, я видел упоминание, что 462 ошибка может возникнуть, если не очистить переменную такого типа. И, т.к. она мне больше не нужна, я ее следующим шагом очищаю. Но это, к несчастью, все равно не помогает.  
 
Ваша конструкция была изначально, просто я пытаюсь облегчить жизнь пользователя. Запускать Word всякий раз при вызове макроса - как мне кажется, нехорошо. 10 раз вызовем - 10 приложений запустится.
 
{quote}{login=Spaze}{date=16.11.2009 12:10}{thema=}{post}10 раз вызовем - 10 приложений запустится.{/post}{/quote}Так этой строкой мы созданное приложение закрываем польностью  
Wda.Quit
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Угу, т.е. закрываем именно созданное приложение?    
 
Если так - попозже, дома вечером попробую. Просто я привык докапываться до сути, отчего не работает так, как сделал я.    
 
З.Ы. пришло начальство - сказало, что форма отчета меняется. Возможно, в Ворд ничего не нужно вставлять, и обойдемся Excel )) Ждем окончания колебаний руководства )  
 
В любом случае - спасибо за оперативный ответ.
 
Большое человеческое спасибо :)  
 
А вот еще вопрос.  
 
В форме, куда я вставляю данные (она в WORD) в таблице нужно вставить порядковые номера строк в зависимости от того, сколько мы их туда вставляем.    
 
Может, есть способ изящно и просто решить эту проблему? Файлы с тем, что сейчас сделал - прилагаю.
Страницы: 1
Читают тему
Наверх