Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
756to760
756to760
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SourceData bei Pivot Uptaden / Probleme

SourceData bei Pivot Uptaden / Probleme
26.04.2006 11:04:42
Martin


      
Hallo Excel VBA-Experten
Meine Unwissenheit beschämt mich, aber ich gebe es zu, "da komme ich nicht weiter"!
Diese beiden Scripts lesen alle Pivot Tabellen-Eckdaten in ein Tabellenblatt, in welchem
die Details überarbeitet werden können und mitd dem zweiten werden (sollten eigentlich)
die Daten im Pivot geupdatet. Diese Vorgehensweise ist bei Querytables erfolgreich und bei Pivot
noch nicht.
Sub PivotSourceDataAuslesen()
    
Dim pvt As PivotTable
    
Dim wsh As Worksheet
    
Dim Tab_vorhanden As Boolean
    
Dim pvt_Anzahl As Integer
    
    pvt_Anzahl = 0
    Tab_vorhanden = 
True
    
For Each wsh In ActiveWorkbook.Worksheets
        
If wsh.Name = "PivotSource" Then
            Tab_vorhanden = 
False
            
Exit For
        
End If
    
Next
    
If Tab_vorhanden Then
        ActiveWorkbook.Sheets.Add Before:=ActiveWorkbook.Worksheets(1)
        ActiveSheet.Name = "PivotSource"
    
End If
    Sheets("PivotSource").Cells(1, 1).Value = "Tabelle"
    Sheets("PivotSource").Cells(1, 2).Value = "Pivot"
    Sheets("PivotSource").Cells(1, 3).Value = "SourceData"
    
    
For Each wsh In ActiveWorkbook.Worksheets
        
For Each pvt In wsh.PivotTables
            pvt_Anzahl = pvt_Anzahl + 1
            Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1) = wsh.Name
            Sheets("PivotSource").Cells(1 + pvt_Anzahl, 2) = pvt.Name
            Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3) = pvt.SourceData
        
Next
    
Next
    
If pvt_Anzahl = 0 Then
        MsgBox "Keine Queries in dieser Arbeitsmappe", vbExclamation
    
Else
        MsgBox "Total " & pvt_Anzahl & " Queries in der Arbeitsmappe.", vbInformation
    
End If
End Sub
Sub PivotSourceDataEinlesen()
    
Dim pvt As QueryTable
    
Dim wsh As Worksheet
    
Dim Tab_vorhanden As Boolean
    
Dim pvt_Anzahl As Integer
    
    Tab_vorhanden = 
False
    
For Each wsh In ActiveWorkbook.Worksheets
        
If wsh.Name = "PivotSource" Then
            Tab_vorhanden = 
True
            
Exit For
        
End If
    
Next
    
If Not (Tab_vorhanden) Then
        MsgBox "Keine PivotSourcedata vorhanden!" & vbCrLf & _
               "Update nicht erfolgt!", vbCritical
        
Exit Sub
    
End If
    
    
For Each wsh In ActiveWorkbook.Worksheets
        
For Each pvt In wsh.QueryTables
            pvt_Anzahl = 1
            
Do While Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value <> ""
                
If wsh.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value And _
                   pvt.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 2) 
Then
                   pvt.Connection = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3).Value
                    
                   MsgBox "Blatt:" & wsh.Name & vbCrLf & _
                          "Pivot:" & pvt.Name & " angepasst!", vbInformation
                
End If
                pvt_Anzahl = pvt_Anzahl + 1
            
Loop
        
Next
    
Next
End Sub
Danke für Eure Hilfe 


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Habe natürlich Updaten und nicht Uptaden gemeint!
26.04.2006 11:07:01
MartinM
Sorry
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 11:26:29
EtoPHG
Hallo Martin,
Irgendwie kommt mir das Script bekannt vor ;-)
Im UpdateTeil vielleicht
pvt.Connection mit pvt.SourceData ersetzen ?
Gruss Hansueli
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 11:33:22
Martin
Hallo Hansueli
genau das ist Deine Scriptlösung von Dir für die QueryTables welche ich für das nächste Problem verwenden will. Ebensfalls bei Pivots die direkt mit einer Database verknüpft sind habe ich dieselben Probleme.
Das mit der Connection habe ich mittlerweile behoben aber es lässt sich nicht updaten, das ist eine art von Array welches sich nicht bearbeiten lässt.
pvt.Sourcedata(1) bis (4) in meinem Beispiel aber ich denke es könnten je nach länge der SQL Anweisung noch mehr solcher SourceDatateile geben.
Das mit den QueryTables hatt uns sehr geholfen, wir sind schon fast über dem Berg.
Gruss
Martin
Anzeige
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 11:46:10
EtoPHG
Hallo Martin,
Copy - Paste Probleme !!!
Hier dieser Code funktioniert:

Sub PivotSourceDataEinlesen()
Dim pvt As PivotTable
Dim wsh As Worksheet
Dim Tab_vorhanden As Boolean
Dim pvt_Anzahl As Integer
Tab_vorhanden = False
For Each wsh In ActiveWorkbook.Worksheets
If wsh.Name = "PivotSource" Then
Tab_vorhanden = True
Exit For
End If
Next
If Not (Tab_vorhanden) Then
MsgBox "Keine PivotSourcedata vorhanden!" & vbCrLf & _
"Update nicht erfolgt!", vbCritical
Exit Sub
End If
For Each wsh In ActiveWorkbook.Worksheets
For Each pvt In wsh.PivotTables
pvt_Anzahl = 1
Do While Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value <> ""
If wsh.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value And _
pvt.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 2) Then
pvt.SourceData = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3).Value
MsgBox "Blatt:" & wsh.Name & vbCrLf & _
"Pivot:" & pvt.Name & " angepasst!", vbInformation
End If
pvt_Anzahl = pvt_Anzahl + 1
Loop
Next
Next
End Sub

Gruss Hansueli
Anzeige
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 12:56:32
Martin
Hallo Hansueli
Ja das Kreuz mit dem Umwandeln von Scripts ;0)
Aber ich erhalte den Laufzeitfehler 1004 bei der Position:
pvt.SourceData = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3).Value
So etwas kleinliches dieses VBA ;0(
Gruss
Martin
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 13:01:34
EtoPHG
Hallo Martin,
Frage: Bekommst Du den Fehler auch, wenn Du die Originaldaten (d.h. keine Änderungen im Blatt "PivotSource") machst ?
Wenn nicht, muss es an der Änderung der Daten liegen.
Was genau willst Du mit der Änderung der SourceData überhaupt erreichen ?
Gruss Hansueli
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 13:11:51
MartinM
Hallo Hansueli
Habe soeben den Test gemacht, es ist auch bei den Originaldaten derselbe Fehler aufgetreten.
Zum Was genau wir damit erreichen wollen:
Wir haben etliche Auswertungen mit Pivot die vom Ersteller direkt auf die externen Daten verknüpft wurden auf unsere DB2 Datenbank. Eben wegen dieser DB2 die wir gewechselt haben ist es notwendig den Connectionsstring für die ODBC Schnittstelle anzupassen mit den neuen Parametern. Dies war bei der Querytable ebenfalls notwendig und ist perfekt gelungen. Zur Erläuterung wir haben so ca 250 Standard Tabellen mit solchen Abfragen in Pivot. Die Brisanz liegt im Detail, wir können nicht mit dem Wizzard die Datenquelle Updaten, Excel gibt eine Fehlende Datenbasis als Grund aus und lässt keie Änderung derselben auf normalem Weg zu. Nun sind wir auf dem Weg mittels VBA die Daten wieder zu reaktivieren und anzupassen an die neue Begebenheit.
Aber es liegt vermutlich an der Art des Datenbuffers für Pivot Tabellen welche diesen Weg erschwert oder (hoffentlich nicht) verunmöglicht.
Gruss
Martin
Anzeige
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 13:37:59
EtoPHG
Hallo Martin,
Ich habe die Routine nur mit Pivottabellen mit lokalem Datenbezug getestet.
Dort funktionierts. Bei externen Datenbezügen wird ein Array aufgebaut und gemäss Dokumentation ist dieser NUR LESEZUGRIFF.
Ich brauch noch etwas Zeit und Hirnschmalz, vielleicht komm ich noch auf eine Lösung.
Gruss Hansueli
AW: SourceData bei Pivot Uptaden / Probleme
26.04.2006 14:01:05
EtoPHG
Hallo Martin,
Also... so müsste es eigentlich (trotz Lesezugriff) gehen:

Sub PivotSourceDataAuslesen()
Dim pvt As PivotTable
Dim wsh As Worksheet
Dim Tab_vorhanden As Boolean
Dim SourceArray As Variant
Dim ixArray As Integer
Dim pvt_Anzahl As Integer
pvt_Anzahl = 0
Tab_vorhanden = True
For Each wsh In ActiveWorkbook.Worksheets
If wsh.Name = "PivotSource" Then
Tab_vorhanden = False
Exit For
End If
Next
If Tab_vorhanden Then
ActiveWorkbook.Sheets.Add Before:=ActiveWorkbook.Worksheets(1)
ActiveSheet.Name = "PivotSource"
End If
Sheets("PivotSource").Cells(1, 1).Value = "Tabelle"
Sheets("PivotSource").Cells(1, 2).Value = "Pivot"
Sheets("PivotSource").Cells(1, 3).Value = "ArrayElements"
Sheets("PivotSource").Cells(1, 4).Value = "SourceData"
For Each wsh In ActiveWorkbook.Worksheets
For Each pvt In wsh.PivotTables
pvt_Anzahl = pvt_Anzahl + 1
Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1) = wsh.Name
Sheets("PivotSource").Cells(1 + pvt_Anzahl, 2) = pvt.Name
SourceArray = pvt.SourceData
Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3) = UBound(pvt.SourceData)
For ixArray = 1 To UBound(pvt.SourceData)
Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3 + ixArray) = SourceArray(ixArray)
Next ixArray
Next
Next
If pvt_Anzahl = 0 Then
MsgBox "Keine Pivottabellen in dieser Arbeitsmappe", vbExclamation
Else
MsgBox "Total " & pvt_Anzahl & " Pivottabellen in der Arbeitsmappe.", vbInformation
End If
End Sub


Sub PivotSourceDataEinlesen()
Dim pvt As PivotTable
Dim wsh As Worksheet
Dim SourceArray As Variant
Dim ixArray As Integer
Dim Tab_vorhanden As Boolean
Dim pvt_Anzahl As Integer
Tab_vorhanden = False
For Each wsh In ActiveWorkbook.Worksheets
If wsh.Name = "PivotSource" Then
Tab_vorhanden = True
Exit For
End If
Next
If Not (Tab_vorhanden) Then
MsgBox "Keine PivotSourcedata vorhanden!" & vbCrLf & _
"Update nicht erfolgt!", vbCritical
Exit Sub
End If
For Each wsh In ActiveWorkbook.Worksheets
For Each pvt In wsh.PivotTables
pvt_Anzahl = 1
Do While Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value <> ""
If wsh.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 1).Value And _
pvt.Name = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 2) Then
ReDim SourceArray(1 To Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3).Value)
For ixArray = 1 To Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3).Value
SourceArray(ixArray) = Sheets("PivotSource").Cells(1 + pvt_Anzahl, 3 + ixArray).Value
Next ixArray
pvt.SourceData = SourceArray
MsgBox "Blatt:" & wsh.Name & vbCrLf & _
"Pivot:" & pvt.Name & " angepasst!", vbInformation
End If
pvt_Anzahl = pvt_Anzahl + 1
Loop
Next
Next
End Sub

Du musste BEIDE Routinen ersetzen !
Gruss Hansueli
Anzeige
Ich muss mich vor Dir verneigen!! ;0)
26.04.2006 14:16:26
Martin
Hallo Hansueli
Deine Integrität und Kompetenz im Bereich dieses VBA-Teilbereichs ist einfach "GRANDIOS"!
Das war wieder einmal des Meisters Hand welche mir die richtige Lösung zugeflüstert hat.
ES FUNKTIONIERT und das einwandfrei.
Wir können sehen dass Handbücher und Beschriebe eben nur zum Anferuern dienen im Winter, denn es gibt immer wieder jemanden der solche Hürden überspringt.
DANKE und ich hoffe dass ich wieder einmal auf Deine Hilfe zählen darf.
Gruss
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige