Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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)
Registriert seit: 14.04.2014
Version(en): Office 2016 32bit
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
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 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)
|