also this
    'Counting number of rows / Find the max number of row
        MaxRowNum = 1
            
        Do While Cells(MaxRowNum, 2) <> "" Or Cells(MaxRowNum + 1, 2) <> ""
            MaxRowNum = MaxRowNum + 1
        Loop
seems like an awfully complicated way to find maxrow
unless your data structure absolute calls for it...
is there a specific reason why did not you take up the suggestion provided by Keebellah

' Locate last filled row in column B (this istead of the loop)
MaxRowNum = ws.Cells(Rows.Count, 2).End(xlUp).Row