abwarten bis makrobefehl ausgeführt ist bevor nächster Befehl ablä

16/01/2010 - 06:28 von Haslerenwilli | Report spam
Ich habe in über 100 Dateien Bezug von externen Daten (Excel-Tabelle) und
möchte diese aktuakisieren. Meine Überlegung ist, eine nach der anderen zu
öffnen und zu aktualisieren und zu speichern und wieder schliessen. Dochbeim
speichern erscheint die Meldung, dass die Aktualisierung noch nicht
abgeschlossen sei. Die Datei selbst wird beim öffnen automatisch aktualisiert
aber das Makro làuft weiter, ohne die aktualisierumg der geöffneten Datei
abzuwarten. Kann mir da bitte jemand helfen Mein Makro wie folgt
Workbooks.Open Filename:="C:\Börse\Schweizer Aktien\ABB LTD N a.265.xlsm"
Sheets("Kurs Trendlinie").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Differenz 8 und 25").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Momentum").Select
neuPrüfen = MsgBox("Willst Du weitere Aktien anschauen?", vbYesNo)
If neuPrüfen = vbNo Then
Exit Sub
End If

Workbooks.Open Filename:="C:\Börse\Schweizer Aktien\Actelion N a.466.xlsm"
Windows("ABB LTD N a.265.xlsm").Activate
ActiveWorkbook.Save
Windows("Actelion N a.466.xlsm").Activate
Sheets("Kurs Trendlinie").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Differenz 8 und 25").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Momentum").Select
neuPrüfen = MsgBox("Willst Du weitere Aktien anschauen?", vbYesNo)
If neuPrüfen = vbNo Then
Exit Sub
End If

Workbooks.Open Filename:="C:\Börse\Schweizer Aktien\Adecco N a.018.xlsm"
Windows("Actelion N a.466.xlsm").Activate
ActiveWorkbook.Save
Windows("Adecco N a.018.xlsm").Activate
Sheets("Kurs Trendlinie").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Differenz 8 und 25").Select
neuPrüfen = MsgBox("weiter", vbYes)
Sheets("Momentum").Select
neuPrüfen = MsgBox("Willst Du weitere Aktien anschauen?", vbYesNo)
If neuPrüfen = vbNo Then
Exit Sub
End If

besten Dank und freundliche Grüsse Haslerenwilli
 

Lesen sie die antworten

#1 Andreas Killer
16/01/2010 - 11:36 | Warnen spam
Haslerenwilli schrieb:

Ich habe in über 100 Dateien Bezug von externen Daten (Excel-Tabelle) und
möchte diese aktuakisieren. Meine Überlegung ist, eine nach der anderen zu
öffnen und zu aktualisieren und zu speichern und wieder schliessen. Dochbeim
speichern erscheint die Meldung, dass die Aktualisierung noch nicht
abgeschlossen sei. Die Datei selbst wird beim öffnen automatisch aktualisiert
aber das Makro làuft weiter, ohne die aktualisierumg der geöffneten Datei
abzuwarten.


Dann hast Du wahrscheinlich die Hintergrund-Aktualisierung an, leider
zeigt Dein Code keinerlei Info's darüber wie die Art der
Aktualisierung ist, daher muss ich ein wenig raten.

Der Part von/bis
With WS.QueryTables(1)
End With
prüft ob die Abfrage abgeschlossen ist und solange kannst Du in der
Statuszeile eine Meldung sehen. Das ganze làuft in einer Schleife bis
eine Taste gedrückt wurde. Wàhrend dieser Zeit kannst Du Dich frei in
Excel und anderswo bewegen, erst dann kommt die Abfrage "Weiter?"

Wenn Du diesen Part löscht làuft das Makro wie Dein ursprüngliches.

Andreas.

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal _
vKey As Long) As Integer

Private Function KeyPressed() As Boolean
Dim Cnt As Long
For Cnt = 32 To 128
If GetAsyncKeyState(Cnt) <> 0 Then
KeyPressed = True
Exit Function
End If
Next Cnt
End Function

Sub Test()
Dim FNames(), I As Integer
Dim SNames(), J As Integer
Dim WB As Workbook, WS As Worksheet
Dim Antwort As VbMsgBoxResult

'Liste aller Mappen
FNames = Array( _
"C:\Börse\Schweizer Aktien\ABB LTD N a.265.xlsm", _
"C:\Börse\Schweizer Aktien\Actelion N a.466.xlsm", _
"C:\Börse\Schweizer Aktien\Adecco N a.018.xlsm")

'Liste aller Tabellen in jeder Mappe
SNames = Array( _
"Kurs Trendlinie", _
"Differenz 8 und 25", _
"Momentum")

'Durchlaufe alle Mappen
For I = LBound(FNames) To UBound(FNames)
'Wenn Fehler, dann nàchste Mappe
On Error GoTo NextBook
'Mappe öffnen
Set WB = Workbooks.Open(FNames(I))
'Durchlaufe alle Tabellen
For J = LBound(SNames) To UBound(SNames)
'Wenn Fehler dann nàchste Tabelle
On Error GoTo NextSheet
'Tabelle anwàhlen
Set WS = Sheets(SNames(I))
WS.Select

With WS.QueryTables(1)
'In der Statuszeile das was làuft
Application.StatusBar = "Tabelle aktualisiert..."
'Solange im Hintergrund aktualisiert wird
Do While .Refreshing
'Zeit für andere Tasks freigeben
DoEvents
'Wurde eine Taste gedrückt?
If KeyPressed Then
Antwort = MsgBox("Tabelle wird gerade aktualisiert" & _
". Abbrechen?", vbYesNo)
If Antwort = vbYes Then
'Aktualisierung abbrechen
.CancelRefresh
Exit Do
End If
End If
Loop
'Wir sind fertig
Application.StatusBar = False
'Schleife bis eine Taste gedrückt wird
Do While Not KeyPressed
DoEvents
Loop
End With

'Weiter?
Antwort = MsgBox("Weiter?", vbYesNo)
If Antwort = vbNo Then Exit For
NextSheet:
Next
'Mappe wieder zu und speichern
WB.Close SaveChanges:=True
Antwort = MsgBox("Willst Du weitere Aktien anschauen?", _
vbYesNo)
If Antwort = vbNo Then Exit For
NextBook:
Next
End Sub

Ähnliche fragen