| Autor |
Nachricht |
mark28
Im Profil kannst Du frei den Rang ändern
Verfasst am: 02. Apr 2008, 15:18 Rufname:
|
|
| Version: Office 2003 |
|
Guten Tag,
ich benötige Hilfe bei meiner kleinen VBA Programmierung
Ich habe eine Fehlerberichterstattung programmiert, die beim autreten eines Fehlers eine E-Mail an den Admin mit folgenden Daten versendet:
- Fehlerbeschreibung (err.description)
- Aktuelle Zellenposition
- Aktuelles Tabellenblatt
- einen Screenshot
- Datum
- Benutzer
- Dateipfad
- Dateinamen
Mein Problem ist, das diese Berichte nicht besonders aussagekräftig sind.
Ich benötige den Namen des Makros, in dem der Fehler aufgetreten ist und die Zeile des Codes der den Fehler verursacht hat.
für jede Hilfe wäre ich sehr Dankbar.
Anbei der Code:
| Code: | Option Explicit
Public Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) |
| Code: | Sub Makro1()
'Beispielmakro zur Überwachung von Fehlern
'Variablendefinition
Dim fehler
Dim janein
'Sicherheitsschleife Start
On Error GoTo fehler
ActiveCell.FormulaR1C1 = "jkh"
'Sicherhietsschleife Ende
End
fehler:
'Screenshot machen
keybd_event &H2C, 1, 0, 0
DoEvents
'Fehlermeldung anzeigen
MsgBox Err.Description
'Abfrage ob Fehlerbericht gesendet werden soll
janein = MsgBox("Wollen Sie einen Fehlerbericht an den Admin senden?", vbYesNo)
'Fehlerberichtprogrammteil ausführen
If janein = 6 Then
Call Fehlerbericht
End If
End Sub |
| Code: | Sub Fehlerbericht()
'Fehlerberichterstellung und Versenden über E-Mail an Admin
'Benutzeransicht sperren
Application.ScreenUpdating = False
Application.EnableEvents = False
'Variablendefinition
Dim areihe
Dim aspalte
Dim Emailxls
Dim Dateiname
Dim Dateipfad
Dim makroname
'Variablen Wert zuweisen
areihe = ActiveCell.Row
aspalte = ActiveCell.Column
Dateiname = ActiveWorkbook.name
Emailxls = "C:\Dokumente und Einstellungen\" & Environ("username") & "\Desktop\Fehlerbericht_" & Sheets(1).name & "_" & Date & ".xls"
Dateipfad = ActiveWorkbook.Path
makroname = "Makro1"
'Tabellenblatt erstellen
Workbooks.Add
'Screenshot einfügen
ActiveSheet.Paste
ActiveWindow.DisplayGridlines = False
ActiveWindow.Zoom = 50
'Zwischenspeichern
ActiveWorkbook.SaveAs Filename:=Emailxls
ActiveWorkbook.Close SaveChanges:=False
'Email versenden
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add "admin@web.de"
'Betreff
.Subject = "Fehlermeldung"
'Nachricht
.Body = "Fehlerbericht: " & Sheets(1).name & vbCrLf & vbCrLf & "Benutzer: " & Environ("username") & vbCrLf & "Datum: " & Date & vbCrLf & vbCrLf & "Aktive Tabelle: " & Sheets(1).name & vbCrLf & "Aktive Reihe: " & areihe & vbCrLf & "Aktive Spalte: " & aspalte & vbCrLf & "Fehler in Makro: " & makroname & vbCrLf & vbCrLf & "Fehlerbeschreibung: " & vbCrLf & "-------------------------------------------------" & vbCrLf & Err.Description
'Lesebestätigung aus
.ReadReceiptRequested = False
'Dateianhang
.attachments.Add Emailxls
.Send
End With
Set olApp = Nothing
'Fehlerbericht löschen
Kill Emailxls
'Benutzeransicht zurücksetzten
Windows(Dateiname).Activate
Cells(areihe, aspalte).Select
'Benutzeransicht öffnen
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub |
Gruß Mark
|
|
RO_SCH
Mädchen für alles
Verfasst am: 02. Apr 2008, 19:46 Rufname: Roland
Wohnort: Nürnberg
|
| |
| Version: Office 2003 |
|
Hi mark28,
um das aktuelle Codemodul in dem der Fehler auftritt zu erhalten,
definiere makroname in der Fehlerroutine, bevor du die Fehlerbehandlung
aufrufst, mit
makroname = Application.VBE.ActiveCodePane.CodeModule
und übergib 'makroname' als Variable an die Prozedur. Viel mehr wird da nicht möglich sein, ohne eine rießige Fehlerüberwachungs-Klasse zu schreiben.
_________________ De nihilo nihil fit
Gruß Roland
|
|
mark28
Im Profil kannst Du frei den Rang ändern
Verfasst am: 03. Apr 2008, 08:32 Rufname:
|
|
| Version: Office 2003 |
|
Vielen Dank für Deine Hilfe
Das mit der Variable hab ich getestet. Mann muss zwar die Sicherheitseinstellungen ein wenig ändern (Vertrauen von ...) aber sonst gehts.
Leider gibt mir der Code nur das Modul, in den die Prozedur liegt wieder.
Gibt es eine Moglichkeit den Namen des momentan aktiven Prozedur auszugeben?
Beim probieren hab ich die Eigenschaft
Application.VBE.ActiveCodePane.CodeModule.CountOfLines
gefunden. Die gibt die Anzahl der Zeilen im Modul wieder. Geht das auch für die aktuelle Zellenpos?
Vorab Danke für Deine Antwort
Gruß Mark
|
|
RO_SCH
Mädchen für alles
Verfasst am: 04. Apr 2008, 15:23 Rufname: Roland
Wohnort: Nürnberg
|
|
| Version: Office 2003 |
|
Hi Mark,
Function und Subs werden in VBA nicht einzeln genommen. Das sind einfach CodeLines im Modul.
so weit ich das schon mal probiert habe, geht das so nicht, denn du bleibst ja nicht in der Zeile mit dem Fehler stehen, sondern läufst in den ErrorHandler hinein, der ja schon wieder in einer anderen Zeile steht.
Die einzige Chance wäre eine Fehlerroutine zu schreiben, die aus einer Klasse überwacht, ob ein Fehler auftritt - so ähnlich wie Microsoft selbst die Fehler abfängt und dann eine Meldung ausgibt - da das jedoch relativ kompliziert ist, dürfte sich das für durchschnittliche Excel-Programmierung aber wohl kaum rentieren.
_________________ De nihilo nihil fit
Gruß Roland
|
|
mark28
Im Profil kannst Du frei den Rang ändern
Verfasst am: 07. Apr 2008, 11:20 Rufname:
|
| |
| Version: Office 2003 |
|
Vielen Dank für Deine Antwort.
Hab mir jetzt überlegt, dass ich eine Hilfsvariable im Code mitlaufen lasse.
Z=1
Code
z=z+1
Code
z=z+1
Code
z=z+1
Code
z=z+1
Diese Variable und den Makronamen (per Hand eingetragen) übergebe ich dann an die Fehlerberichterstattung.
Ist zwar recht aufwendig aber führt zu einer Lösung.
Danke nochmal
Gruß Mark
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen
|
| |

|
|
| Verwandte Themen |
| Forum / Themen |
Antworten |
Autor |
Aufrufe |
Letzter Beitrag |
 |
Excel VBA (Makros): Verzeichnis erstellen |
23 |
corum |
220 |
07. März 2010, 08:10 corum  |
 |
Excel Auswertungen: Liniendiagramm aus Zellen mit Formeln erstellen |
11 |
La Panadera |
209 |
10. Feb 2010, 15:04 La Panadera  |
 |
Excel Auswertungen: kategoriales Blasendiagramm erstellen |
0 |
MXL |
306 |
20. Jul 2009, 19:16 MXL  |
 |
Excel Auswertungen: Diagramme in Excel 2007 so erstellen wie in Excel 2003 |
5 |
Mani_89 |
1443 |
02. März 2009, 05:38 Mani_89  |
 |
Excel Formeln: Dynamische dropdown Liste erstellen |
5 |
Gast |
1235 |
11. Nov 2008, 16:15 neopa  |
 |
Excel VBA (Makros): *Pro* Click-Ereignis zur Laufzeit zuordnen / erstellen |
11 |
SeppelFred |
404 |
17. Jul 2008, 15:07 TypMens  |
 |
Excel VBA (Makros): tabellenblätter erstellen und namen vergeben |
1 |
Gast |
312 |
08. Mai 2008, 20:53 losgehts  |
 |
Excel Formeln: SVerweis, Ende der Matrix variabel erstellen |
4 |
Shranks |
1121 |
18. Apr 2008, 16:06 Shranks  |
 |
Excel Hilfe: "Master"-Adressdatei erstellen und verknüpfen |
3 |
HinzundKunz |
409 |
19. Nov 2007, 18:45 Thomas Ramel  |
 |
Excel Auswertungen: Mit Sollwert (16,20€) durchgehende Linie erstellen |
4 |
Gast |
1324 |
25. Jul 2007, 09:48 Gast  |
 |
Excel VBA (Makros): "Bitte warten"-Fenster erstellen? |
8 |
Zonk |
4048 |
27. Sep 2006, 10:57 Zonk  |
 |
Excel Hilfe: Ligatabelle mit Excel automatisch erstellen. |
5 |
SoulRISE |
3753 |
25. Aug 2006, 20:46 ransi  |
| |
|