求和列excel vba多个外部文件迭代

求和列excel vba多个外部文件迭代,vba,excel,for-loop,sum,Vba,Excel,For Loop,Sum,我有一个VBA代码,用于刷新指定文件夹中的所有Excel数据文件(每个文件中的工作表分析)(通过Excel中的XL3加载项进行刷新)。它工作得很好 Sub refresh_OGSC_data_files() Application.ScreenUpdating = False Dim wb As Workbook Set FileSystemObj = CreateObject("Scripting.FileSystemObject") Set FolderObj = FileSystem

我有一个VBA代码,用于刷新指定文件夹中的所有Excel数据文件(每个文件中的工作表分析)(通过Excel中的XL3加载项进行刷新)。它工作得很好

Sub refresh_OGSC_data_files()

Application.ScreenUpdating = False

Dim wb As Workbook

Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
Set FolderObj = FileSystemObj.GetFolder("C:\ARBEIT\Projects\ONEGSC impact     simulation\Part 2\Data\EE")

For Each fileobj In FolderObj.Files
    Set wb = Workbooks.Open(fileobj.Path)

    ActiveWorkbook.Sheets("AUX").Range("B2") = "12"
    Application.Run "XL3RefreshGrid", "Analysis!A13"

    ActiveWorkbook.Save
    ActiveWorkbook.Close
Next fileobj

End Sub
我试图添加到其中的是一个函数性,它将对每个文件中的m列求和,并将该值“记录”到外部工作簿中的一个单元格中,例如Book1、Sheet1、单元格A1。(对于第二个刷新的文件,它将是单元格A2。对于第三个文件,它将是单元格A3,依此类推,直到最后一个文件)

我试图将其插入到相同的代码中(在保存刷新的文件:ActiveWorkbook.Save之前):

然而,它不起作用,可能是完全错误的。请帮忙


如果有什么不清楚的地方,我将尝试详细说明。

您需要将下面的代码添加到循环中,在该循环中,您正在计算M列的和(您需要将
I
增加1,以将行索引增加1)

下面的代码没有
Activate
Select
ActiveCell
,但使用合格的
范围和
工作表

代码

Dim SumSht  As Worksheet
Dim i As Long

Set SumSht = Workbooks("Book1.xlsx").Sheets("Sheet1")
i = 1

' loop here every time to raise the row index (of i)
SumSht.Range("A" & i).Value = WorksheetFunction.Sum(wb.Worksheets("Analysis").Range("M:M"))
i = i + 1

以下是如何显示对已打开工作簿的
wB
引用:

Sub refresh_OGSC_data_files()
Application.ScreenUpdating = False

    Dim wB As Workbook
    Dim SumResult As Double
    Dim OutPutRange As Range

    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    Set FolderObj = FileSystemObj.GetFolder("C:\ARBEIT\Projects\ONEGSC impact     simulation\Part 2\Data\EE")
    Set OutPutRange = Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A3")

    For Each fileobj In FolderObj.Files

        Set wB = Workbooks.Open(fileobj.Path)

        wB.Sheets("AUX").Range("B2") = "12"
        Application.Run "XL3RefreshGrid", "Analysis!A13"

        SumResult = WorksheetFunction.Sum(wB.Sheets("Analysis").Range("M:M"))
        OutPutRange.Value = SumResult
        Set OutPutRange = OutPutRange.Offset(1, 0)
        TotalSum = TotalSum + SumResult

        wB.Save
        wB.Close
    Next fileobj

    Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Value = TotalSum
Application.ScreenUpdating = True
End Sub

谢谢你的回答@shai。不过还没开始工作。它卡在这一行:
SumSht.Range(“A”和“i”).Value=WorksheetFunction.Sum(工作簿(“wb”).Worksheets(“分析”).Range(“M:M”)
我想wb没有正确实现。没有工作簿(“wb”)的情况下,Sum也可以正常工作。谢谢大家!@他哥哥,你为什么不回答?你也可以投票,你知道吗?我只能把一个答案标为解决问题的答案。R3uK在最终解决方案中的速度可能快了一分钟。我现在投了更高的票,所以也许你会得到一些分数,但不会公开显示,因为我没有足够的分数,他们说。
Sub refresh_OGSC_data_files()
Application.ScreenUpdating = False

    Dim wB As Workbook
    Dim SumResult As Double
    Dim OutPutRange As Range

    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    Set FolderObj = FileSystemObj.GetFolder("C:\ARBEIT\Projects\ONEGSC impact     simulation\Part 2\Data\EE")
    Set OutPutRange = Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A3")

    For Each fileobj In FolderObj.Files

        Set wB = Workbooks.Open(fileobj.Path)

        wB.Sheets("AUX").Range("B2") = "12"
        Application.Run "XL3RefreshGrid", "Analysis!A13"

        SumResult = WorksheetFunction.Sum(wB.Sheets("Analysis").Range("M:M"))
        OutPutRange.Value = SumResult
        Set OutPutRange = OutPutRange.Offset(1, 0)
        TotalSum = TotalSum + SumResult

        wB.Save
        wB.Close
    Next fileobj

    Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Value = TotalSum
Application.ScreenUpdating = True
End Sub