Я создал основной отчет Excel с 5 основными вкладками, 3 из которых содержат несколько сводок, которые извлекают свои данные из 3 отдельных файлов CSV. Файлы CSV не имеют единого общего знаменателя и не могут быть объединены. Мне нужно повторить мастер ~ 500 раз для разных пользователей. Каждый пользователь может видеть только свою собственную информацию. Есть предложения?
До сих пор я думал о том, чтобы добавить 4 дополнительные вкладки в основной файл - 3, содержащие данные для каждой из сводных вкладок, и одну, которую я использую в качестве контрольной - из-за количества файлов, на которые я разбиваю их меньшие группы и используя имена из диапазона с переменным размером.
В настоящее время я пытаюсь написать код, который будет:
- сохранить отдельные копии мастер-файла
- фильтр CSV копирует только одного отдельного пользователя за раз данные на соответствующую вкладку данных соответствующего пользовательского отчета
- обновить стержни
- удалить лишние вкладки
Пока мне удалось сделать только шаг 1.
Sub SaveUserReports()
Dim wb As Workbook
Dim rNames As Range, c As Range, r As Range
'Current file's list of names and ids on sheet1.
Set rNames = Worksheets("Control_Room").Range("K8", Worksheets("Control_Room").Range("K8").End(xlDown))
'Path and name to master workbook to open for copy, saveas.
Set wb = Workbooks.Open(ThisWorkbook.Path & "\TestCopy2.xlsx")
For Each c In rNames
With wb
.Worksheets("Control_Room").Range("k8").Value = c
'Path and name for copied workbook
.SaveAs filename:=ThisWorkbook.Path & "\UserReports\" & c.Value & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End With
Set wb = ActiveWorkbook
Next c
wb.Close
End Sub
Не могли бы вы помочь мне с шагами 2-4 или предложить какие-либо альтернативы? Я открыт для любого работающего автоматизированного решения.
Для шагов 2-4 у меня есть (только с 1 из CSV, так как я могу повторить его, как только я получу его на работу):
Sub Import_Data()
Application.ScreenUpdating = False
Dim GBR_Code As Range
Dim row As Long
Dim col As Long
Dim ImportString As String
Dim wb As Workbook
Dim destwb As Workbook
Dim rNames As Range, c As Range
Dim iCol As Long
Dim lo As Range
Set rNames = ThisWorkbook.Worksheets("Control_Room").Range("K8:K9")
Set destwb = Workbooks.Open(ThisWorkbook.Path & "\" & "November GBR.xlsx")
Set lo = destwb.Sheets("GBR_Data").UsedRange
iCol = 1
For Each c In rNames
Set wb = Workbooks.Open(ThisWorkbook.Path & "\UserReports\" & c.Value & ".xlsx")
wb.Worksheets("Control_Room").Range("k8").Value = c
Set wb = ActiveWorkbook
destwb.Sheets("GBR_Data").UsedRange.AutoFilter Field:=iCol, Criteria1:=c
wb.Worksheets("GBR_Data").UsedRange.Clear
'Copy GBR data from data workbook into report workbook
destwb.Worksheets("GBR_Data").Range("A2:V100000").SpecialCells(xlCellTypeVisible).Copy wb.Sheets("GBR_Data").Range("A2")
NewWkb.Sheets("Overview").PivotTables("PivotTable1").RefreshTable
NewWkb.Sheets("Overview").PivotTables("PivotTable2").RefreshTable
NewWkb.Sheets("Overview").PivotTables("PivotTable3").RefreshTable
NewWkb.Sheets("Overview").PivotTables("PivotTable4").RefreshTable
NewWkb.Sheets("Overview").PivotTables("PivotTable5").RefreshTable
NewWkb.Sheets("Overview").PivotTables("PivotTable6").RefreshTable
'Application.DisplayAlerts = False
'NewWkb.Sheets("GBR_Data").Delete
'Application.DisplayAlerts = True
wb.Close SaveChanges = True
Next c
End Sub