VBA Endlosschleife Fehler
Hallo alle zusammen!
Ich beise mir schon die Zähne seit Tag aus wegen einen Schleifen Problem.
Problem Beschreibung:
Ich habe ein Makro das ein Bild aus Excel im Querformat exportieren soll und in einen bestimmten Ordner ablegen soll mit den Namen Inhalt Zelle "A1". Soweit so gut, funktioniert bis dato.
Das Export Bild wird im Laufe des Tages nochmal benötigt, und zwar wird es in eine vorgefertigte Vorlage Importiert, die für ein Querformat ausgelegt ist.
Nun ist es öfters passiert das Kollegen nicht drauf achten ob das Bild in Hoch oder Querformat ist und es somit unbrauchbar für die Vorlage machen.
Nun habe ich mir gedacht die Bildbreite und die Bildhöhe gegenüber zu stellen mit einer abfrage. Falls Breite kleiner als Höhe will ich das Bild das in Excel im Tabellenblatt liegt Löschen und den Loop neu Starten.
Ich bekomme aber bei meinem aktuellen Code immer eine Fehlermeldung. >Next ohne For<* - bei der vorletzenen Zeil hängt es dann.
Das ganze wird von einem Button einer UserForm gestartet.
Anbei mein Code:
Also wenn ich ein Querformat Bild benutze klappt alles gut, beim Hochformat kommen die Meldungen von Hell aber der loop gelingt nicht :/
Hat jemand eine Idee wie man das Lösen könnte?
Vielen dank und liebe grüße
Ich beise mir schon die Zähne seit Tag aus wegen einen Schleifen Problem.
Problem Beschreibung:
Ich habe ein Makro das ein Bild aus Excel im Querformat exportieren soll und in einen bestimmten Ordner ablegen soll mit den Namen Inhalt Zelle "A1". Soweit so gut, funktioniert bis dato.
Das Export Bild wird im Laufe des Tages nochmal benötigt, und zwar wird es in eine vorgefertigte Vorlage Importiert, die für ein Querformat ausgelegt ist.
Nun ist es öfters passiert das Kollegen nicht drauf achten ob das Bild in Hoch oder Querformat ist und es somit unbrauchbar für die Vorlage machen.
Nun habe ich mir gedacht die Bildbreite und die Bildhöhe gegenüber zu stellen mit einer abfrage. Falls Breite kleiner als Höhe will ich das Bild das in Excel im Tabellenblatt liegt Löschen und den Loop neu Starten.
Ich bekomme aber bei meinem aktuellen Code immer eine Fehlermeldung. >Next ohne For<* - bei der vorletzenen Zeil hängt es dann.
Das ganze wird von einem Button einer UserForm gestartet.
Anbei mein Code:
'Button "Bild Speichern" in der UserForm "UserFormTestergebnis"
'Exportiert das Bild in einen vordefinierten Ordner
Private Sub CommandButton1_Click()
Dim shp As Shape
Dim ws As Worksheet
Dim tempChartObj As ChartObject
Dim savePath, cellValue, sheetValue, saveName As String
Set ws = ActiveSheet
For Each shp In ws.Shapes
If shp.Type = msoPicture Then
Set tempChartObj = ActiveSheet.ChartObjects.Add(0, 0, shp.Width, shp.Height)
cellValue = Range("A1").Value
sheetValue = ActiveSheet.Name
saveName = cellValue & ".jpg"
savePath = "MEIN_PFAD" & saveName 'der Pfad passt
If tempChartObj.Width < tempChartObj.Height Then
GoTo Hell
Else: GoTo Weiter
End If
'Kopiert Bild in ein Chart, und exportiert den Chart anschlisend
'shp.Rotation = 90
Weiter:
shp.Copy
tempChartObj.Chart.ChartArea.Select
tempChartObj.Chart.Paste
tempChartObj.Chart.Export savePath
tempChartObj.Delete
shp.Delete
End If
Next shp
Unload UserFormTestergebnis
Sheets("Übersicht").Select
Exit Sub
Hell:
MsgBox "Die Bildbreite ist kleiner als die Bildhöhe!" _
& "Bildbreite: " & tempChartObj.Width _
& "Bildhöhe: " & tempChartObj.Height _
& "Bitte ein Neues Bild im Querformat machen"
MsgBox "Bitte jetzt ein Neues Foto in Querformat aufnehmen"
Unload UserFormTestergebnis
tempChartObj.Delete
shp.Delete
Range("C1").Select
Resume Next shp
End Sub
Also wenn ich ein Querformat Bild benutze klappt alles gut, beim Hochformat kommen die Meldungen von Hell aber der loop gelingt nicht :/
Hat jemand eine Idee wie man das Lösen könnte?
Vielen dank und liebe grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 636845
Url: https://administrator.de/contentid/636845
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Ich habe mal nur grob drübergeschaut, würde aber sagen, die Fehlermeldung beschreibt so halbwegs das Problem.
Der Parser findet kein <FOR> auf das sich das <Next> in Zeile 53 beziehen kann.
Der eigentliche Fehler ist allerdings, es gibt kein <On Error Goto> für das <Resume Next> in Zeile 53.
Laut Doku MS zu Resume Next:
Es ist aber keine Fehlerbehandlungsroutine, Du springst einfach mit Goto dahin.
=> Code in den Hauptcode integrieren oder eine Unterprozedur draus machen, dann sollte es gehen.
Der Parser findet kein <FOR> auf das sich das <Next> in Zeile 53 beziehen kann.
Der eigentliche Fehler ist allerdings, es gibt kein <On Error Goto> für das <Resume Next> in Zeile 53.
Laut Doku MS zu Resume Next:
Setzt die Ausführung fort, nachdem eine Fehler Behandlungs Routine abgeschlossen wurde.
Es ist aber keine Fehlerbehandlungsroutine, Du springst einfach mit Goto dahin.
=> Code in den Hauptcode integrieren oder eine Unterprozedur draus machen, dann sollte es gehen.
Hallo pain88,
AndreasHoster hat den Grund der berechtigten Fehlermeldung schon erwähnt.
Es ist wohl tatsächlich so,dass der Compilier bei 2 Mal "Next shp" 2 Mal "For" voraussetzt. For Each.. kommt aber nur einmal vor.
Der Compiler versteht ja nicht, dass du springst.
Das geht so nicht.
Du kannst doch aber innerhalb der Schleife springen, sodass beide Optionen "Hell:" und "Weiter:" innerhalb des FOR....NEXT sind.
Grüße
Tsuki
AndreasHoster hat den Grund der berechtigten Fehlermeldung schon erwähnt.
Es ist wohl tatsächlich so,dass der Compilier bei 2 Mal "Next shp" 2 Mal "For" voraussetzt. For Each.. kommt aber nur einmal vor.
Der Compiler versteht ja nicht, dass du springst.
Das geht so nicht.
Du kannst doch aber innerhalb der Schleife springen, sodass beide Optionen "Hell:" und "Weiter:" innerhalb des FOR....NEXT sind.
Grüße
Tsuki