vba - Word VBA Selection.TypeText 和 Selection.InsertParagraph 以错误的顺序插入文本
问题描述
我正在尝试使用该Selection.TypeText
功能从 Excel 文件中打印某些列。不幸的是,下面的代码首先打印所有结果,然后打印所有段落。我想要结果:
result (tab) result (tab) result (tab) result (tab) result (paragraph)
结果的顺序是正确的,但是宏跳到数据末尾插入一段,然后“跳回来”填写更多数据。
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)
是一个段落标记,因此插入它会创建一个新段落。
结果:
推荐阅读
- python - Pandas 中的半标准差
- apache-spark - 由于内存不足,Spark 作业失败
- java - Spring Security 新方法级注解
- kotlin - kotlin 中的三元条件运算符
- google-api - 如何通过 Google API 生成 Google Ads 标签?
- vue.js - Vue和简单的商店
- javascript - 数组扩展合并对象数组
- java - 指定之前/之后 :: 运算符的通用方法引用类型
- excel - 验证 sheet2 中的前缀是否在 sheet1 中具有匹配值
- graph - 使用 Wolfram Mathematica 突出显示子图