Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Kalkulation unterdrücken bei Query.Refresh | Herbers Excel-Forum


Betrifft: VBA Kalkulation unterdrücken bei Query.Refresh von: Boris
Geschrieben am: 04.02.2010 14:47:48

Hallo,

obwohl ich gemäß folgendem Skript die Kalkulationseinstellung auf manuell setze, wird (anscheinend durch das qt.refresh) nach jedem Schleifendurchlauf neu kalkuliert. Setze ich die Kalkulation dagegen per Hand vor dem Ausführen des Makros auf manuell, wird nicht kalkuliert. Woran liegt das? In anderen Makros funktioniert untenstehende Kalkulationsabfrage...

Sub Query_Update()
    Dim oldDir As String
    Dim newDir As String
    Dim ws As Worksheet
    Dim qt As QueryTable
    Dim lngCalcStatus As Long
    
    lngCalcStatus = Application.Calculation
    If lngCalcStatus <> -4135 Then Application.Calculation = xlCalculationManual
    
    newDir = ThisWorkbook.Path

    For Each ws In Worksheets
        For Each qt In ws.QueryTables
            If qt.QueryType = xlODBCQuery Then
            oldDir = ExtractDir(qt.Connection)
                If oldDir <> "" Then
                    qt.Connection = Replace(qt.Connection, oldDir, newDir, compare:= _
vbTextCompare)
                    qt.CommandText = Replace(qt.CommandText, oldDir, newDir, compare:= _
vbTextCompare)
                End If
            End If
            qt.Refresh
        Next
    Next
    Application.Calculation = lngCalcStatus
End Sub

Viele Grüße...

  

Betrifft: AW: VBA Kalkulation unterdrücken bei Query.Refresh von: Ramses
Geschrieben am: 04.02.2010 15:24:46

Hallo

dann machs doch einfach mal direkt unter Umgehung der Abfrage
Anstelle von

lngCalcStatus = Application.Calculation
If lngCalcStatus <> -4135 Then Application.Calculation = xlCalculationManual

verwendest du einfach

Application.Calculation = xlCalculationManual

und am Ende

Application.Calculation = xlCalculationAutomatic

und nochmals probieren

Gruss Rainer


  

Betrifft: AW: VBA Kalkulation unterdrücken bei Query.Refresh von: Boris
Geschrieben am: 04.02.2010 18:34:32

Hallo,

das ist doch aber letztendlich das gleiche und führt genau wie vorher dazu, dass nach jedem Schleifendurchlauf kalkuliert wird.

Finde dies sehr merkwürdig. Welchen Unterschied macht es, ob ich die Einstellung manuell oder per Application.Calculation = xlCalculationManual auf manuell setze? Das müsste doch genau das gleiche bewirken?

Viele Grüße...


  

Betrifft: AW: VBA Kalkulation unterdrücken bei Query.Refresh von: Ramses
Geschrieben am: 04.02.2010 19:32:39

Hallo

"...das ist doch aber letztendlich das gleiche..."

Mag so aussehen.,... aber vielleicht ist das Ergebnis der Prüfung nicht das was du, oder EXCEL, erwartet.

Gruss Rainer


  

Betrifft: AW: VBA Kalkulation unterdrücken bei Query.Refresh von: Boris
Geschrieben am: 05.02.2010 09:43:31

Hallo

Ok, aber dennoch führt Dein Vorschlag zum gleichen Ergebnis...

Wenn ich dagegen die beiden Anweisungen Application.Calculation = xlCalculationManual und Application.Calculation = xlCalculationAutomatic je in getrennte Subs packe und dann diese Subs manuell hintereinander aufrufe, funktioniert es:

1 Sub Calc_Manuell () = Application.Calculation = xlCalculationManual
2 Sub Query_Update () = Update der Queries
3 Sub Calc_Automatic () = Application.Calculation = xlCalculationAutomatic

Allerdings löst das jetzt nicht unbedingt mein Problem, da ich ja nicht 3 Subs ausführen will...

Kennt jemand eine Lösung?

Viele Grüße


Beiträge aus den Excel-Beispielen zum Thema "VBA Kalkulation unterdrücken bei Query.Refresh"