Word VBA Selection.TypeText 和 Selection.InsertParagraph 以错误的顺序插入文本
Word VBA Selection.TypeText and Selection.InsertParagraph inserting text in the wrong order
我正在尝试使用 Selection.TypeText
函数打印 Excel 文件中的某些列。
不幸的是,下面的代码首先打印所有的结果,然后是所有的段落。我想要结果:
result (tab) result (tab) result (tab) result (tab) result (paragraph)
结果顺序是正确的,但是宏跳到数据末尾插入一段,然后"jumps back"填充更多数据
noInt
和 noData
是两个预先填充的变量,并且正在工作。
For i = 2 To noInt
For k = 2 To noData
If exWb.Sheets("Table1").Cells(k, 1) = exWb.Sheets("Table2").Cells(i, 1) Then
For j = 5 to 9
Selection.TypeText exWb.Sheets("Table1").Cells(k, j) & vbTab
Next j
Selection.InsertParagraph
End If
Next k
Next i
不使用 Selection
,而是使用 Range
。然后您可以使用 Range.InsertAfter
可靠地附加文本。下面的例子是在 Word VBA;我无法将它们放在您的 Excel 上下文中,因为我没有所有详细信息。
你的代码的 MCVE(不工作)
Option Explicit
Option Base 0
' A function just to display i, k, and j in a comprehensible manner
Public Function ijk(i As Long, j As Long, k As Long)
ijk = "[I: " & CStr(i) & "; K: " & CStr(k) & "; J: " & CStr(j) & "]"
End Function
Public Sub NotWorking()
Dim noInt As Long
noInt = 3
Dim noData As Long
noData = 4
Dim i As Long, k As Long, j As Long
For i = 2 To noInt
For k = 2 To noData
For j = 5 To 9
Selection.TypeText ijk(i, j, k) & vbTab
Next j
Selection.InsertParagraph
Next k
Next i
End Sub
一个工作版本
将上面的 Sub NotWorking
替换为:
Public Sub Working()
Dim noInt As Long
noInt = 3
Dim noData As Long
noData = 4
Dim i As Long, k As Long, j As Long
' *** Create a Range to refer to wherever the Selection is now
Dim rDest As Range
Set rDest = Selection.Range.Duplicate
For i = 2 To noInt
For k = 2 To noData
For j = 5 To 9
rDest.InsertAfter ijk(i, j, k) & vbTab ' ***
Next j
rDest.InsertAfter Chr(13) ' ***
Next k
Next i
End Sub
Chr(13)
是一个段落标记,所以插入它会创建一个新段落。
结果:
我正在尝试使用 Selection.TypeText
函数打印 Excel 文件中的某些列。
不幸的是,下面的代码首先打印所有的结果,然后是所有的段落。我想要结果:
result (tab) result (tab) result (tab) result (tab) result (paragraph)
结果顺序是正确的,但是宏跳到数据末尾插入一段,然后"jumps back"填充更多数据
noInt
和 noData
是两个预先填充的变量,并且正在工作。
For i = 2 To noInt
For k = 2 To noData
If exWb.Sheets("Table1").Cells(k, 1) = exWb.Sheets("Table2").Cells(i, 1) Then
For j = 5 to 9
Selection.TypeText exWb.Sheets("Table1").Cells(k, j) & vbTab
Next j
Selection.InsertParagraph
End If
Next k
Next i
不使用 Selection
,而是使用 Range
。然后您可以使用 Range.InsertAfter
可靠地附加文本。下面的例子是在 Word VBA;我无法将它们放在您的 Excel 上下文中,因为我没有所有详细信息。
你的代码的 MCVE(不工作)
Option Explicit
Option Base 0
' A function just to display i, k, and j in a comprehensible manner
Public Function ijk(i As Long, j As Long, k As Long)
ijk = "[I: " & CStr(i) & "; K: " & CStr(k) & "; J: " & CStr(j) & "]"
End Function
Public Sub NotWorking()
Dim noInt As Long
noInt = 3
Dim noData As Long
noData = 4
Dim i As Long, k As Long, j As Long
For i = 2 To noInt
For k = 2 To noData
For j = 5 To 9
Selection.TypeText ijk(i, j, k) & vbTab
Next j
Selection.InsertParagraph
Next k
Next i
End Sub
一个工作版本
将上面的 Sub NotWorking
替换为:
Public Sub Working()
Dim noInt As Long
noInt = 3
Dim noData As Long
noData = 4
Dim i As Long, k As Long, j As Long
' *** Create a Range to refer to wherever the Selection is now
Dim rDest As Range
Set rDest = Selection.Range.Duplicate
For i = 2 To noInt
For k = 2 To noData
For j = 5 To 9
rDest.InsertAfter ijk(i, j, k) & vbTab ' ***
Next j
rDest.InsertAfter Chr(13) ' ***
Next k
Next i
End Sub
Chr(13)
是一个段落标记,所以插入它会创建一个新段落。
结果: