Я пытаюсь написать программу на VBA, которая записывает некоторый текст в документ Word, и я хочу, чтобы, когда текст доходил до определенного расстояния с левой стороны документа, он печатал оставшиеся символы до следующая полная остановка, а затем начинается новая строка и вкладка для каждого символа в строке. Вот пример того, что должно произойти:
Код, который я ниже, работает правильно на первой странице слова, но на дополнительных страницах он начинает распечатайте случайным образом, и значение, указанное в objSelection.range.Information(WdInformation.wdHorizontalPositionRelativeToPage)
, кажется, является причиной проблемы.
Пример неправильного вывода, напечатанного в слово:
Несколько вещей, которые я заметил, пытаясь решить эту проблему:
Если я устанавливаю точку останова и пошагово выполняю код по одной строке за раз, все работает нормально, и правильный вывод печатается каждый раз.
Если у меня установлено слово app, чтобы оно не было видно с самого начала, оно перестает работать каждый раз после первой страницы
Если у меня установлено приложение word как видимое, оно работает правильно на каждой странице, пока я не нажму где-нибудь на экране за пределами слова приложения.
Вот мой код:
Sub print_to_word()
'**** SETTING UP WORD *****
Dim wordApp As Word.Application
On Error Resume Next
Set wordApp = GetObject(, "Word.Application")
If wordApp Is Nothing Then 'if word is not open then open it
Set wordApp = CreateObject("Word.Application")
End If
On Error GoTo 0 'reset error warnings
Dim objdoc As Document
Set objdoc = wordApp.Documents.Add 'Create a new word document
Dim objSelection As Selection
Set objSelection = wordApp.Selection 'Selection used to write text
wordApp.Visible = True
Dim wirecodes As String
wirecodes = "114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92.114.114*.98.98*.99.99*.123.123*.92*.92**.92"
For x = 1 To 5 'print 5 lots of wirecodes
Dim pos As Integer
objSelection.TypeText (Chr(9)) 'tab
For i = 1 To Len(wirecodes) 'loop through each character
pos = objSelection.range.Information(WdInformation.wdHorizontalPositionRelativeToPage)
If i <> 1 And pos > 215 Then 'if the cursor is past 215 then
Do While Mid(wirecodes, i - 1, 1) <> "." And i <> Len(wirecodes) + 1 'print out the remaining wirecode before starting a new line
objSelection.TypeText (Mid(wirecodes, i, 1))
i = i + 1
Loop
If i < Len(wirecodes) Then 'if its not the last wirecode print a newline and tab
objSelection.TypeText (Chr(11) + Chr(9))
End If
End If
objSelection.TypeText (Mid(wirecodes, i, 1)) 'just print the character
Next
objSelection.TypeText (Chr(10)) 'new line
Next
'close word
objdoc.Close
Set objdoc = Nothing
wordApp.Quit 'close word
Set wordApp = Nothing
End Sub
Я использую Microsoft Office 2010 на Windows 10 любая помощь будет принята с благодарностью. * 10 29 *