VBA在第一页上给出所有结果,而不是在相关页上?

VBA在第一页上给出所有结果,而不是在相关页上?,vba,excel,Vba,Excel,我很快就要完成我开始要做的事情了。我基本上只需要将工作簿所有工作表中的每一列的总和直接放在列的末尾。我的问题是答案都出现在第一张纸上,而不是相关的纸上。我不知道我需要改变什么 这就是我的工作 Private Sub Workbook_Open() Dim ws As Worksheet Dim Lastrow As Long, Lastcol As Long For Each ws In ThisWorkbook.Worksheets Lastrow = ws.Cells.Find

我很快就要完成我开始要做的事情了。我基本上只需要将工作簿所有工作表中的每一列的总和直接放在列的末尾。我的问题是答案都出现在第一张纸上,而不是相关的纸上。我不知道我需要改变什么

这就是我的工作

Private Sub Workbook_Open()

Dim ws As Worksheet
Dim Lastrow As Long, Lastcol As Long

For Each ws In ThisWorkbook.Worksheets

    Lastrow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Lastcol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    Range(Cells(Lastrow, "D"), Cells(Lastrow, Lastcol)).FormulaR1C1 = "=SUM(R1C:R" & Lastrow - 1 & "C)"

Next ws

End Sub
替换RangeCellsStrow,D。。。借

由于未指定工作表,因此在活动工作表中解释了范围。

替换RangeCellsStrow,D。。。借

由于未指定工作表,因此在活动工作表中解释了范围。

请尝试以下操作:

Private Sub Workbook_Open()

Dim ws As Worksheet
Dim Lastrow As Long, Lastcol As Long

For Each ws In ThisWorkbook.Worksheets

    Lastrow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Lastcol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    ws.Activate

    Range(Cells(Lastrow, "D"), Cells(Lastrow, Lastcol)).FormulaR1C1 = "=SUM(R1C:R" & Lastrow - 1 & "C)"

Next ws

End Sub
或者完成@John Coleman的回答

Sub test()
    Dim ws As Worksheet
    Dim Lastrow As Long, Lastcol As Long

    For Each ws In ThisWorkbook.Sheets

        Lastrow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
        Lastcol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

        ws.Range(ws.Cells(Lastrow, "A"), ws.Cells(Lastrow, Lastcol)).FormulaR1C1 = "=SUM(R1C:R" & Lastrow - 1 & "C)"

    Next ws
End Sub
试试这个:

Private Sub Workbook_Open()

Dim ws As Worksheet
Dim Lastrow As Long, Lastcol As Long

For Each ws In ThisWorkbook.Worksheets

    Lastrow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
    Lastcol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    ws.Activate

    Range(Cells(Lastrow, "D"), Cells(Lastrow, Lastcol)).FormulaR1C1 = "=SUM(R1C:R" & Lastrow - 1 & "C)"

Next ws

End Sub
或者完成@John Coleman的回答

Sub test()
    Dim ws As Worksheet
    Dim Lastrow As Long, Lastcol As Long

    For Each ws In ThisWorkbook.Sheets

        Lastrow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
        Lastcol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

        ws.Range(ws.Cells(Lastrow, "A"), ws.Cells(Lastrow, Lastcol)).FormulaR1C1 = "=SUM(R1C:R" & Lastrow - 1 & "C)"

    Next ws
End Sub

我需要工作簿每一页每一列末尾的每一列的总和。对不起,如果我措辞不当。我需要工作簿每一页每一列末尾的每一列的总和。对不起,如果我用词不当。单元格也是对活动表的隐式引用。。。但是,是的,这阻止了宏在第一张纸上输入下面几张纸的总数,但是它只找到了第一张纸的总数,而没有找到其余的。有什么建议吗?单元格也是对活动表的隐式引用。。。但是,是的,这阻止了宏在第一张纸上输入下面几张纸的总数,但是它只找到了第一张纸的总数,而没有找到其余的。有什么建议吗?这也行-但它可能会触发一些您不希望触发的事件处理程序,并且如果您最后不还原它,也可能会迫使用户返回到他们想要的工作表。这第二部分对我很有效!非常感谢你们两位!这同样有效-但它可能会触发一些您不希望触发的事件处理程序,并且如果您在最后不还原它,也可能会强制用户返回到他们想要的工作表。这第二部分对我很有效!非常感谢你们两位!