I need to write a VBA script to loop through a specified directory containing a number of workbooks and copy a set range from different numbers of worksheets to a Master File that updates with new values.
I am fairly new to VBA and have searched for hours on a number of sites to try to find out what I am doing wrong. After all this time on StackOverflow, I figured I would just pose the question (hopefully with the push of a button once I get the code working).
I have attached my code so far.
It only includes code to pull data from the first workbook, but I am having trouble getting the code to perform the expected behavior.
I can get it to compile, but it doesn't get new values.
 Sub MasterRollup()
    Dim MyFile As String, MyFiles As String, FilePath As String
    Dim wbMaster As Workbook, wbTemp As Workbook
    Dim wsMaster As Worksheet, wsTemp As Worksheet
    Dim DataRange As Range, OutRange As Range
    Dim OutBook As Workbook, OutSheet As Worksheet
    Dim ctr As Integer
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    FilePath = "C:\Users\Temp"
    MyFiles = "C:\Users\Temp"
    MyFile = Dir(MyFiles)
    Set OutBook = Workbooks.Open("C:\Users\Temp\OutputWorkbook.xlsx")
    Set OutSheet = OutBook.Sheets(1)
    ctr = 1
         Set wbMaster = OutBook
         Set wsMaster = OutBook.Sheets(1)
        If MyFile = "FileName1.xlxs" Then
            '~~> Open the file and set variable
            Set wbTemp = Workbooks.Open(FilePath & MyFile, True)
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G18:S18")
            Set OutRange = OutSheet.Range("B5:N5")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Close the opened file
            wbTemp.Close False 'set to false, because opened as read-only
            Set wsTemp = Nothing
            Set wbTemp = Nothing
            ctr = ctr + 1
        End If
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
    OutBook.SaveAs
    End Sub
Edit:
I have tried to incorporate some of the feedback I received and checked out the link that was posted. I have tried to modify my code and am still not seeing the expected behavior. The code compiles, but no data appears in the Output workbook. Any help would be much appreciated. In the meantime, I'll keep searching :)
   Sub MasterRollup()
  Dim MyFile As String, MyFiles As String, FilePath As String
  Dim wbMaster As Workbook, wbTemp As Workbook
  Dim wsMaster As Worksheet, wsTemp As Worksheet
  Dim DataRange As Range, OutRange As Range
  Dim OutBook As Workbook, OutSheet As Worksheet
  Dim ctr As Integer, myExtension As String
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With
FilePath = "C:\Users\Test"
MyFiles = "C:\Users\Test"
myExtension = "*.xlsx"
Set OutBook = Workbooks.Open("C:\Users\Test.xlsx")
Set OutSheet = OutBook.Sheets(1)
ctr = 1
     Set wbMaster = OutBook
     Set wsMaster = OutBook.Sheets(1)
MyFile = Dir(FilePath & myExtension)
Do While MyFile <> ""
    If MyFile = "File 1.xlsx" Then
        '~~> Open the file and set variable
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
        '~~> Sheet 1
        Set wsTemp = wbTemp.Sheets(1)
        Set DataRange = wsTemp.Range("G18:S18")
        Set OutRange = OutSheet.Range("B5:N5")
        DataRange.Copy
        OutRange.PasteSpecial xlPasteValues
        '~~> Close the opened file
        wbTemp.Close False 'set to false, because opened as read-only
        Set wsTemp = Nothing
        Set wbTemp = Nothing
        ctr = ctr + 1
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 2.xlsx" Then
        '~~> Open the file and set variable
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1 
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G17:S17")
            Set OutRange = OutSheet.Range("B6:N6")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 2 
            Set wsTemp = wbTemp.Sheets(2)
            Set DataRange = wsTemp.Range("G10:S10")
            Set OutRange = OutSheet.Range("B7:N7")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 3 
            Set wsTemp = wbTemp.Sheets(3)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B8:N8")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 4 
            Set ws.Temp = wbTemp.Sheets(4)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B9:N9")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 5 
            Set ws.Temp = wbTemp.Sheets(5)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B10:N10")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 6 
            Set ws.Temp = wbTemp.Sheets(6)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B11:N11")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 7 
            Set ws.Temp = wbTemp.Sheets(7)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B12:N12")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 8 
            Set ws.Temp = wbTemp.Sheets(8)
            Set DataRange = wsTemp.Range("G9:S9")
            Set OutRange = OutSheet.Range("B13:N13")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        wbTemp.Close False 'set to false, because opened as read-only
        Set wbTemp = Nothing
        Set wsTemp = Nothing
        ctr = ctr + 1
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 3.xlsx" Then
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1 
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B14:N14")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        wbTemp.Close False 'set to false, because opened as read-only
        Set wbTemp = Nothing
        Set wsTemp = Nothing
        ctr = ctr + 1
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 4.xlsx" Then
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B15:N15")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        wbTemp.Close False 'set to false, because opened as read-only
        Set wbTemp = Nothing
        Set wsTemp = Nothing
        ctr = ctr + 1
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 5.xlsx" Then
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1 
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B16:N16")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        Set wbTemp = Nothing
        Set wsTemp = Nothing
        ctr = ctr + 1
        wbTemp.Close False 'set to false, because opened as read-only
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 6.xlsx" Then
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1 
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B17:N17")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 2 
            Set wsTemp = wbTemp.Sheets(2)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B18:N18")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 3 
            Set wsTemp = wbTemp.Sheets(3)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B19:N19")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 4 
            Set wsTemp = wbTemp.Sheets(4)
            Set DataRange = wsTemp.Range("G22:S22")
            Set OutRange = OutSheet.Range("B20:N20")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        wbTemp.Close False 'set to false, because opened as read-only
        Set wbTemp = Nothing
        Set wsTemp = Nothing
        ctr = ctr + 1
    End If
    MyFile = Dir(FilePath & myExtension)
    If MyFile = "File 7.xlsx" Then
        Set wbTemp = Workbooks.Open(FilePath & MyFile, ReadOnly:=True)
            '~~> Sheet 1 
            Set wsTemp = wbTemp.Sheets(1)
            Set DataRange = wsTemp.Range("G18:S18")
            Set OutRange = OutSheet.Range("B21:N21")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
            '~~> Sheet 2 
            Set wsTemp = wbTemp.Sheets(2)
            Set DataRange = wsTemp.Range("G19:S19")
            Set OutRange = OutSheet.Range("B22:N22")
            DataRange.Copy
            OutRange.PasteSpecial xlPasteValues
        wbTemp.Close False 'set to false, because opened as read-only
        Set wsTemp = Nothing
        Set wbTemp = Nothing
    End If
    Loop
MsgBox ("Task Completed!")
With Application
    .ScreenUpdating = True
    .DisplayAlerts = True
End With
OutBook.Close SaveChanges:=True
Workbooks.Open ("C:\Users\Test.xlsx")
End Sub
Thanks again!
