Advertisement
Guest User

Untitled

a guest
Aug 6th, 2019
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sub MergeBD()
  2.     Dim StrFile As String
  3.     Dim NumOfFiles As Integer
  4.     Dim filePath As String
  5.     Dim SourceWb As Workbook, ws As Worksheet
  6.     Dim TargetWb As Workbook
  7.     Dim NumOfRows As Long, NumOfRowsInUnav As Integer
  8.     Dim NumOfCol As Long
  9.     Dim NumOfColInBD As Long, NumOfColInUnav As Integer
  10.     Dim s As Integer
  11.     Dim BDpath As String
  12.     Dim NormRng As Range, NormCell As Range
  13.     Dim SplitDate As Variant
  14.     Dim SplitDateSvit As Variant
  15.     Dim SvitCell As Range
  16.     Dim NumOfColInBDmost As Integer
  17.     Dim IsEmpty As String
  18.     Dim RowNo As Long
  19.     Dim ListOfRows As Integer
  20.     Dim period As String
  21.     Dim nextperiod As String
  22.    
  23.     NumOfFiles = 0
  24.     NumOfRows = 2
  25.     NumOfRowsInUnav = 2
  26.     period = "Jul-19"
  27.     nextperiod = "Aug-19"
  28.     BDpath = "Y:\!Global\1.ADMIN\FINANCIAL TRACKING\TU BASE DATA\2019\merge\"
  29.  
  30.     Set TargetWb = ThisWorkbook
  31.     TargetWb.Activate
  32.    
  33.     TargetWb.Sheets("Data").Range("d2:o150999").ClearContents
  34.     TargetWb.Sheets("Data").Range("q2:u150999").ClearContents
  35.     TargetWb.Sheets("Data").Range("x2:y150999").ClearContents
  36.     TargetWb.Sheets("Data").Range("aa2:af150999").ClearContents
  37.     TargetWb.Sheets("Data").Range("ai2:ai150999").ClearContents
  38.     TargetWb.Sheets("System").Range("a1:a100").ClearContents
  39.    
  40.     ' load up all files in predefined BDpath folder
  41.    StrFile = Dir(BDpath & "*.xls*")
  42.     Do While Len(StrFile) > 0
  43.         NumOfFiles = NumOfFiles + 1
  44.         TargetWb.Sheets("System").Range("A" & NumOfFiles) = StrFile
  45.         StrFile = Dir
  46.     Loop
  47.    
  48.     Application.ScreenUpdating = False
  49.  
  50.     For s = 1 To NumOfFiles
  51.         filePath = TargetWb.Sheets("System").Range("A" & s).Value
  52.         If Not filePath Like "*XX*" And Not filePath Like "*Jakub*" And Not filePath Like "*Marketa*" And filePath Like "*Base_Data*" Then
  53.             Set SourceWb = Workbooks.Open(BDpath & filePath, False, ReadOnly:=True)
  54.             Application.DisplayAlerts = False
  55.             'unprotect
  56.            SourceWb.Sheets("Live Base Data ").Unprotect Password:="BD_pass"
  57.             ' unhide all rows and columns
  58.            SourceWb.Sheets("Live Base Data ").Cells.EntireColumn.Hidden = False
  59.             SourceWb.Sheets("Live Base Data ").Cells.EntireRow.Hidden = False
  60.             ' disable filter
  61.  
  62.             With SourceWb.Sheets("Live Base Data ")
  63.                 If (.AutoFilterMode And .FilterMode) Or .FilterMode Then
  64.                   .ShowAllData
  65.                 End If
  66.             End With
  67.            
  68.             ' Check which column has the most rows
  69.            NumOfColInBD = 1
  70.             For ListOfRows = 1 To 19
  71.                 With SourceWb.Sheets("Live Base Data ")
  72.                     If NumOfColInBD < .Cells(.Rows.Count, ListOfRows + 3).End(xlUp).Row Then
  73.                         NumOfColInBD = .Cells(.Rows.Count, ListOfRows + 3).End(xlUp).Row
  74.                     End If
  75.                 End With
  76.             Next
  77.            
  78.             'copy only if BD has more than 1 row
  79.            If NumOfColInBD > 1 Then
  80.                 'copy all relevant data
  81.                For NumOfColInBD = 2 To NumOfColInBD
  82.                     If (Format(SourceWb.Sheets("Live Base Data ").Range("Q" & NumOfColInBD), "mmm-yy") = period Or _
  83.                     Format(SourceWb.Sheets("Live Base Data ").Range("Q" & NumOfColInBD), "mmm-yy") = nextperiod) And _
  84.                     Not SourceWb.Sheets("Live Base Data ").Range("S" & NumOfColInBD) = "cancelled" Then
  85.                         TargetWb.Sheets("Data").Range("D" & NumOfRows & ":O" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("D" & NumOfColInBD & ":O" & NumOfColInBD).Value
  86.                         TargetWb.Sheets("Data").Range("Q" & NumOfRows & ":U" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("Q" & NumOfColInBD & ":U" & NumOfColInBD).Value
  87.                         TargetWb.Sheets("Data").Range("Y" & NumOfRows & ":Y" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("Y" & NumOfColInBD & ":Y" & NumOfColInBD).Value
  88.                         SourceWb.Sheets("Live Base Data ").Range("AA" & NumOfColInBD & ":AA" & NumOfColInBD).Copy
  89.                         TargetWb.Sheets("Data").Range("AA" & NumOfRows & ":AA" & NumOfRows).PasteSpecial xlFormulas
  90.                         'TargetWb.Sheets("Data").Range("AA" & NumOfRows & ":AA" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("AA" & NumOfColInBD & ":AA" & NumOfColInBD).Value
  91.                        TargetWb.Sheets("Data").Range("Af" & NumOfRows & ":Af" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("Af" & NumOfColInBD & ":Af" & NumOfColInBD).Value
  92.                         TargetWb.Sheets("Data").Range("AI" & NumOfRows & ":AI" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("AG" & NumOfColInBD & ":AG" & NumOfColInBD).Value
  93.                         TargetWb.Sheets("Data").Range("AJ" & NumOfRows & ":AJ" & NumOfRows).Value = SourceWb.Sheets("Live Base Data ").Range("AH" & NumOfColInBD & ":AH" & NumOfColInBD).Value
  94.                        
  95.                         NumOfRows = NumOfRows + 1
  96.                     End If
  97.                 Next NumOfColInBD
  98.  
  99.                 SourceWb.Close savechanges:=False
  100.                 'NumOfRows = NumOfRows + NumOfColInBD - 1
  101.            End If
  102.         End If
  103.     Next s
  104.    
  105.    
  106.     ' normalize period to have always 1st day as a day
  107.    Set NormRng = TargetWb.Sheets("Data").Range("Q2:Q" & NumOfRows)
  108.     For Each NormCell In NormRng
  109.         If Len(NormCell.Value) > 3 Then
  110.             NormCell.Value = Format(NormCell.Value, "mmm-yy")
  111.             SplitDate = Split(NormCell.Value, "/")
  112.             NormCell.Value = SplitDate(0) & "/1/" & SplitDate(2)
  113.         End If
  114.     Next NormCell
  115.    
  116.  
  117.     Application.DisplayAlerts = True
  118.     MsgBox "Copying completed!"
  119.  
  120. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement