Clever-Excel-Forum

Normale Version: Laufbalken an VBA Code koppeln
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo zusammen,

kann ich nachfolgenden Code an einen Laufbalken mit % Anzeige koppeln, d.h. ich möchte sehen, wann das Makro fertig.
ODER
Gibt es eine Möglichkeit den Code zu verkürzen bzw. schlanker machen?
Code:
Sub webabfrage_indizes()
   Application.ScreenUpdating = False
   Call tabellen_einblenden
   Sheets("Abf_Dax").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("Abf_TECDAX").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("Abf_MDAX").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("Abf_DOWJONES").Select
   ActiveWindow.LargeScroll Down:=-2
   Range("A1").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("AbfrageDAX").Select
   ActiveWindow.SmallScroll Down:=-210
   Range("A1").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("AbfrageTECDAX").Select
   ActiveWindow.SmallScroll Down:=-18
   Range("A1").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("AbfrageMDAX").Select
   ActiveWindow.SmallScroll Down:=-189
   Range("A1").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Sheets("AbfrageDowJones").Select
   ActiveWindow.SmallScroll Down:=-21
   Range("A1").Select
   Selection.QueryTable.Refresh BackgroundQuery:=False
   Call filter_top
   Call tabellen_ausblenden
   Sheets("Depot").Activate
   Range("A1").Select
   Application.ScreenUpdating = True
End Sub

Vielen Dank schon mal im Voraus!!!
Hallo Bernd,

mal ungetestet (schlankerer Code)

Code:
Sub webabfrage_indizes()
   Dim lngC As Long
   Dim vntArray As Variant
  
   vntArray = Array("Abf_Dax", "Abf_TECDAX", "Abf_MDAX", "Abf_DOWJONES", "AbfrageDAX", "AbfrageTECDAX", "AbfrageMDAX", "AbfrageDOWJONES")
   Application.ScreenUpdating = False
   Call tabellen_einblenden
   For lngC = 0 To UBound(vntArray)
      Worksheets(vntArray(lngC)).QueryTable.Refresh BackgroundQuery:=False
   Next lngC
   Call filter_top
   Call tabellen_ausblenden
   Application.ScreenUpdating = True
End Sub
Hallo Stefan,

entschuldige, dass ich erst jetzt antworte, aber ich hatte gestern unerwarteten Besuch.

Deinen "schlanken" Code habe ich probiert, allerdings bekomme ich eine Fehlermeldung und zwar hier ...
Code:
Worksheets(vntArray(lngC)).QueryTable.Refresh BackgroundQuery:=False

Meldung: "Objekt oder Funktion wird nicht unterstützt."
Hallo Bernd,

welchen Wert hat die Variable lngC zu dem Zeitpunkt der Fehlermeldung? Und könntest Du die Datei vielleicht hier hochladen?
Hallo Stefan,

Laufzeitfehler 438 wird gemeldet und folgender Text: "Object unterstützt diese Eigenschaft oder Methode nicht"

Datei hochladen wird etwas schwierig, da ich sie schon benutze. Vielleicht reicht ja die Fehlermeldung für dich?!?
Hallo Bernd,

leider nein. Den Wert der Variable lngC hast Du mir leider nicht verraten. Diesen kannst Du rausfinden indem Du, wenn die Fehlermeldung kommt, auf debuggen gehst und danach mit dem Mauszeiger über die Variable fährst bzw. wenn Du im Direktfenster (Strg + G) ?lngC eingibst und auf Return drückst.
Hallöchen,

der Fehler sagt, dass das Objekt eine Eigenschaft nicht unterstützt. Objekt wäre in dem Fall das Worksheet, und wenn ich mir in der Überwachung das Blatt anschaue, die QueryTables
Selbige sind eine Aufzählung - auf einem Excelblatt können ja mehrere Bereiche sein, wo Daten eingefügt wurden.
Wenn nur ein Bereich da ist, dann könnte man es vielleicht so versuchen:

Worksheets(vntArray(lngC)).QueryTables(1).Refresh BackgroundQuery:=False
Ihr Beiden,

André hatte den richtigen Riecher. Danke erstmal Euch Beiden!!!

Kurze Frage noch: kann man den Abfrage-Code auf dem Tabellenblatt als Laufbalken darstellen. Denn ich kann nicht erkennen, wann das Makro fertig ist und wenn ich dann zu früh andere Dateioperationen angehe, hängt sich Excel auf.

Wäre schön, wenn es möglich wäre.
Hallo Bernd,

leider ist es in VBA nicht möglich den Fortschrittsbalken zu verwenden. Excel verwendet ihn zwar für das Laden und Speichern von Dateien aber Du selber kommst nicht daran.

Es gibt aber zwei Möglichkeiten so was ähnliches zu realisieren. Einerseits über eine Userform in der Du einen Balken anzeigen lassen kannst andererseits über eine Text in der Statusleiste in der dir angezeigt wird "Bearbeite 1 von 10 Datensätzen".

Für mich selber wäre aber interessant, wo die Zeit verbraten wird, denn Du rufst innerhalb der Prozedur drei weitere Makros auf. Und wer weiß ob überhaupt die QueryTables der große Bremser ist.

Hierzu habe ich das Makro erweitert. Es erscheint nun am Ende des Makros eine MsgBox. Wenn die erscheint, gehe bitte in den VBA-Editor und schaue im Direktfenster die einzelnen Zeiten an.

Code:
Sub webabfrage_indizes()
   Dim lngC As Long
   Dim vntArray As Variant
   Dim dblZeit As Double
  
   vntArray = Array("Abf_Dax", "Abf_TECDAX", "Abf_MDAX", "Abf_DOWJONES", "AbfrageDAX", "AbfrageTECDAX", "AbfrageMDAX", "AbfrageDOWJONES")
   Application.ScreenUpdating = False
   dblZeit = Timer
   Call tabellen_einblenden
   Debug.Print "Tabellen einblenden "; Timer - dblZeit
   dblZeit = Timer
   For lngC = 0 To UBound(vntArray)
      Worksheets(vntArray(lngC)).QueryTables(1).Refresh BackgroundQuery:=False
   Next lngC
   Debug.Print "QueryTables "; Timer - dblZeit
   dblZeit = Timer
   Call filter_top
   Debug.Print "Filter top "; Timer - dblZeit
   dblZeit = Timer
   Call tabellen_ausblenden
   Debug.Print "Tabellen ausblenden "; Timer - dblZeit
   MsgBox "Ich bin fertig", vbInformation
   Application.ScreenUpdating = True
End Sub
Hallo zusammen,

man könnte auch den Vorschlag von Stefan "mixen" und solange der Import läuft einfach nur eine userform ausgeben z.B. mit der Meldung "Finger weg - Import läuft Wink 1 / 8" und diese dann bei jedem neuen Import aktualisieren. Einen Laufbalken müsste man, da man die tatsächlich nötige Zeit nicht kennt, auf 8 Abschnitte entsprechend den Importen aufteilen.
Weitere Varianten wären z.B.:
Man könnte auf einem Tabellenblatt eine entsprechende Textbox als Meldung platzieren.
Oder man ändert den Cursor auf die Sanduhr ...
Seiten: 1 2 3