VBA по запросу, это моя первая попытка создать что-то подобное, так что, пожалуйста, простите меня за беспорядок, все нижеприведенное было собрано с помощью форумов, подобных этому, я просто застрял с вышеописанным сценарием, поэтому я решил увеличить свойстолбцы и разделить формулу для работы внутри Excel.Я создаю счет, чтобы найти дубликаты и разделить общее количество исправлений на отправку в конце, используя новый столбец.Большое спасибо за вашу помощь:
Sub ImportData()
Dim C_Sheet As String, C_LastRow As Long, D_LastRow As Long
C_Sheet = "ProductivityFinal"
C_LastRow = Sheets(C_Sheet).Range("N:N").End(xlDown).Row 'count col for Claim ID (no blank expected)
'C_LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim TmpFolder As String, TmpFile As String, BUfile As String
TmpFolder = "X:\Productivity Report\" 'live folder
TmpFile = "ProductivityFinal.xlsx"
BUfile = "BU_ProductivityFinal.xlsx"
If Dir(TmpFolder & TmpFile) = "" Then 'check if temp file exists
MsgBox "No data file exists. Please run report."
Exit Sub
End If
If MsgBox("It may take some time. Closing unnecessary files would help to speed up." & vbCrLf & "Continue?", vbOKCancel) = vbCancel Then
Exit Sub
End If
Sheets("Summary").Select
Call Shaper1
Range("A1").Select
Application.ScreenUpdating = False
Application.Calculation = xlManual
Workbooks.Open TmpFolder & TmpFile
D_LastRow = Cells(Rows.Count, 14).End(xlUp).Row
'Clearing data sheets before import
ThisWorkbook.Activate
Sheets(C_Sheet).Select
Call ClearTable1
'Fetch data and paste
Workbooks(TmpFile).Activate
Sheets("ProductivityFinal").Select
Range("A2:T" & D_LastRow).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ThisWorkbook.Activate
Sheets(C_Sheet).Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A2").Select
'--Sorting--
Call SortingTable
'-----------
Workbooks(TmpFile).Activate
'Take backup and delete original temp file.
On Error Resume Next
Application.DisplayAlerts = False
Workbooks(TmpFile).SaveAs Filename:=TmpFolder & BUfile
Application.DisplayAlerts = True
Workbooks(BUfile).Close
On Error GoTo 0
Kill TmpFolder & TmpFile
Call HeaderAndFormula
Sheets("Summary").Select
Call RefreshingPivot
'--------------
Application.ScreenUpdating = True
'Application.Calculation = xlCalculationAutomatic
Call Shaper4
MsgBox "Updated"
End Sub
Sub HeaderAndFormula()
Dim C_Sheet As String, C_LastRow As Long
C_Sheet = "ProductivityFinal"
C_LastRow = Sheets(C_Sheet).Range("N:N").End(xlDown).Row
Sheets("Config").Range("B4").Value = C_LastRow
'Header
Sheets(C_Sheet).Range("A1:AE1").Value = Sheets("Config").Range("A10:AE10").Value
'Formulas
Sheets(C_Sheet).Range("A1").Select
Sheets(C_Sheet).Range("U2").Value = "=O2/I2"
Sheets(C_Sheet).Range("W2").Value = "=V2/G2"
Sheets(C_Sheet).Range("Z2").Value = "=X2*1"
Sheets(C_Sheet).Range("AA2").Value = "=TIMEVALUE(M:M)"
Sheets(C_Sheet).Range("AE2").Value = "=AA2-AB2-AD2"
Sheets(C_Sheet).Range("X2").Value = "=IF(P2=Q2,IF(T3=T2,IF(K3<J2,(K2-J2),""STARTED BEFORE SUBMITTING LAST CLAIM""),IF(P2=Q2,(K2-J2))),""Assigned Overnight"")"
Sheets(C_Sheet).Range("Y2").Value = "=IF(T3=T2,IF(J2-K3<0,""ERROR"",J2-K3),""FIRST CLAIM OF THE DAY"")"
Sheets(C_Sheet).Range("AB2").Value = "=SUMIF(T:T,T2,Z:Z)"
Sheets(C_Sheet).Range("AC2").Value = "=IF(Y2=""FIRST CLAIM OF THE DAY"", 0, Y2*1)"
Sheets(C_Sheet).Range("AD2").Value = "=SUMIF(T:T,T2,AC:AC)"
'Sheets(C_Sheet).Range("AF2").Value = "=I2/COUNTIFS(T:T,T2,N:N,N:N)"
Sheets(C_Sheet).Range("AF2").Value = "=I2/COUNTIFS($T$2:INDIRECT(""$T$"" & Config!$B$4),T2,$N$2:INDIRECT(""$N$"" & Config!$B$4),$N$2:INDIRECT(""$N$"" & Config!$B$4))"
'Sheets(C_Sheet).Range("V2").Value = "=SUMIF(T:T,T2,I:I)"
'Sheets(C_Sheet).Range("V2").Value = "=SUMPRODUCT(($T$2:INDIRECT(""$T$"" & Config!$B$4)=T2)*$I$2:INDIRECT(""$I$"" & Config!$B$4)/COUNTIFS($N$2:INDIRECT(""$N$"" & Config!$B$4),$N$2:INDIRECT(""$N$"" & Config!$B$4)))"
'Sheets(C_Sheet).Range("V2").Value = "=SUMIF(T:T,T2,AF:AF)"
Sheets(C_Sheet).Range("V2").Value = "=SUMIF($T$2:INDIRECT(""$T$"" & Config!$B$4),T2,$AF$2:INDIRECT(""$AF$"" & Config!$B$4))"
'Autofill
'N:14, U:21 , AF: 32
Range("U2:AF2").AutoFill Destination:=Range(Cells(2, 21), Cells(Rows.Count, 14).End(xlUp).Offset(0, 18))
Sheets("Summary").Select
Application.ScreenUpdating = True
Call Shaper2
Call Shaper3
Sheets("Summary").Select
Application.ScreenUpdating = False
Sheets(C_Sheet).Select
'Sheets("ProductivityFinal").Range("U:AF").Calculate
Sheets("ProductivityFinal").Range("U2:AF" & Cells(Rows.Count, 14).End(xlUp).Row).Calculate
'Recover Pivot Reference
Sheets("Summary").PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"ProductivityFinal!$A$1:$AE$" & C_LastRow, Version:=xlPivotTableVersion14)
End Sub
Sub ClearTable1()
Sheets("ProductivityFinal").Select
If Range("N2") = "" Then
Exit Sub
End If
Rows("2:1048561").Select
Selection.Delete Shift:=xlUp
Range("U2:AE2").ClearContents 'remove formula
Sheets("ProductivityFinal").Range("A2:T2").Value = Sheets("Config").Range("A15:T15").Value 'feed sample data
End Sub
Sub RefreshingPivot() 'all pivot tables
'Dim PT As PivotTable
'Dim WS As Worksheet
'
' For Each WS In ThisWorkbook.Worksheets
' For Each PT In WS.PivotTables
' PT.RefreshTable
' Next PT
' Next WS
'Sheets("Summary").PivotTables("PivotTable1").PivotCache.Refresh
ActiveWorkbook.RefreshAll
End Sub
Sub SortingTable() 'sort *** [Key](A to Z) first then [Since Dt](Z to A).
'Format cells----
Columns("J:K").Select
Selection.NumberFormat = "dd/mm/yyyy"
Columns("P:Q").Select
Selection.NumberFormat = "dd/mm/yyyy"
Columns("W:W").Select
Selection.NumberFormat = "0.00%"
Columns("X:AE").Select
Selection.NumberFormat = "hh:mm:ss"
'----
Range("A1:AE1").AutoFilter
ActiveWorkbook.Worksheets("ProductivityFinal").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ProductivityFinal").AutoFilter.Sort.SortFields.Add _
Key:=Range("T1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("ProductivityFinal").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Worksheets("ProductivityFinal").AutoFilter.Sort.SortFields.Add _
Key:=Range("J1"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("ProductivityFinal").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1:AE1").AutoFilter
End Sub
Sub Shaper1() 'Import logo to appear
Sheets("Summary").Shapes("Rectangle 13").Left = 500
End Sub
Sub Shaper2() 'Import logo to disappear
Sheets("Summary").Shapes("Rectangle 13").Left = 5000
Sheets("Summary").Shapes("Rectangle 13").Top = 100
End Sub
Sub Shaper3() 'Calc logo to appear
Sheets("Summary").Shapes("Rectangle 14").Left = 500
End Sub
Sub Shaper4() 'Calc logo to disappear
Sheets("Summary").Shapes("Rectangle 14").Left = 5000
Sheets("Summary").Shapes("Rectangle 14").Top = 100
End Sub