Hi!
I am workbook that has several pivottables in it. Each PT has it source from a different workbook. To sum all the values I'm using the following macro.
Private Sub HämtaAlla()
On Error GoTo Fel1
Dim LastCellA As Range
Dim LastCellB As Range
Dim X As Range
Dim Förband As Range
Dim LastCellRowNumber As Long
Dim WorkBookName1 As String
Dim WorkBookName2 As String
Dim FörbandNamn As String
Dim Månad As String
Dim ArbeteMånad As String
Dim Y As String
Dim Pt As PivotTable
Dim Pf1 As PivotField
Dim Pf2 As PivotField
Dim iItem As Integer
Dim iDatum As Integer
Dim iNext As Integer
Dim iNextDatum As Integer
Dim AntFlikar As Integer
Dim I As Integer
Dim NuvarandeRepTid As Double
Dim Slarv As Double
Dim TotalReptid As Double
Dim ArbetsOrder As Double
Dim TotalArbetsOrder As Double
WorkBookName1 = ActiveWorkbook.Name
With Worksheets("Bataljon")
.Range("B21").Formula = "=Sum(B19:AH19)"
.Range("B7:AH18").Value = vbNullString
.Range("A2").Value = vbNullString
.Range("B22:B23").Value = "0.0"
End With
'Sätt AntFilkar lika med antalet flikar i arbetsboken.
AntFlikar = ActiveWorkbook.Worksheets.Count
If AntFlikar = 3 Then
MsgBox "Det verkar inte finnas några databaser inlagda i RUUT! ", vbCritical, "Fel"
Exit Sub
End If
'Börja med att uppdatera all data.
ThisWorkbook.RefreshAll
NuvarandeRepTid = 0
Slarv = 0
TotalReptid = 0
ArbetsOrder = 0
TotalArbetsOrder = 0
'Loopa igenom de första flikarna, utom de två första (och en dold) flikarna eftersom det inte ska kopieras data därifrån.
For N = 4 To AntFlikar:
On Error Resume Next
Set Ws = Worksheets(N)
Sheet = Worksheets(N).Name
Set X = Worksheets("Data").Range("A:A").Find(Sheet, after:=Worksheets("Data").Range("A19"), LookAt:=xlWhole, MatchCase:=False)
Y = X.Offset(0, 1).Text
With Ws
Workbooks.Open(FileName:=Y).RunAutoMacros Which:=xlAutoOpen
WorkBookName2 = ActiveWorkbook.Name
Windows(WorkBookName1).Activate
Set Pt = Ws.PivotTables(1)
Set Pf1 = Pt.PageFields(1)
Set Pf2 = Pt.PageFields(2)
iNextDatum = 1
iNext = 1
For iItem = 1 To Pf1.PivotItems.Count
FörbandNamn = Pf1.PivotItems(iNext).Name
Pf1.CurrentPage = Pf1.PivotItems(FörbandNamn).Name
iNextDatum = 1
For iDatum = 1 To Pf2.PivotItems.Count
.Range("C2").Value = Pf2.PivotItems(iNextDatum).Name
Pf2.CurrentPage = .Range("C2").Value
Set LastCellA = .Cells(.Rows.Count, "A").End(xlUp)
Set LastCellB = .Cells(.Rows.Count, "B").End(xlUp)
LastCellRowNumber = Application.WorksheetFunction.Max(LastCellA.Row, LastCellB.Row)
TotalReptid = .Cells(LastCellRowNumber, "B").Value
ArbetsOrder = .Cells(LastCellRowNumber, "C").Value
TotalArbetsOrder = TotalArbetsOrder + ArbetsOrder
Slarv = Slarv + TotalReptid
If .Cells(LastCellRowNumber, "B").Value = "" Then GoTo Gåvidare1
Set Förband = Worksheets("Bataljon").Range("B6:AH6").Find(FörbandNamn)
For I = 1 To 12
Månad = Worksheets("Data").Range("A" & I).Value
Månad = Left(Månad, 7)
ArbeteMånad = .Range("C2").Value
ArbeteMånad = Left(ArbeteMånad, 7)
If Månad = ArbeteMånad Then
NuvarandeRepTid = Förband.Offset(I, 0).Value
Förband.Offset(I, 0).Value = NuvarandeRepTid + TotalReptid
NuvarandeRepTid = 0
End If
Next I
Gåvidare1:
iNextDatum = iNextDatum + 1
Next iDatum
iNext = iNext + 1
Next iItem
End With
Workbooks(WorkBookName2).Close savechanges:=False
Next
On Error GoTo 0
'Summerar värden och missade värden
Worksheets("Bataljon").Range("B22").Value = Slarv - Worksheets("Bataljon").Range("B21").Value
Worksheets("Bataljon").Range("B23").Value = Worksheets("Bataljon").Range("B21").Value + Worksheets("Bataljon").Range("B22").Value
Månad = Left(Månad, 4)
Worksheets("Bataljon").Range("A2").Value = Månad
AntFlikar = ActiveWorkbook.Worksheets.Count
For N = 4 To AntFlikar:
With Ws
Set Pt = .PivotTables(1)
Set Pf1 = Pt.PageFields(1)
Set Pf2 = Pt.PageFields(2)
Pf1.EnableMultiplePageItems = True
Pf2.EnableMultiplePageItems = True
End With
Next N
MsgBox "Förbandsuppdelning av reperationstid är klar!" _
& vbNewLine & vbNewLine & "Antal databaser: " & AntFlikar - 3 _
& vbNewLine & "Total reptid: " & Worksheets("Bataljon").Range("B23").Value _
& vbNewLine & "Antal arbetsordrar: " & TotalArbetsOrder, vbInformation, "Klart"
NuvarandeRepTid = 0
Slarv = 0
TotalReptid = 0
ArbetsOrder = 0
TotalArbetsOrder = 0
Exit Sub
'I vissa fall kan funktionen hänga sig, istället för att Excel slutar fungera visas detta felmeddelande.
Fel1:
MsgBox "Ett fel har uppstått! ", vbCritical, "Fel"
End Sub
It opens each workbook that is used and updates the PT to current values, then it sums the values on another sheet to get the total from all. Thing is, for some reason the value sometimes is to high, if I manualy count the values I get a lower number. And most of the times the value is what it's supposed to be. Any ideas why it sometimes counts "wrong"?
I can post a stripped down workbook if needed.
Bookmarks