首页 > 解决方案 > 我的代码没有遍历每一行,而是在我的范围内打印第一行

问题描述

我的最终目标是打印我的单元格管道分隔,所以为了做到这一点,我试图将每一行上的所有内容打印到每一行的单元格 AB 中。我正在尝试遍历每一行来这样做,但是我目前正在我的所有行中重复第一行代码,而不是单独打印每一行。

Sub print_misc()
Dim cell As Range
Dim lastRow As Long
Sheets("1099-Misc_Form_Template").Select
lastRow = Range("B" & Rows.Count).End(xlUp).row

For Each cell In Range("AB2:" & "AB" & lastRow)
cell.Value = Range("B2") & "|" & Range("C2") & "|" & Range("D2") & "|" & Range("E2") & "|" & Range("F2") & "|" & Range("G2") & "|" & Range("H2") & "|" & Range("I2") & "|" & Range("J2") & "|" & Range("L2") & "|" & Range("M2") & "|" & Range("N2") & "|" & Range("O2") & "|" & Range("P2") & "|" & Range("Q2") & "|" & Range("R2") & "|" & Range("S2") & "|" & Range("U2") & "|" & Range("V2") & "|" & Range("W2") & "|" & Range("X2") & "|" & Range("Y2") & "|" & Range("Z2") & "|" & Range("AA2")
Next
End Sub

AB 中的每个单元格显示该行中组合单元格的结果(管道分隔)。

电流输出:

在此处输入图像描述 预期输出:

在此处输入图像描述

标签: excelvba

解决方案


您不会为单元格的每次迭代增加行的值。每个人都指向第 2 行。

您也不应该使用 Select 直接引用工作表对象是不必要的。

Sub print_misc()
    Dim cell As Range
    Dim lastRow As Long
    dim iter as long
    with Sheets("1099-Misc_Form_Template")
        lastRow = .Range("B" & Rows.Count).End(xlUp).row
        iter = 2
        For Each cell In .Range("AB2:" & "AB" & lastRow)
            cell.Value = .Range("B" & iter) & "|" & .Range("C" & iter) & "|" & _
            .Range("D" & iter) & "|" & .Range("E" & iter) & "|" & _
            .Range("F" & iter) & "|" & .Range("G" & iter) & "|" & _
            .Range("H" & iter) & "|" & .Range("I" & iter) & "|" & _
            .Range("J" & iter) & "|" & .Range("L" & iter) & "|" & _
            .Range("M" & iter) & "|" & .Range("N" & iter) & "|" & _
            .Range("O" & iter) & "|" & .Range("P" & iter) & "|" & _
            .Range("Q" & iter) & "|" & .Range("R" & iter) & "|" & _
            .Range("S" & iter) & "|" & .Range("U" & iter) & "|" & _
            .Range("V" & iter) & "|" & .Range("W" & iter) & "|" & _
            .Range("X" & iter) & "|" & .Range("Y" & iter) & "|" & _
            .Range("Z" & iter) & "|" & .Range("AA" & iter)
            iter = iter + 1
         Next
     end with
End Sub

推荐阅读