Вот, накропал:
Sub ETW()
Dim SaveAsName As String
'On Error GoTo ErrorHandler
Set Ворд = GetObject(, "Word.Application")
'переход на следующую пустую строку
строка = Range("B3") + 14
With Ворд
бланк = .ActiveWindow.Caption
End With
Cells(строка, 2).Value = бланк
SaveAsName = ThisWorkbook.Path & "\ГОТОВЫЕ ПРОТОКОЛЫ\" & Range("H" & строка) & ".doc"
'Копируем заказчика
Ворд.Selection.WholeStory
'Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.Find.ClearFormatting
With Ворд
With Ворд.Selection.Find
.Text = "заказчик:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End With
Ворд.Selection.Find.Execute
'Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
'Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Ворд.Selection.Copy
ActiveSheet.Paste Destination:=Worksheets("Лист1").Range("C" & строка)
'Копируем объект
Ворд.Selection.WholeStory
'Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.Find.ClearFormatting
With Ворд
With Ворд.Selection.Find
.Text = "заказчик:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End With
Ворд.Selection.Find.Execute
'Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
'Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Ворд.Selection.Copy
ActiveSheet.Paste Destination:=Worksheets("Лист1").Range("D" & строка)
'Ищем в ворде текст ПРОТОКОЛ и заменяем номером протокола
With Ворд
With Ворд.Selection.Find
.Text = "ПРОТОКОЛ №"
.Replacement.Text = "ПРОТОКОЛ № " & Range("K" & строка)
.Wrap = 1
.Execute Replace:=2
End With
' Сохранение документа
.ActiveDocument.SaveAs Filename:=SaveAsName
End With
MsgBox " Открытый протокол зарегистрирован и сохранён в папке " & ThisWorkbook.Path & "\ГОТОВЫЕ ПРОТОКОЛЫ" & " под именем " & Range("H" & строка) & ".doc"
Exit Sub
ErrorHandler:
MsgBox "Нет открытого протокола-откройте протокол и нажмите кнопку ещё раз"
End Sub
трабла в подобных строках:
Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
-это куски вордовского макроса (выдрал макрорекордером), перемещение курсором по тексту для выделения нужного куска строки.
Так вот,екселевский дебагер находит в них ошибку, типа объект не может быть применён или типа того.
Ето действительно так, те ексель непереваривает такие (чисто вордовские) команды или я просто орфографию не соблюл?
Sub ETW()
Dim SaveAsName As String
'On Error GoTo ErrorHandler
Set Ворд = GetObject(, "Word.Application")
'переход на следующую пустую строку
строка = Range("B3") + 14
With Ворд
бланк = .ActiveWindow.Caption
End With
Cells(строка, 2).Value = бланк
SaveAsName = ThisWorkbook.Path & "\ГОТОВЫЕ ПРОТОКОЛЫ\" & Range("H" & строка) & ".doc"
'Копируем заказчика
Ворд.Selection.WholeStory
'Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.Find.ClearFormatting
With Ворд
With Ворд.Selection.Find
.Text = "заказчик:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End With
Ворд.Selection.Find.Execute
'Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
'Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Ворд.Selection.Copy
ActiveSheet.Paste Destination:=Worksheets("Лист1").Range("C" & строка)
'Копируем объект
Ворд.Selection.WholeStory
'Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.Find.ClearFormatting
With Ворд
With Ворд.Selection.Find
.Text = "заказчик:"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
End With
Ворд.Selection.Find.Execute
'Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
'Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
Ворд.Selection.Copy
ActiveSheet.Paste Destination:=Worksheets("Лист1").Range("D" & строка)
'Ищем в ворде текст ПРОТОКОЛ и заменяем номером протокола
With Ворд
With Ворд.Selection.Find
.Text = "ПРОТОКОЛ №"
.Replacement.Text = "ПРОТОКОЛ № " & Range("K" & строка)
.Wrap = 1
.Execute Replace:=2
End With
' Сохранение документа
.ActiveDocument.SaveAs Filename:=SaveAsName
End With
MsgBox " Открытый протокол зарегистрирован и сохранён в папке " & ThisWorkbook.Path & "\ГОТОВЫЕ ПРОТОКОЛЫ" & " под именем " & Range("H" & строка) & ".doc"
Exit Sub
ErrorHandler:
MsgBox "Нет открытого протокола-откройте протокол и нажмите кнопку ещё раз"
End Sub
трабла в подобных строках:
Ворд.Selection.MoveLeft Unit:=wdCharacter, Count:=1
Ворд.Selection.MoveRight Unit:=wdCharacter, Count:=1
Ворд.Selection.EndKey Unit:=wdLine, Extend:=wdExtend
-это куски вордовского макроса (выдрал макрорекордером), перемещение курсором по тексту для выделения нужного куска строки.
Так вот,екселевский дебагер находит в них ошибку, типа объект не может быть применён или типа того.
Ето действительно так, те ексель непереваривает такие (чисто вордовские) команды или я просто орфографию не соблюл?