Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Makro startet automatisch wieder???


Betrifft: Makro startet automatisch wieder??? von: Torsten
Geschrieben am: 10.08.2018 09:42:52

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

  

Betrifft: AW: Makro startet automatisch wieder??? von: PeterK
Geschrieben am: 10.08.2018 10:02:55

Hallo

Vorsicht mit deinem "errorhandler". Wenn kein Fehler ist mußt du diesen Teil umgehen! Ansonsten wird auch dieser Code abgearbeitet.


  

Betrifft: AW: Makro startet automatisch wieder??? von: Torsten
Geschrieben am: 10.08.2018 10:22:39

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.


  

Betrifft: AW: Makro startet automatisch wieder??? von: PeterK
Geschrieben am: 10.08.2018 10:28:06

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.


  

Betrifft: AW: Makro startet automatisch wieder??? von: Torsten
Geschrieben am: 10.08.2018 13:33:34

ja aber der errorhandler sollte doch eigentlich nur bei einem error greifen.
Deswegen heisst es doch: On Error GoTo errorhandler. Ansonsten nicht.


  

Betrifft: AW: Makro startet automatisch wieder??? von: PeterK
Geschrieben am: 10.08.2018 13:46:12

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




  

Betrifft: AW: Makro startet automatisch wieder??? von: Torsten
Geschrieben am: 10.08.2018 16:49:44

Danke dir Peter.

werde das aendern und testen.

Schoenes WE


Beiträge aus dem Excel-Forum zum Thema "Makro startet automatisch wieder???"