Неверный параметр при использовании objSelection.EndKey для перемещения в конец слова doc - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь переместить курсор в самый конец слова документа и вставить диаграмму. Но я получаю сообщение об ошибке «Bad Parameter» в этой строке «objSelection.EndKey Unit: = wdStory»

 Dim objWord As Object
 Set objWord = CreateObject("Word.Application")

 objWord.Documents.Open "N:\Template\Template.docx"
 objWord.Visible = True
 ThisWorkbook.Activate
...

тогда у меня было это в цикле:

Do While IsEmpty(Range("A1").Value) = False
...
Range("D:D,F:F").Select 'select date and value

Range("F1").Activate
ActiveSheet.Shapes.AddChart2(227, xlLine).Select

ActiveChart.ChartTitle.Text = subregion & " " & typ & " " & cate
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlCategory).Select
ActiveChart.PlotArea.Select
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).ApplyDataLabels
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.NumberFormat = "m/yyyy"
ActiveChart.Parent.Copy
objWord.Activate
objWord.Visible = True
Set objSelection = objWord.Selection                 
objSelection.EndKey Unit:=wdStory                                
objWord.Selection.Paste
...
loop

Тот же код работал в меньшем примере без цикла while. Теперь я пытаюсь включить код в цикл while, а строка oibjSelection.EndKey уничтожает макрос

мой меньший образец, который работал:

Sub Macro1()
'
' Macro1 Macro
'

'
    Dim objWord As Object
    Set objWord = CreateObject("Word.Application")
    'Change the directory path and file name to the location'of the document you want to open from Excel
    objWord.Documents.Open "N:\Template\Template.docx"
    objWord.Visible = True
    ThisWorkbook.Activate


    Range("A:A,C:C").Select
    Range("C1").Activate
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A:$A,Sheet1!$C:$C")
    ActiveChart.Axes(xlCategory).Select
    Selection.TickLabels.NumberFormat = "m/yyyy"

    ActiveChart.Parent.Copy
    objWord.Activate
    objWord.Visible = True
    Set objSelection = objWord.Selection

    objSelection.EndKey Unit:=wdStory

    objWord.Selection.Paste

End Sub

1 Ответ

1 голос
/ 27 марта 2019

Более надежный способ добраться до конца документа:

Dim rng as Object ' or Word.Range
Set rng = ActiveDocument.Content
rng.Collapse wdCollapseEnd
rng.Paste

Обратите внимание, однако, что если Word автоматизируется из другого приложения (например, в Excel) и , то в этом проекте нет ссылки на библиотеку объектов Word, это перечисление, специфичное для Word, использовать нельзя, поскольку VBA в другом приложении не сможет его распознать. В этом случае вместо перечисления wd должен быть указан числовой эквивалент. Итак:

rng.Collapsed 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...