Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
980to984
980to984
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schwere Excel-Fehlermeldung erzeugen

Schwere Excel-Fehlermeldung erzeugen
27.05.2008 19:35:56
Timo
Hallo zusammen,
kuriose Frage, aber ernstgemeint: Wie kann ich mir selbst die Fehlermeldung von Excel "Excel.exe hat einen Fehler verursacht und muß geschlossen werden" mit Haken drin, um Excel neuzustarten, erzeugen?
Hintergrund ist folgender: Ich mache Testautomatisierung und lese via VBScript die Testdaten (Excel-Datei) ein. Hin und wieder bricht das Skript leider ab und endet mit der o.g. Fehlermeldung. Ich möchte die Fehlermeldung nun automatisch schließen lassen, wenn sie auftritt. Hierfür muß sie aber einmal mit dem Testautomatisierungstool erfassen...
Danke für Antworten!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schwere Excel-Fehlermeldung erzeugen
27.05.2008 22:42:07
ransi
HAllo Timo
Ich habe zwar keine Ahnung was eine "Testautomatisierung" ist, aber korrigiere deinen Code das der Fehler nicht auftritt.
Excel einen so schweren Fehler verursachen lassen und den dann einfach ignorieren kann einfach nicht der richtige Weg sein....
ransi

AW: Schwere Excel-Fehlermeldung erzeugen
28.05.2008 09:23:41
Timo
Nun gut... Vielleicht kannst du mir dann ja bei dem Code weiterhelfen, ich habe ihn nämlich schon mehrfach gecheckt und weiß beim besten Willen nicht, an welcher Stelle er aus welchem Grund abbricht. Sicher ist irgendwo ein Fehler drin, die Frage ist nur, wo...
Folgendes wird gemacht: Aus der einen Excel-Datei werden alle Spaltenköpfe zeilenweise in eine Textdatei geschrieben.
Da ich am Ende die korrekte Textdatei vorliegen habe, gehe ich davon aus, daß das Skript sporadisch beim Schließen der Arbeitsmappen oder beenden von Excel abbricht.
Option Explicit
'Variablenbelegung
Dim XL, NewWorkbook,OldWorkbook, FSO, DL, Nr, DateiName, i, inhalt, textfile
'Mit dieser Funktion mache ich die Konstanten (xlText, etc. ) von Excel bekannt, ist in VBScript erforderlich
ImportObject "Excel.Application"
'Diese Konstanten-Datei wird bei mir nicht gebraucht, deswegen auskommentiert (')
' ImportObject "Scripting.FileSystemObject"
'Hier ist die Funktion zum Einbinden der Konstanten hinterlegt

Function ImportObject(sClass)
Dim TLA, TLI, CEnum, enConstant, Object
Set Object = CreateObject(sClass)
Set TLA = CreateObject("TLI.TLIApplication")
Set TLI = TLA.InterfaceInfoFromObject(Object).Parent
For each CENum in TLI.Constants
If Left(CEnum.Name, 1)  "_" Then
For Each enConstant In CEnum.Members
If Left(enConstant.Name, 1) "_" Then _
ExecuteGlobal "Const " & enConstant.name & " = " & enConstant.value
Next
End If
Next
Set ImportObject = Object
End 

Function
'Ende der Funktion
'Diese Zeile braucht man eigentlich nicht... Hier kann man Übergabeparameter eintragen.
'    Set DL  = WScript.Arguments
'Diese Zeile brauche ich eigentlich auch nicht...  Erstellt e
'    Set FSO = CreateObject("Scripting.FileSystemObject")
'Jetzt gehts los:  Wir erzeugen uns ein Excel-Objekt.
Set XL  = CreateObject("Excel.Application")
'Hier sage ich, daß Excel bei der Ausführung nicht sichtbar sein soll.
XL.Visible = false
'ScreenUpdating aus... Das kann u. U. schneller sein.
XL.ScreenUpdating = false
'Jetzt öffne ich die Testdatendatei
Set OldWorkbook = XL.Workbooks.Open("C:\Temp\Primärdaten.xls")
'Dann füge ich ein neues Workbook dazu
Set NewWorkbook = XL.Workbooks.Add
'Zähler setzen
i = 1
'inhalt initialisieren
inhalt = "X"
'Schleifenbegin
Do
'Umkopieren der Parameternamen in das neue Workbook. Ich gehe davon aus, daß die Parameternamen  _
in der ersten Zeile stehen
NewWorkbook.Worksheets(1).Cells(i, 1).Value = OldWorkbook.Worksheets(1).Cells(1, i).Value
'Zähler erhöhen
i = i + 1
'Jetzt solange laufen, bis nichts mehr in der Zelle steht
Loop While (OldWorkbook.Worksheets(1).Cells(1, i).Value  "")
'Warnungen von Excel ausschalten
XL.Application.DisplayAlerts = False
'Das neue Workbook als Textdatei speichern... Die lese ich dann nachher zeilenweise ein.
NewWorkbook.SaveAs "C:\TEMP\Primärdaten.txt", xlText
'Alles Schließen und beenden
NewWorkbook.Close False
'Neu hinzugekommen:
'AltesWorkbook auch schliessen.
OldWorkbook.Close False
XL.Application.DisplayAlerts = True
XL.Quit

Anzeige
AW: Schwere Excel-Fehlermeldung erzeugen
28.05.2008 10:32:00
ransi
Hallo Timo
Keine Ahnung welche Klimmzug du hier Function ImportObject(sClass) machen willst,
aber schreib diesen Code mal in deine VBS:
Dim XL
Dim OldWorkbook
Dim FSO
Dim arr
Dim txtDatei
Dim newWorkbook
Set XL = CreateObject("Excel.Application")
Set FSO = CreateObject("Scripting.Filesystemobject")
Set txtDatei = FSO.opentextfile("C:\TEMP\Primärdaten.txt", 8, 1)
With XL
    .Visible = False
    Set OldWorkbook = .Workbooks.Open("C:\Temp\Primärdaten.xls")
    arr = .WorksheetFunction.Transpose(OldWorkbook.Worksheets(1).Range("a1").CurrentRegion.Columns(1).Cells)
    txtDatei.write Join(arr, vbCrLf)
    txtDatei.Close
    .Quit
End With
MsgBox "Textdatei erstellt", , "Fertig"

Der läuft bei mir Schmerzfrei.
Ich denke daher das die Fehlermeldung evtl. aus deiner Function herrührt...
ransi

Anzeige
AW: Schwere Excel-Fehlermeldung erzeugen
28.05.2008 12:40:59
Timo
Nicht ganz... Ich muß die Textdatei nicht appending sonder writing öffnen. Außerdem muß ich die Spaltenköpfe zeilenweise in die Textdatei schreiben. Ich habs nochmal korrigiert:
Dim XL
Dim OldWorkbook
Dim FSO
Dim arr
Dim arr2()
Dim txtDatei
Dim newWorkbook
Set XL = CreateObject("Excel.Application")
Set FSO = CreateObject("Scripting.Filesystemobject")
Set txtDatei = FSO.opentextfile("C:\TEMP\Primärdaten.txt", 2, 1)
With XL
.Visible = False
Set OldWorkbook = .Workbooks.Open("C:\Temp\Primärdaten.xls")
arr = OldWorkbook.Worksheets(1).Rows(1).Cells
i = 0
ReDim Preserve arr2(256)
Do While (arr(1, i + 1) "")
arr2(i) = arr(1, i + 1)
i = i + 1
Loop
ReDim Preserve arr2(i - 1)
txtDatei.write Join(arr2, vbCrLf)
txtDatei.Close
.Quit
End With
MsgBox "Textdatei erstellt", , "Fertig"
Seh es mir bitte nach, wenn ich das zweidimensionale Array über ne Schleife in ein eindimensionales umwandle, eine geschicktere Methode fällt mir im Moment nicht ein.
Ich habe versucht, die Excel-Konstanten (xlText) in VBS zu benutzen, hierfür ist die Funktion "Function ImportObject(sClass)" laut einem anderen Forum nötig. Kann sein, das das nicht so funktioniert hat, wie gewünscht.
Deiner Lösung ist deutlich kürzer und einleuchtender... Das es so einfach geht war mir nicht bewußt.
Mal schauen, ob der Fehler jetzt weg ist. Jedenfalls vielen Dank für deine Lösung!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige