0

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

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,但事实并非如此。

有人可以告诉我为什么吗?

4

1 回答 1

3

将下面两行中的.Row替换为.Value

lastrow = wsRD.Range("B3").Row + 23
lastrow = wsRD.Range("E3").Row + 23

您实际上要求 VBA 做的是在两种情况下获取范围的行号 3 并将其添加到 23。如果要获取每个范围内的值并将其添加 23,则需要使用该.Value属性.

于 2012-07-06T19:36:12.077 回答