Вместо использования 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)
- маркер абзаца, поэтому при его вставке создается новый абзац.
Результаты