Word Shape
объекты должны быть привязаны к позиции символа в документе Word.Они всегда будут появляться на странице, где находится символ привязки, и, если форматирование привязки не относится к странице, они будут перемещаться относительно страницы с символом привязки.
Особый случай возникает, когда документ«пустой» (одиночный абзац), поэтому помогает убедиться, что в документе содержится более одного символа.В приведенном ниже примере кода добавляется дополнительный абзац перед добавлением TextBox - к первому абзацу.
Я внес в код некоторые другие корректировки:
- Добавлено
On Error GoTo 0
так что появятся сообщения об ошибках.В противном случае отладка становится невозможной. - Удален
With
для приложения Word, поскольку он не требуется при использовании объектов Word - Объявлен и используется объект Word
Range
для вставки содержимого.Как и в Excel, лучше , а не работать с Selection
, когда это возможно. - Использовать объект
wrdDoc
, который вы объявляете и создаете, вместо ActiveDocument
.
Этот код отлично работал в моем тесте, но я, конечно, не могу воспроизвести всю вашу среду.
Dim wrdDoc As Object
Dim tmpDoc As Object
Dim WDoc As String
Dim myDoc As String
myDoc = "myTest"
WDoc = ThisDocument.Path & "\mydocument.docx"
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
On Error GoTo 0
If wdApp Is Nothing Then
' no current word application
Set wdApp = CreateObject("Word.application")
Set wrdDoc = wdApp.Documents.Open(WDoc)
wdApp.Visible = True
Else
' word app running
For Each tmpDoc In wdApp.Documents
If StrComp(tmpDoc.FullName, WDoc, vbTextCompare) = 0 Then
' this is your doc
Set wrdDoc = tmpDoc
Exit For
End If
Next
If wrdDoc Is Nothing Then
' not open
Set wrdDoc = wdApp.Documents.Open(WDoc)
End If
End If
wdApp.Visible = True
wrdApp.Activate
Dim i As Long
Dim objShape2 As Word.Shape
Dim rng As Word.Range
Set rng = wrdDoc.Content
rng.Delete
With rng
.InsertAfter vbCr
.Collapse wdCollapseStart
Set objShape2 = ActiveDocument.Shapes.AddTextbox _
(Orientation:=msoTextOrientationHorizontal, _
Left:=400, Top:=100, Width:=250, Height:=60, Anchor:=rng)
With objShape2
.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
.RelativeVerticalPosition = wdRelativeVerticalPositionMargin
.Left = wdShapeRight
.Top = wdShapeTop
.TextFrame.TextRange = "This is nice and shine" & vbCrLf & "222"
.TextFrame.TextRange.ParagraphFormat.Alignment = wdAlignParagraphLeft
End With
rng.Start = ActiveDocument.Content.End
For i = 1 To 40
.Text = i & vbCr
.Collapse wdCollapseEnd
Next i
End With