VBA Excel for Mac / Merging WBS into 1 sheet with range selected

All:

I have several excel workbooks stored in the same folder. I am looking to create a master worksheet from 25+ workbooks each day. However, the relevant information that I am looking to include in the master worksheet is not always in the same range on each of the workbooks (and some times not even on the same numbered sheets of the workbooks.) I am looking to merge only certain information of the multiple workbooks and may trying to create a macro that prompt me to select the relevant information. I have not had any luck.

Here is what I have so far. It does not work. I am having trouble isolating one workbook at a time to select the information and then closing it before going on to the next. Suggestions would be greatly appreciated

Sub MergeWorkbooksOnMac()
Dim FilesInPath As String
Dim MyFiles() As String
Dim SourceRcount As Long, FNum As Long
Dim mybook As Workbook, BaseWks As Worksheet
Dim sourceRange As Range, destrange As Range
Dim rnum As Long, CalcMode As Long
Dim folderPath As String

On Error Resume Next
folderPath = MacScript("choose folder as string")
If folderPath = "" Then Exit Sub
On Error GoTo 0

'If there are no files in the folder exit the sub
FilesInPath = Dir(folderPath)
If FilesInPath = "" Then
    MsgBox "No files found"
    Exit Sub
End If

'Fill the array(myFiles) with the list of Excel files in the folder
FNum = 0
Do While FilesInPath <> ""
    If FilesInPath Like "*.xlsx" Then
        FNum = FNum + 1
        ReDim Preserve MyFiles(1 To FNum)
        MyFiles(FNum) = FilesInPath
    End If
    FilesInPath = Dir()
Loop

'Add a new workbook with one sheet
Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
BaseWks.Range("A1").Font.Size = 36
BaseWks.Range("A1").Value = "Please Wait"
rnum = 3

'Change ScreenUpdating, Calculation and EnableEvents
With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .EnableEvents = False
End With

'Loop through all files in the array(myFiles)
If FNum > 0 Then
    For FNum = LBound(MyFiles) To UBound(MyFiles)
        Set mybook = Nothing
        On Error Resume Next
        Set mybook = Workbooks.Open(folderPath & MyFiles(FNum))
        On Error GoTo 0

        If Not mybook Is Nothing Then

            On Error Resume Next

           With mybook
            Display InputBox
            On Error Resume Next
            Set sourceRange = Application.InputBox
                Prompt: = Prompt, _
                Title: = Title, _
                Default: = ActiveCell.Address, _
                Type:=8) 'Range selection
                
                Was the InputBox cancelled?
                If sourceRange Is Nothing Then
                    MsgBox "Cancelled"
                    Else
                    sourceRange.Formula = "=RAND ()"
            End With

            If Err.Number > 0 Then
                Err.Clear
                Set sourceRange = Nothing
            Else
                'if SourceRange use all columns then skip this file
                If sourceRange.Columns.Count >= BaseWks.Columns.Count Then
                    Set sourceRange = Nothing
                End If
            End If
            On Error GoTo 0

            If Not sourceRange Is Nothing Then

                SourceRcount = sourceRange.Rows.Count

                If rnum + SourceRcount >= BaseWks.Rows.Count Then
                    MsgBox "Sorry there are not enough rows in the sheet"
                    BaseWks.Columns.AutoFit
                    mybook.Close savechanges:=False
                    GoTo ExitTheSub
                Else

                    'Copy the file name in column A
                    With sourceRange
                        BaseWks.Cells(rnum, "A"). _
                                Resize(.Rows.Count).Value = MyFiles(FNum)
                    End With

                    'Set the destrange
                    Set destrange = BaseWks.Range("B" & rnum)

                    'we copy the values from the sourceRange to the destrange
                    With sourceRange
                        Set destrange = destrange. _
                                        Resize(.Rows.Count, .Columns.Count)
                    End With
                    destrange.Value = sourceRange.Value

                    rnum = rnum + SourceRcount
                End If
            End If
            mybook.Close savechanges:=False
        End If

    Next FNum
    BaseWks.Columns.AutoFit
End If

ExitTheSub:
BaseWks.Range(“A1”).Value = “Ready”
'Restore ScreenUpdating, Calculation and EnableEvents
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub

Hi There,

Have you tried the same post in the forums at www.vbaexpress.com ? :slight_smile:

Regards,

Nick

I concur that this is a question better suited to an excel forum, like http://www.mrexcel.com/forum/index.php?sid=eec2e492776eb2af60ea6b17860f535d.

One question that will be asked is. With the structure varying so much, how is one to decide what cells to include in the summary?