有一段代码是我几乎不用 BASIC 编程就组装的,更不用说 VBA 了。但有任务,需要实现,而且,我也很想弄清楚。任务是这样的:代码中有一个数组,其中有三个值,这些值是宏应该按照它们在数组中出现的顺序插入到新创建的单元格中的值。也就是说,最终的视图应该是这样的:
- 我选择范围
- 我激活宏
- 我看到我自己的列,但在每个单元格之后,按照数组中列出的顺序添加了另外三个包含数据的单元格。我很高兴并继续深入研究 VBA。
代码:
Sub InsertRowsAtIntervalsWithValues()
'Updateby Extendoffice
Dim Rng As Range
Dim xInterval As Integer
Dim xRows As Integer
Dim xRowsCount As Integer
Dim xNum1 As Integer
Dim xNum2 As Integer
Dim WorkRng As Range
Dim xWs As Worksheet
Dim i As Integer
Dim j As Integer
Dim x As Integer
Dim dataArray() As Variant
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
xRowsCount = WorkRng.Rows.Count
xInterval = Application.InputBox("Enter row interval. ", xTitleId, 3, Type:=1)
xRows = 3
x = 2
j = 0
' Вставляем текстовые значения в массив dataArray
ReDim dataArray(xRows - 1) ' Размер массива равен количеству строк
dataArray(0) = "Зачет аванса"
dataArray(1) = "Гарантийное удержание"
dataArray(2) = "Итого к оплате"
' ... (остальной код макроса)
xNum1 = WorkRng.Row
xNum2 = xRows + xInterval
Set xWs = WorkRng.Parent
' Вставляем строки и заполняем их данными
For i = 1 To xRowsCount ' Изменили условие цикла
xWs.Range(xWs.Cells(xNum1, WorkRng.Column), xWs.Cells(xNum1 + xRows - 1, WorkRng.Column)).Select
Application.Selection.EntireRow.Insert
' Заполняем строки данными из dataArray
If j <= x Then ' Итерируем по элементам массива
xWs.Cells(xNum1 + j, WorkRng.Column).Value = dataArray(j)
j = j + 1
Else
j = 0
End If
xNum1 = xNum1 + xNum2
Next
End Sub