Lastrow在Excel VBA中上升而不是下降

时间:2012-07-06 19:27:30

标签: excel-vba vba excel

这是我的代码,有点关闭,虽然它确实有效,但不是我想要的方式。

Option Explicit

Sub ONJL()
    Dim lastrow As Long
    Dim wsPAR As Worksheet 'PAERTO
    Dim wsRD As Worksheet 'Raw Data
    Dim wsTEM As Worksheet 'Archive

    Set wsPAR = Sheets("PAERTO")
    Set wsRD = Sheets("Raw Data")
    Set wsTEM = Sheets("Template")

    With wsPAR
            Application.ScreenUpdating = False
            wsPAR.Range("B23:I300").Clear
            lastrow = wsRD.Range("B3").Row + 23
            wsTEM.Range("A23:H23").Copy wsPAR.Range("B23:I" & lastrow)
            .Range("F4").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K2),--(I23:I" & lastrow & "<='Raw Data'!K3))"
            .Range("F5").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K3),--(I23:I" & lastrow & "<='Raw Data'!K4))"
            .Range("F6").Formula = "=SUMPRODUCT(--(I23:I" & lastrow & ">='Raw Data'!K4),--(I23:I" & lastrow & "<='Raw Data'!K5))"

            lastrow = wsRD.Range("E3").Row + 23
            wsTEM.Range("I23:U23").Copy wsPAR.Range("M23:Y" & lastrow)


            Application.ScreenUpdating = True

    End With

End Sub

现在B3是7,E3是25.

我认为如果我输入+ 23因为数据从23开始,并且应该在lastrow等于的地方结束,所以技术上应该是I30和Y48,但事实并非如此。

有人可以给我一个想法吗?

1 个答案:

答案 0 :(得分:3)

使用 .Value

替换下面两行中的 .Row
lastrow = wsRD.Range("B3").Row + 23
lastrow = wsRD.Range("E3").Row + 23

你基本上要求VBA做的是在两种情况下得到范围的行号3,并将其添加到23.如果你想获得每个范围内的值并添加23,你需要使用.Value属性。