根据第一张工作表中列的非空单元格,将特定的行范围复制到另一张工作表的特定范围

时间:2019-07-13 19:42:43

标签: excel vba

您好,这是我的第一篇文章,对于给您带来的任何不便,请原谅,我也不喜欢使用VBA代码。我有工作表“ alvin”,如果列Q中有一个值,我想从其中获取某个行范围,然后将其粘贴到另一个名为“订单模板”的工作表中。我尝试了以下代码,但不是传输正确的行,而是根据Q单元格值传输行。例如,如果单元格Q5具有10,则代码将传输第10行而不是第5行...

Sub test_TRANSFER_to_Order_template()

Application.ScreenUpdating = False

Dim ws1 As Worksheet
Set ws1 = Worksheets("ALVIN")
Dim ws2 As Worksheet
Set ws2 = Worksheets("order template")
Dim q As Range
Dim LRow As Long
LRow = ws2.Range("b" & Rows.Count).End(xlUp).Row + 0
Dim m As Long

For Each q In Range("q4", Range("q1500").End(xlUp))
    If Not IsEmpty(q) Then
        LRow = LRow + 1
        ws2.Range("b" & LRow).Value = ws1.Range("l" & q).Value
        ws2.Range("c" & LRow).Value = ws1.Range("m" & q).Value
        ws2.Range("d" & LRow).Value = ws1.Range("n" & q).Value   'part number
        ws2.Range("e" & LRow).Value = ws1.Range("q" & q).Value
        ws2.Range("f" & LRow).Value = ws1.Range("r" & q).Value

        Application.ScreenUpdating = True
    End If
Next

End Sub

1 个答案:

答案 0 :(得分:0)

由于q被定义为Range,并且您试图获取行号,因此需要将其修改为q.Row

例如,

ws2.Range("b" & LRow).Value = ws1.Range("l" & q).Value

应该是:

ws2.Range("b" & LRow).Value = ws1.Range("l" & q.Row).Value

以此类推,其余的...


修改:为确保您检查的值正确,最好用Worksheets("ALVIN")工作表来限定范围。

修改后的循环

With ws1 ' <-- qualify the range with "ALVIN" worksheet
    For Each q In .Range("Q4", .Range("Q1500").End(xlUp))
        If Not IsEmpty(q) Then
            LRow = LRow + 1
            ws2.Range("b" & LRow).Value = .Range("l" & q.Row).Value
            ws2.Range("c" & LRow).Value = .Range("m" & q.Row).Value
            ws2.Range("d" & LRow).Value = .Range("n" & q.Row).Value   'part number
            ws2.Range("e" & LRow).Value = .Range("q" & q.Row).Value
            ws2.Range("f" & LRow).Value = .Range("r" & q.Row).Value

            Application.ScreenUpdating = True
        End If
    Next q
End With