Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1636to1640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro startet automatisch wieder???

Makro startet automatisch wieder?
10.08.2018 09:42:52
Torsten
Hallo Excel Gemeinde,
habe wieder mal ein kleines Problemchen. Zur Lage:
Unten werde ich die Makros anzeigen.
Ich mache per SendKeys 3 verschiedene Listenabfragen ( Makros SAP_call_21G_1, SAP_call_21G_2, SAP_call_local) in SAP. Diese Listen kopiere ich ueber die Zwischenablage in meine Exceldatei in ein speziell angelegtes Sheet dafuer. Nachdem die 3 Listen dort eingefuegt sind, starte ich automatisch das Makro zum Zaehlen der Zeilen (Makro count_new_lines) fuer die jeweilige PG (gezaehlt wird in Spalte N in Sheet "Clipboard"). Diese werden dann in der richtigen Spalte und Zeile im Sheet "Dashboard" eingefuegt.
Bis dahin funktioniert das auch wunderbar. Habe am Schluss eine Msgbox eingefuegt, damit der Benutzer weiss, dass der Vorgang abgeschlossen ist.
Jetzt kommt mein Problem:
Nach klick auf OK in der Msgbox werden die gerade gemachten Eintraege wieder geloescht und es startet immer automatisch wieder das Makro SAP_call_local und ich hab keine Idee, warum das passiert.
Kann mir jemand sagen, warum das kommt?
Hier die Codes:

Option Explicit
Sub SAP_call_21G_1()
AppActivate ("Dynamic availability check, display table contents from ZMM_ZDAC")
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{F5}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys ("21G_MISS_1_NEW"), True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{DOWN 2}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{End}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{Delete}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:05"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:30"))
SendKeys "^{a}", True
Application.Wait (Now + TimeValue("0:00:06"))
SendKeys "^{c}", True
Application.Wait (Now + TimeValue("0:00:02"))
On Error GoTo errorhandler
With ThisWorkbook.Sheets("CLIPBOARD")
.Cells(1, 1).PasteSpecial
End With
Call SAP_call_21G_2
errorhandler: Call SAP_call_21G_2
End Sub
Sub SAP_call_21G_2()
AppActivate ("Dynamic availability check, display table contents from ZMM_ZDAC")
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F3}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{F5}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys ("21G_MISS_2_NEW"), True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{DOWN 2}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{End}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{Delete}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:05"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:30"))
SendKeys "^{a}", True
Application.Wait (Now + TimeValue("0:00:06"))
SendKeys "^{c}", True
Application.Wait (Now + TimeValue("0:00:02"))
On Error GoTo errorhandler
With ThisWorkbook.Sheets("CLIPBOARD")
.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
End With
Call SAP_call_local
errorhandler: Call SAP_call_local
End Sub
Sub SAP_call_local()
AppActivate ("Dynamic availability check, display table contents from ZMM_ZDAC")
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F3}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{F5}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys ("TW_LOCAL_MISS"), True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{DOWN 2}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "+{End}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{Delete}", True
Application.Wait (Now + TimeValue("0:00:02"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:05"))
SendKeys "{F8}", True
Application.Wait (Now + TimeValue("0:00:30"))
SendKeys "^{a}", True
Application.Wait (Now + TimeValue("0:00:06"))
SendKeys "^{c}", True
Application.Wait (Now + TimeValue("0:00:02"))
On Error GoTo errorhandler
With ThisWorkbook.Sheets("CLIPBOARD")
.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial
End With
Call count_new_lines
errorhandler: Call count_new_lines
End Sub

Option Explicit
Sub count_new_lines()
Dim WSSource As Worksheet: Set WSSource = Worksheets("CLIPBOARD")
Dim WSTarget As Worksheet: Set WSTarget = Worksheets("Dashboard")
Dim val As String, tDate As String
Dim cnt As Long, fstRow As Long, lstRow As Long
Dim Srng As Range, tRow As Range, tColumn As Range, PGrng As Range
Set Srng = WSSource.Range("N:N")
For Each PGrng In WSTarget.Range("A191:A203")
val = PGrng.Value
cnt = WorksheetFunction.CountIf(Srng, val)
tDate = Format(Date, "dd")
Set tRow = WSTarget.Columns(31).Find(What:=val, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Set tColumn = WSTarget.Rows(3).Find(What:=tDate, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Cells(tRow.Row, tColumn.Column).Value = cnt
Next
WSSource.UsedRange.Rows.EntireRow.Delete
AppActivate (Application.Caption)
MsgBox "Daily income finished"
ThisWorkbook.Save
WSTarget.Activate
WSTarget.Range("A1").Select
End Sub
Hier noch eine abgespeckte Version der Datei mit Dummy Daten in Sheet "Clipboard".
https://www.herber.de/bbs/user/123252.xlsm
Gruss und Danke
Torsten

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro startet automatisch wieder?
10.08.2018 10:02:55
PeterK
Hallo
Vorsicht mit deinem "errorhandler". Wenn kein Fehler ist mußt du diesen Teil umgehen! Ansonsten wird auch dieser Code abgearbeitet.
AW: Makro startet automatisch wieder?
10.08.2018 10:22:39
Torsten
Der errorhandler ist nur fuer den Fall, dass die Liste in SAP leer ist. Dann kommt ein Error, da nichts zum Einfuegen da ist. Aber den hab ich auch schon auskommentiert, um zu sehen, ob es daran liegt. Aber auch dann passiert das oben beschriebene, dass der Code bei SAP_call_local wieder startet.
AW: Makro startet automatisch wieder?
10.08.2018 10:28:06
PeterK
Hallo
Call count_new_lines -- der erste Aufruf (wenn kein Fehler passiert ist
errorhandler: Call count_new_lines -- der zweite Aufruf!!!! (Diese Zeile wird auch abgearbeitet)
Du könntest vor Deinem errorhandler ein "exit sub" einfügen.
Anzeige
AW: Makro startet automatisch wieder?
10.08.2018 13:33:34
Torsten
ja aber der errorhandler sollte doch eigentlich nur bei einem error greifen.
Deswegen heisst es doch: On Error GoTo errorhandler. Ansonsten nicht.
AW: Makro startet automatisch wieder?
10.08.2018 13:46:12
PeterK
Hallo
Der ErrorHandler ist nur eine Sprungaddresse/Sprungziel. VBA arbeitet aber ALLE Zeilen des Makros ab (auch jene nach dem Sprungziel), daher solltest Du entsprechende Massnahmen ergreifen, dass dein Makro im normalen Ablauf die Befehle des ErrorHandlers nicht "erreicht" (z.B. mit einem EXIT SUB vor dem Sprungziel, oder ein weiteres Sprungziel definieren (z.B. ENDE:) und dieses dann mit GOTO ENDE anspringen.

Call SAP_call_21G_2
goto ende
errorhandler:
Call SAP_call_21G_2
ende:
End Sub

Anzeige
AW: Makro startet automatisch wieder?
10.08.2018 16:49:44
Torsten
Danke dir Peter.
werde das aendern und testen.
Schoenes WE

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige