Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Verbindungen aktualisieren

Verbindungen aktualisieren
06.02.2023 13:19:12
Christian
Hallo,
kurze und einfache Frage. Habe 5 PQ Abfragen in meiner Tabelle. Kann man irgendwie einstellen, wenn ich auf alle aktualisieren klicke, dass sie nacheinander anstatt gleichzeitig aktualisiert werden?
Zwei der Abfragen bekommen ihre Inhalte aus CSV Dateien, die 3 anderen Abfragen greifen darauf zu. Habe das schon oft erlebt, dass in den anderen 3 Abfragen dann Zeilen gefehlt haben, weil die CSV Dateien noch nicht komplett geladen waren. Erst als ich dann nochmal auf alle aktualisieren geklickt habe, war dann alles vollständig.
Danke
Christian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verbindungen aktualisieren
06.02.2023 14:04:05
ChrisL
Hi Christian
Quick and (very) dirty: könntest du einfach zwei Aktualisierungen hintereinander ausführen. Aber das eigentliche Problem sitzt wahrscheinlich tiefer im Aufbau der Abfrage.
Ich vermute mal, du hast folgende Ausgangslage
Abfrage1
- Quelldaten aus extern beziehen
- Quelldaten aufbereiten und als Tabelle speichern
Abfrage2
- Quelldaten aus Tabelle beziehen
- Daten weiterverarbeiten
Sprich in Abfrage2 verwendest du die Daten aus dem Tabellenblatt als Quelle:
Quelle = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
Würdest du hingegen als Quelle direkt den Namen der ersten Abfrage ("Abfrage1") verwenden, dann hättest du das Problem wahrscheinlich nicht.
Quelle = Abfrage1,
Abgesehen davon, dass damit die sequenzielle Aktualisierungsreihenfolge fest steht, verbesserst du die Performance. Die Daten müssen nicht erst ins Blatt übergeben werden, um dann neu einzulesen, sondern es wird direkt die Abfrage weiterverwendet.
PS: Bei grösseren PQ-Aktionen (mehrere aufbauende Abfragen und Quellen), beginne ich meist so, dass ich einzelne Abfragen ausschliesslich für den Quellbezug (nur Verbindung) erstelle. So hast du mal für jede Tabelle eine eindeutige Quelle (ohne Duplikate und Redundanzen). Die Quelle kannst du zudem schön vorbereiten z.B. die Typenkonvertierungen erledigen. Alle darauf folgenden Abfragen basieren dann nur noch auf diesen Quellabfragen.
cu
Chris
Anzeige
AW: Verbindungen aktualisieren
06.02.2023 18:20:33
Christian
Hallo Chris,
leider nicht so ganz. Da ist noch eine weitere "Zwischenlösung" im Spiel zwischen den beiden Abfragen.
Hintergrund ist der, die beiden csv Dateien beinhalten zwar was ich brauche, aber in den Dateien stehen keine Hinweise, in wiefern Verknüpfungen zwischen den beiden Dateien bestehen.
Mit anderen Worten, ich habe jede der fast 9000 Verknüpfungen ergoogelt und eine intelligente Tabelle erstellt, in der Zeile für Zeile jede Verknüpfung, sowie 5 XVERWEIS Formeln die die zu den Verknüpfungen benötigten Daten aus den CSV Dateien holen, aufgelistet ist. Ich weiß XVERWEIS kann man durch PQ ersetzen, aber das war mir zu umständich in diesem Fall, daher bin ich bei den Formeln geblieben.
Die weiteren Abfragen haben dann als Ursprung diese von Hand erstellte Tabelle.
Mit anderen Worten, damit die Ergebnisse der weiteren Abfragen stimmen, müssen vorher die XVERWEIS Formeln die richtigen Ergebnisse liefern. Die Ergebnisse ändern sich wiederum durch aktualisieren der CSV Dateien.
Mir schwebt inzwischen eine Lösung vor, die Abfragen mit VBA aktualisieren zu lassen und notfalls Timer einzubauen wenn es nicht anders geht.
Aber ich bin zzt dabei mir VBA beizubringen. Ich würde gerne selbst erstmal mein Glück versuchen, bevor ihr da was postet.
Christian
Anzeige
AW: Verbindungen aktualisieren
06.02.2023 18:56:36
Yal
Hallo Christian,
wir können dich nicht zu deinem Glück zwingen, aber die Mischung Formel/PQ wird dich auf langer Sicht nicht glücklich machen.
Mit einem Entpivotieren kannst Du Daten, die Spaltenweise abgelegt sind (Üebrschrift: Januar, Februar, ..., darunter Werte) in zwei Spalten umwandeln: Monat und Wert.
Darauf kannst Du einen Join machen, der wesentlich schneller sein wird als die XVerweise.
Quelldatei1 -> Abfrage1
Quelldatei2 -> Abfrage2
Quelldatei3 -> Abfrage3
Abfrage1 & Abfrage2 & Abfrage3 -> Abfrage4
Wenn es klemmt, speckt dein Datei ab, beseitige, was nicht ins Netz gehört und poste den Rest hier. Es müssen genug Daten übrig sein, dass man was daraus machen kann.
VG
Yal
Anzeige
AW: Verbindungen aktualisieren
06.02.2023 20:28:50
Christian
Hallo Yal,
danke erstmal für das Angebot. Jedoch in der Mappe steckt im Rahmen der Weiterverarbeitung der Sachen hier eine Formel, wo wir uns hier im Forum (in Person neopaC und ChrisL) schon länger einig sind, dass es wenn überhaupt möglich ist, es in PQ umzusetzen, es extrem aufwändig würde. Also wäre die Umsetzung der XVERWEIS Formeln auch nur eine Teillösung, mit der immer noch eine Formel in der Tabelle verbleibt (ich hab ja schon sehr vieles in der Mappe mit PQ gemacht).
Ich komme immer noch nicht weg von meiner Idee, alles, angefangen von runterladen aktualisierter CSV Dateien (dieses Makro habe ich schon) über aktualisieren der Abfragen bis zu Berechnung der Formeln per Makro zu machen. Dann ist es egal wie lange es dauert, das kann ich starten, Kaffee trinken gehen, fertig.Und es wäre ne spannende Übung für mich.
Christian
Anzeige
AW: Verbindungen aktualisieren
06.02.2023 20:48:52
Yal
Hallo Christian,
wenn sowohl Neopa und Chris der gleiche Meinung sind, werde ich nicht versuchen es zu widerlegen.
Du könntest unter laufenden Makrorekorder eine Anfrage aktualisieren. Dann hättest Du den fehlende Glied, um die Aktualisierung über VBA zu steuern.
VG
Yal
Mein VBA Versuch (funktioniert)
08.02.2023 08:56:25
Christian
So, mein Versuch, nicht wundern, ich habe noch einiges mehr in das Makro integriert als bislang hier angesprochen.
Hauptmakro:

Sub Makro1()
    
    Application.ScreenUpdating = False
    
    If Dir("C:\Users\Christian\Downloads\*.csv", vbNormal) > "" Then
        Kill "C:\Users\Christian\Downloads\*.csv"
    End If
    
ActiveWorkbook.FollowHyperlink "https://www.imdb.com/list/ls562083064/export?ref_=nmls_exp"
ActiveWorkbook.FollowHyperlink "https://www.imdb.com/list/ls562085984/export?ref_=ttls_exp"
ActiveWorkbook.FollowHyperlink "https://www.imdb.com/list/ls562434110/export?ref_=nmls_exp"
        
    Application.Wait (Now + TimeValue("0:00:25"))
        
    ActiveWorkbook.Connections("Abfrage - Filme1").Refresh
    ActiveWorkbook.Connections("Abfrage - Leute1").Refresh
    
    Application.Run Ergebnis
    
    ActiveWorkbook.Connections("Abfrage - Alle_Film").Refresh
    
    Application.Run Rang
    
    ActiveWorkbook.Connections("Abfrage - U30_Datum").Refresh
    ActiveWorkbook.Connections("Abfrage - U30").Refresh
    
    Application.Run Rang2
         
    With Worksheets("Filme")
        .Columns("A:Q").EntireColumn.AutoFit
    End With
    
    With Worksheets("Leute")
        .Columns("A:H").EntireColumn.AutoFit
    End With
 
    With Worksheets("30")
        .Columns("A:H").EntireColumn.AutoFit
        .Columns("J:R").EntireColumn.AutoFit
        .Columns("T:AB").EntireColumn.AutoFit
    End With
    
    With Worksheets("Ergebnis")
        .Columns("A:G").EntireColumn.AutoFit
    End With
    
    With Worksheets("NV")
        .Columns("A:G").EntireColumn.AutoFit
        .Columns("C:C").Font.Italic = True
        .Columns("C:C").Font.Bold = False
        '.Columns("C:C").Font.Name = "Calibri"
        .Columns("C:C").Font.Size = 11
        .Columns("C:C").HorizontalAlignment = xlCenter
    End With
    
    With Worksheets("Punkte")
        .Columns("A:BK").EntireColumn.AutoFit
    End With
    
    With Worksheets("letzte")
        .Columns("A:C").EntireColumn.AutoFit
    End With
    
    
    
    
    Application.ScreenUpdating = True
    
    Sheets("Punkte").Select
    
    
    
End Sub
Das Makro Ergebnis:

Sub Ergebnis()
        Dim loLetzte As Long
        Application.ScreenUpdating = False
        
        Sheets("Ergebnis").Select
                
        With Worksheets("Ergebnis").ListObjects(1).DataBodyRange
             
       With .Columns(2)
       .NumberFormat = "General"
       .FormulaLocal = "=XVERWEIS(A2;Filme!B:B;Filme!F:F;"""";0;1)"
       .NumberFormat = "@"
       .Formula = .Value2
       End With
       
       With .Columns(3)
       .FormulaLocal = "=WENN(XVERWEIS(A2;Filme!B:B;Filme!N:N;"""";0;1)=0;"""";XVERWEIS(A2;Filme!B:B;Filme!N:N;"""";0;1))"
       .Formula = .Value2
       End With
       
       With .Columns(5)
       .FormulaLocal = "=XVERWEIS(D2;Leute!B:B;Leute!F:F;"""";0;1)"
       .Formula = .Value2
       End With
       
       With .Columns(6)
       .FormulaLocal = "=WENN(XVERWEIS(D2;Leute!B:B;Leute!H:H;"""";0;1)=0;"""";XVERWEIS(D2;Leute!B:B;Leute!H:H;"""";0;1))"
       .Formula = .Value2
       End With
       
        With .Columns(7)
        .FormulaLocal = "=XVERWEIS(A2;Filme!B:B;Filme!H:H;"""";0;1)"
        .Formula = .Value2
        End With
        
       End With
        
       With Worksheets("Ergebnis")
       loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=.Range("C2:C" & loLetzte), SortOn:=xlSortOnValues, _
            Order:=xlDescending, DataOption:=xlSortNormal
            .Sort.SortFields.Add Key:=.Range("F2:F" & loLetzte), SortOn:=xlSortOnValues, _
            Order:=xlDescending, DataOption:=xlSortNormal
            With .Sort
                .SetRange Range("A2:G" & loLetzte)
                .Header = xlNo
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
            .Range("A2").Select
      End With
                            
            Application.CutCopyMode = False
            Application.ScreenUpdating = True
     End Sub
Das Makro Rang:
Sub Rang()
        Application.ScreenUpdating = False
        
        Sheets("30").Select
                
        With Worksheets("30").ListObjects(1).DataBodyRange
             
       With .Columns(8)
       .FormulaLocal = "=RANG(F2;F$2:F2;0)"
       .Formula = .Value2
       End With
                 
                 
                 .Range("A1").Select
           End With
            Application.CutCopyMode = False
            Application.ScreenUpdating = True
     End Sub
Das Makro Rang2:

Sub Rang2()
        Application.ScreenUpdating = False
        
        Sheets("30").Select
                
        With Worksheets("30").ListObjects(2).DataBodyRange
             
       With .Columns(9)
       .FormulaLocal = "=ZÄHLENWENN(U:U;M2)"
       .Formula = .Value2
       End With
       
       End With
       
       With Worksheets("30").ListObjects(3).DataBodyRange
                 
       With .Columns(9)
       .FormulaLocal = "=ZÄHLENWENN(M:M;U2)"
       .Formula = .Value2
       End With
                 
                 .Range("A1").Select
           End With
            Application.CutCopyMode = False
            Application.ScreenUpdating = True
     End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige