Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1572to1576
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

VBA - SUBs prokotollieren

VBA - SUBs prokotollieren
16.08.2017 22:56:52
WalterK
Schönen Abend,
ich habe ein Makro "BEGINN" aus dem auch diverse andere Makros mit Call gestartet werden.
Gibt es eine Möglichkeit, nach dem Start des Makros "BEGINN" alle danach aufgerufenen Call-Makros StepByStep zu protokollieren.
Danke und Servus, Walter

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - SUBs prokotollieren
17.08.2017 03:57:23
Rainer
Hallo Walter,
das ist relativ einfach, erstelle für jede Sub 2 globale Variablen, z.B.

Public START_BEGINN As Boolean, ENDE_BEGINN As Boolean
Public START_STEP1 As Boolean, ENDE_STEP1 As Boolean
Sub Beginn()
START_BEGINN = True
ENDE_BEGINN = False
'Do something important
Call Step1
If SomethingImportant = False Then
Exit Sub
End If
ENDE_BEGINN = True
End Sub
Sub Step1()
START_STEP1 = True
ENDE_STEP1 = False
'Do something important
ENDE_STEP1 = True
End Sub
Diese Variablen zeigen dir dann den Zustand der Subs an, aber du musst aufpassen falls die Subs noch zusätzliche Abbruchbedingungen enthalten. Im Beispiel kann die Sub durch eine If-Bedingung beendet werden, das ist kein Codefehler, würde aber die Variable "ENDE" nicht TRUE setzen.
Beim nächsten Durchlauf haben dann aber alle Variablen den alten Wert, wenn nicht zurückgesetzt wurde (z.B. durch Deklaration oder den Befehl "End".
Gruß,
Rainer
Anzeige
AW: VBA - SUBs prokotollieren
17.08.2017 12:02:33
fcs
Hallo Walter,
im Prinzip ähnlicher Ansatz wie Rainer - protokolliert werden jedochName und Startzeit.
Es wird aber ein Daten-Array für die Protokollierung benutzt.
Zum Schluss wird das Protokoll in einem Tabellenblatt ausgegeben.
In jedes Makro, das protokolliert werden soll, muss in der 1. Zeile bzw. unmittelbar nach der Deklaration der Variablen das Makro zum Protokollieren eingefügt werden.
Der Aufruf am Ende zur Erfasung der Ende-Zeit oder anderer Infos muss nicht unbedingt sein.
Über die Variable bolMakeProtokoll im Beginn-Makro kannst du vorgeben, ob ein Protokoll erstellt werden soll.
Gruß
Franz
'Code zum Protokollieren von Makroabläufen in einem allgemeinen Modul der Datei
Option Explicit
'Variablen für Protokoll
Public pProtokoll(), pCount As Long, bolMakeProtokoll As Boolean
'Deklarationen für Timer-Funktion
Private Declare Function getFrequency Lib "kernel32" _
Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long
Private Declare Function getTickCount Lib "kernel32" _
Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long
Public Function MicroTimer() As Double
' Returns seconds.
Dim cyTicks1 As Currency
Static cyFrequency As Currency
MicroTimer = 0
' Get frequency.
If cyFrequency = 0 Then getFrequency cyFrequency
' Get ticks.
getTickCount cyTicks1
' Seconds
If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency
End Function
'Makro zum Erfassen der Protokolleinträge
Public Sub prcProtokoll(strProcedureName As String, Optional bolStart As Boolean = True, _
Optional var3 As Variant)
If bolMakeProtokoll = False Then Exit Sub
If bolStart = True Then
pCount = pCount + 1
ReDim Preserve pProtokoll(1 To 3, 1 To pCount)
pProtokoll(1, pCount) = strProcedureName
pProtokoll(2, pCount) = MicroTimer 'Prozedur wurde gestartet um
pProtokoll(3, pCount) = ""
Else
If IsMissing(var3) Then var3 = MicroTimer
pProtokoll(3, pCount) = var3
End If
End Sub
'Code in beliebigen Modulen in der Datei
Sub Beginn()
'vorbereiten Protokollerstellung
bolMakeProtokoll = True 'False = Es wird kein Protokoll erstellt
'Protokoll zurücksetzen
Erase pProtokoll
pCount = 0
'Protokoll starten
Call prcProtokoll("Beginn")
'Do something important
Call Step1
If VBA.Int((10 - 1) * Rnd()) + 1 > 5 Then
Call Step2
Else
Call Step3
End If
Benden:
If pCount > 0 Then
pProtokoll(3, 1) = MicroTimer 'Ende des Beginn-Makros eintragen
'Protokoll in neues Blatt ausgeben
Dim wkbProtokoll As Workbook
Set wkbProtokoll = Application.Workbooks.Add(Template:=xlWBATWorksheet)
With wkbProtokoll.Worksheets(1)
.Cells(1, 1) = "Makro-Procedur"
.Cells(1, 2) = "Start-Sekunde"
.Cells(1, 3) = "Ende-Info"
.Cells(2, 1).Resize(pCount, 3) = Application.WorksheetFunction.Transpose(pProtokoll)
.Columns(2).NumberFormat = "#,##0.0000"
.Columns(3).NumberFormat = "#,##0.0000"
.Columns.AutoFit
End With
Erase pProtokoll
pCount = 0
Else
'    MsgBox "Prozeduraufrufe nicht protokolliert"
End If
End Sub
Sub Step1()
Dim lngK As Long
Call prcProtokoll("Step1")
'Do something important
For lngK = 1 To 250000
Next
Call prcProtokoll("", bolStart:=False, var3:=Format(MicroTimer, "#,##0.0000") & " Step1 bis  _
End gelaufen")
End Sub
Sub Step2()
Call prcProtokoll("Step2")
'Do something important
Application.Wait Now + TimeSerial(0, 0, 1)
Call prcProtokoll("", bolStart:=False)
End Sub
Sub Step3()
Call prcProtokoll("Step3")
'Do something important
MsgBox "Testmeldung Step 3", vbOKOnly, "Test Procedure-Protokoll"
Call prcProtokoll("", bolStart:=False)
End Sub

Anzeige
Hallo Rainer und Franz. Besten Dank, ich ...
17.08.2017 19:49:37
WalterK
...werde jetzt versuchen alles zum Laufen zu bringen.
Bin ja mal gespannt.
Danke nochmals und Servus, Walter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige