AW: Excel Datei stürtzt ab
15.01.2013 10:21:05
Andre
So,
ein kleines Update. Ich denke Klaus hatte den richtigen Riecher. Hier mal der Codeschnipsel bei dem Excel 2010 austeigt und abstürtzt.
Public Function StrukturAnlegenInit()
Dim RangeInit As Range
Dim LetzteBeschriebeneZeileInit As Integer
With Workbooks(DokumentName).Worksheets(SheetAus)
'Ende der Range = Letzte beschriebene Zeile des Worksheets Auswertung in Spalte 6
LetzteBeschriebeneZeileInit = .Cells(Rows.Count, 6).End(xlUp).Row
If LetzteBeschriebeneZeileInit = 20 Then
'Die Range setzen
Set RangeInit = .Range("A1", "M" & LetzteBeschriebeneZeileInit)
End If
MsgBox "Test 2"
'Bild erstellen, abspeichern und einfügen
Call BildAusTabelle(SheetAus, RangeInit, "jpg")
End With
MsgBox "Test 3"
End Function
Public Function BildAusTabelle(ByVal WorksheetBAT As String, _
ByVal RangeBAT As Range, _
ByVal BildformatBAT As String)
' Beschreibung: - Erstellt aus einem Übergebenen Tabellenblatt ein Bild
' - Speichert dieses anschließend ab und fügt es in die Userform ein
' - Das Bildformat ist wählbar (jpg,gif)
' Übergabewerte: - WorksheetBAT: Gibt das Worksheet an welches zu einem Bild verarbeitet
' werden soll
' - RangeBAT: Gibt die Range das Worksheets an die Beschrieben ist
' - BildformatBAT: Gibt das gewünschte Bildformat an
' Rückgabeweerte: keine
'Deklarationen
Dim LetzteBeschriebeneZeileBAT As Integer
Dim BildBAT As Picture
Dim DiagrammBAT As ChartObject
'Fehlerabbruch wenn Übergabeparameter fehlen
If WorksheetBAT = "" Then Exit Function
If BildformatBAT = "" Then Exit Function
MsgBox "Test 11"
With Workbooks(DokumentName).Worksheets(WorksheetBAT)
'Ende der Range = Letzte beschriebene Zeile des Worksheets Auswertung in Spalte 6
LetzteBeschriebeneZeileBAT = .Cells(Rows.Count, 6).End(xlUp).Row
MsgBox "Test 111"
'Das Worksheet Auswertung aktivieren und den beschriebenen Bereich kopieren
.Activate
RangeBAT.Copy
MsgBox "Test 112"
'Ein Worksheet anlegen um das Bild zu generieren
Worksheets.Add
MsgBox "Test 113"
'Bild als Chart anlegen und in das Worksheet kopieren
Set BildBAT = ActiveSheet.Pictures.Paste(Link:=True)
MsgBox "Test 114"
BildBAT.CopyPicture Appearance:=xlScreen, Format:=xlPicture
MsgBox "Test 115"
Set DiagrammBAT = ActiveSheet.ChartObjects.Add(0, 0, BildBAT.Width, BildBAT.Height)
End With
End Function
Zwischen den beiden MsgBoxen "Test 111" und "Test 112" steigt er aus. Ich denke mal das es an der Range liegt die ich da übergeben habe. Der Absturz tritt allerdings erst beim zweiten Start des Programms aus der Entwicklungsumgebung herraus auf. Beim ersten Programmstart der beim Öffnen der Datei ausgeführt wird stürzt Excel nicht ab und durchläuft alle Programmteile (Er zeigt mir alle nötigen MsgBoxen an ;-)).
Meine Idee ist jetzt einfach statt einer Range, Anfang- und Endzeile sowie Anfang- und Endspalte zu übergeben. Sind zwar mehr Zeilen, er steigt aber nicht mehr aus. Einen Fehler in der Syntax kann ich derzeit nicht erkennen. Muss allerdings eingestehen, dass ich aus der C-Programmierung komme und mit Range-Übergaben in den 4 großen VBA-Projekten noch nicht sonderlich in Berührung gekommen bin.
Wenn ihr eine Idee habt wie ich die Range-Übergabe behalten kann, wäre ich euch sehr verbunden. Schließlich wird mir das bestimmt noch häufiger über den Weg laufen. Da ist es immer gut ein Beispiel in der Codesammlung zu haben, welches sauber funktioniert ;-)
Gruß Andre