2017-01-18 9 views
2

指定されたフォルダ内のすべてのExcelデータファイル(ワークシート解析)のリフレッシュに使用するVBAコードがあります(リフレッシュはExcelでXL3アドインを使用して行われます)。 )。それは完全に動作します。例えば ​​- 私はそれに追加しようとしている何集計列Excel vba複数の外部ファイル反復

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を合計うfuncionality、ありますBook1、Sheet1、セルA1。(2番目のリフレッシュされたファイルの場合は、最後のファイルまでセルA2、3番目のファイルセルA3のようになります)

リフレッシュされたファイルを保存する前に同じコードに挿入しようとしていました:ActiveWorkbook .SAVE):それは仕事、おそらく完全に間違っていませんが

Workbooks("Book1.xlsx").Sheets("Sheet1").Activate 
Workbooks("Book1.xlsx").Sheets("Sheet1").Range("A1").Select 
ActiveCell = WorksheetFunction.Sum(Workbooks("wb").Worksheets("Analysis").Range("m:m")) 
ActiveCell.Offset(1, 0).Range("A1").Select 

。助けてください。

不明な点がある場合は、詳しく説明します。

答えて

0

は、あなたが開いたワークブックへのご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 
0

列Mからの合計を計算するループにコードを追加する必要があります(行インデックスを1だけ引き上げるには、iを1つ上げる必要があります)。

以下のコードは、ActivateSelectActiveCellなしであるが、修飾Range Sを使用しWorksheets。ここで

コード

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 
+0

は、回答@shaiいただきありがとうございます。まだ動作していません。 Range( "M:M")) 'I(" A "&i).Value = WorksheetFunction.Sum(ワークブック" wb ")ワークシート("分析 " _wb_が正しく実装されていないと考えてください。 WorksheetFunction.Sumは_Workbooks( "wb")なしで正常に動作しました_ – andhisbrother

+0

同様に動作します。ありがとうございました! – andhisbrother

+0

@andhisbrotherなぜ答え​​を削除しましたか?あなたも知ってupvoteすることができますか? –