Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Laufbalken an VBA Code koppeln
#1
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!!!
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten Top
#2
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
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."
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten Top
#4
Hallo Bernd,

welchen Wert hat die Variable lngC zu dem Zeitpunkt der Fehlermeldung? Und könntest Du die Datei vielleicht hier hochladen?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#5
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?!?
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten Top
#6
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.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#7
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#8
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.
Grüße aus Bremen
Bernie

"Wenn du jemanden triffst ohne lächeln, schenke ihm deins !!!"

MS Office 2016 Pro  32bit - Win 10 Pro 64 bit
Haftungshinweis: Trotz sorgfältiger inhaltlicher Kontrolle übernehmen ich keine Haftung für die Inhalte externer Links. Für den Inhalt der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Antworten Top
#9
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#10
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste