Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
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

Fehler Exit Sub

Fehler Exit Sub
18.05.2021 10:10:18
oraculix
Hallo
Ich habe oft abstürze in Excel das nur noch strg+alt+entf hilft. Das nervt natürlich.
Frage :
Gibt es die Möglichkeit in Excel zum Beispiel in die Arbeitsmappe einen Code reinzuschreiben
On error Exit Sub (hab noch nichts dergleichen gefunden)
Oder vielleicht gibt es auch eine andere Lösung wo man in alle Makros in den Modulen So was reinschreiben kann?
einfacher wäre es natürlich den Code in die Arbeitsmappe zu schreiben.

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler Exit Sub
18.05.2021 10:16:58
Hajo_Zi
On error Goto Raus
und vor end sub
Raus:
GrußformelHomepage
AW: Fehler Exit Sub
18.05.2021 10:21:47
oraculix
Wäre mal nett wenn du ne verüftige Antwort lieferst
AW: Fehler Exit Sub
18.05.2021 10:26:14
Hajo_Zi
gut das ist einbe vernüftige Antwort auf den Beitrag, bei mir läuft es ohne Probleme.
Gruß Hajo
AW: Fehler Exit Sub
18.05.2021 10:26:26
Nepumuk
Hallo,
nach diesem Muster:
Code:

[Cc]

Public Sub Test() On Error GoTo err_exit ' dein Code Exit Sub err_exit: End Sub

Gruß
Nepumuk
Anzeige
AW: Fehler Exit Sub
18.05.2021 10:37:47
oraculix
Danke Nepumuk
Bekomme Fehler Sprungmaske definieren wenn ich das so schreibe.
Irgendwo ist da noch ein Fehler.
'Nach dem suchen wird in Tabelle "Gefunden" der gesuchte Eintrag gelistet.

Public Sub AnsehenFindenUndKopieren2(Optional ByVal sWord As String)
Dim iRowT As Long
Dim strFirstAddress As String
Dim objCell As Range
Dim objDictionary As Object
On Error GoTo err_exit
Call GefundenDBLÖSCHEN
Worksheets("FilmeAnsehen").Activate
If sWord = vbNullString Then sWord = InputBox(Prompt:="Suchbegriff:", Default:="Filmname")
If sWord  vbNullString Then
Application.ScreenUpdating = False
Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
iRowT = 3
With Worksheets("Gefunden")
Set objCell = Union(Columns("A:B"), Columns("H")).Find(What:=sWord, _
LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)
If Not objCell Is Nothing Then
strFirstAddress = objCell.Address
Do
If Not objDictionary.Exists(Key:=CStr(objCell.Row)) Then
objDictionary.Item(Key:=CStr(objCell.Row)) = vbNullString
objCell.EntireRow.Copy .Cells(iRowT, 1)
iRowT = iRowT + 1
End If
Set objCell = Union(Columns("A:B"), Columns("H")).FindNext(After:=objCell)
Loop Until objCell.Address = strFirstAddress
Set objCell = Nothing
Set objDictionary = Nothing
.Activate
.UsedRange.Font.Size = 14
With .Range("A2:J5000")
.Font.Color = RGB(255, 192, 0)
.Interior.Color = vbBlack
.Borders.Color = RGB(255, 192, 0)
End With
End If
End With
If iRowT > 3 Then
Worksheets("Gefunden").Activate
Columns("A:A").ColumnWidth = 40.28
Else
Call MsgBox("Nichts gefunden.", vbInformation, "Information")
End If
Application.ScreenUpdating = True
End If
End Sub
err_exit:
End Sub
Anzeige
AW: Fehler Exit Sub
18.05.2021 10:42:22
AlterDresdner
Oraculix,
lies mal Nepumuks Beitrag richtig!
Das err_exit: muss natürlich vor das "End Sub" Deiner Routine, also
End If
err_exit:
End Sub
Mfg AlterDresdner
AW: Fehler Exit Sub
18.05.2021 10:52:03
oraculix
Danke für den Hinnweis habe es jetzt so gemacht. Aber Excel Hängt sich trotzdem auf.
AW: Fehler Exit Sub
18.05.2021 11:07:24
Daniel
Hi
Dann hast du noch was falsch gemacht.
Du rufst noch eine unterprozedur auf.
Passiert der Fehler dort?
Das "on error goto" gilt nur für die jeweilige Prozedur, in der es geschrieben wurde.
Dh. jede Prozedur braucht ihre eigene Fehlerbehandlung.
Außerdem hilft "on error goto" nur bei Fehlern, die einen Fehlerabbruch erzeugen (d.h. VBA hält an, gibt eine Fehlermeldung aus und markiert die Verursachende Zeile).
Nur diese Fehler kannst du damit unterdrücken.
Gegen einen echten Absturz ode Endlosschleifen hilft das nicht.
Gruß Daniel
Anzeige
AW: Fehler Exit Sub
19.05.2021 04:40:33
oraculix
Danke für die Erklärung
AW: Fehler Exit Sub
18.05.2021 10:43:42
Nepumuk
Hallo,
so:
Code:

[Cc]

Public Sub AnsehenFindenUndKopieren2(Optional ByVal sWord As String) Dim iRowT As Long Dim strFirstAddress As String Dim objCell As Range Dim objDictionary As Object On Error GoTo err_exit Call GefundenDBLÖSCHEN Worksheets("FilmeAnsehen").Activate If sWord = vbNullString Then sWord = InputBox(Prompt:="Suchbegriff:", Default:="Filmname") If sWord <> vbNullString Then Application.ScreenUpdating = False Set objDictionary = CreateObject(Class:="Scripting.Dictionary") iRowT = 3 With Worksheets("Gefunden") Set objCell = Union(Columns("A:B"), Columns("H")).Find(What:=sWord, _ LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False) If Not objCell Is Nothing Then strFirstAddress = objCell.Address Do If Not objDictionary.Exists(Key:=CStr(objCell.Row)) Then objDictionary.Item(Key:=CStr(objCell.Row)) = vbNullString objCell.EntireRow.Copy .Cells(iRowT, 1) iRowT = iRowT + 1 End If Set objCell = Union(Columns("A:B"), Columns("H")).FindNext(After:=objCell) Loop Until objCell.Address = strFirstAddress Set objCell = Nothing Set objDictionary = Nothing .Activate .UsedRange.Font.Size = 14 With .Range("A2:J5000") .Font.Color = RGB(255, 192, 0) .Interior.Color = vbBlack .Borders.Color = RGB(255, 192, 0) End With End If End With If iRowT > 3 Then Worksheets("Gefunden").Activate Columns("A:A").ColumnWidth = 40.28 Else Call MsgBox("Nichts gefunden.", vbInformation, "Information") End If Application.ScreenUpdating = True End If err_exit: End Sub

Gruß
Nepumuk
Anzeige
AW: Fehler Exit Sub
18.05.2021 10:54:09
oraculix
Vielen Dank für Deine Mühe
Habe es jetzt 1 zu 1 Kopiert trotzdem Hängt sich Excel auf. Bin am verzweifeln ich glaube das liegt an der Msgbox
AW: Fehler Exit Sub
18.05.2021 11:01:05
Nepumuk
Hallo,
kann ich nicht nachvollziehen.
Gruß
Nepumuk
AW: Fehler Exit Sub
18.05.2021 11:11:48
oraculix
Trotzdem Danke
Es kompliziert Filmnamen sind oft mit Leerzeichen und Bindestrichen getrennt der Originalnahme ist wieder ganz Anders
Die Formeln Übernemen vom Originalnahmen den Titel in Deutsch und die suche Hängt dann da hilft Wahrscheinlich kein
On Error GoTo err_exit
AW: Fehler Exit Sub
18.05.2021 11:23:27
oraculix
mir ist gerade eingefallen vielleich kann man in die such ein einbauen das das leerzeichen ignoriert werden und bindestriche
dann kahme es ja gar nicht zu zum absturz
Anzeige
Programmiers mal anders
18.05.2021 11:48:25
Daniel
Hi
dein Code ist unnötig kompliziert, vielleicht hast du dir da irgendwas seltsames eingebaut.
ich würde die Zeilen, die kopiert werden müssen, per Formel markieren und dann die markierten Zeilen kopieren.
das geht dann wesentlich einfacher als dein Konstrukt.

Public Sub AnsehenFindenUndKopieren2(Optional ByVal sWord As String)
Dim Zellen As Range
Call GefundenDBLÖSCHEN
If sWord = vbNullString Then sWord = InputBox(Prompt:="Suchbegriff:", Default:="Filmname")
If sWord  vbNullString Then
With Sheets("FilmeAnsehen").UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1Local = "=Wenn(IstZahl(Suchen(""" & sWord & """,ZS1&ZS2&ZS8));1;"""")"
If WorksheetFunction.sum(.Cells) > 0 Then Set Zellen = .SpecialCells(xlCellTypeFormulas, 1)
.ClearContents
End With
End With
If Zellen Is Nothing Then
MsgBox "Nichts gefunden", vbInformation, "Information"
Else
Zellen.EntireRow.Copy
Sheets("Gefunden").Cells(3, 1).PasteSpecial xlPasteValues
Sheets("Gefunden").Select
End If
End If
End Sub
Joker im Suchstring (? *) sollten hier auch funktionieren.
Gruß Daniel
ps: mangels Beispieldatei ist der Code nicht getestet.
Anzeige
AW: Programmiers mal anders
18.05.2021 12:04:25
oraculix
Hey Super vielen Dank
hört sich gut an aber leider noch irgendwo ein Fehler
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler.FormulaR1C1Local = "=Wenn(IstZahl(Suchen(""" & sWord & """,ZS1&ZS2&ZS8));1;"""")"
Muss ich das Anpassen ZS1usw ? meine Tabelle ist A2 bis B5000
AW: Programmiers mal anders
18.05.2021 12:13:10
Daniel
Hi
Die Formel ist hier in Deutsch mit Z1S1-Zellbezügen geschrieben.
Allerdings hab ich einmal ein Komma statt Semikolon als Trennzeichen verwendet, das müsstest du korrigieren.
Ansonsten macht die Formel nichts anderes, als die Texte aus Spalte A, B und H in der jeweiligen Zeile zu verketten und mit SUCHEN zu prüfen, ob der gesuchte Text vorhanden ist.
Gruß Daniel
Anzeige
AW: Programmiers mal anders
18.05.2021 12:28:07
oraculix
Jup das War es Vielen Vielen dank das Semikolon war der Hund!!!!
AW: Programmiers mal anders
18.05.2021 12:29:18
Daniel
Und wie funktioniert es als ganzes?
Gruß Daniel
AW: Programmiers mal anders
18.05.2021 12:39:50
oraculix
Danke das Du nochmal nachfragst
Es gibt ein Problem mit der Schrift und Hintergrund Farbe
Wenn ich das einbaue gibt es immer Fehler
.UsedRange.Font.Size = 14
With .Range("A2:J5000")
.Font.Color = RGB(255, 192, 0)
.Interior.Color = vbBlack
.Borders.Color = RGB(255, 192, 0)
' End With
AW: Programmiers mal anders
18.05.2021 12:54:47
Daniel
Ich habe das so programmiert, dass nur die Werte übernommen werden und nicht die Formate.
Du kannst also die Tabelle von Hand wie gewünscht formatieren und brauchst kein Makro dafür, da die Formate erhalten bleiben.
Zu deinem Fehler
1. "es gibt ein Problem" oder "funktioniert nicht" ist als Fehlerbeschreibung so, als hätte ich geantwortet: "Programmieren es anders" ohne den Code mitzuliefern.
2. wo ist die With-Klammer, ist die richtig definiert?
Du zeigst nur Teile des Codes.
Gruß Daniel
Anzeige
AW: Programmiers mal anders
18.05.2021 13:09:49
oraculix
Es wird vorher die Tabelle in einem Makro Gelöscht und alle Werte und Formate gehen verloren daher muss ich die
per Vba den Text und Hintergrund neu Formatieren.

Public Sub AnsehenFindenUndKopieren2(Optional ByVal sWord As String)
Dim Zellen As Range
Call GefundenDBLÖSCHEN
If sWord = vbNullString Then sWord = InputBox(Prompt:="Suchbegriff:", Default:="Filmname")
If sWord  vbNullString Then
With Sheets("FilmeAnsehen").UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1Local = "=Wenn(IstZahl(Suchen(""" & sWord & """;ZS1&ZS2&ZS8));1;"""")"
If WorksheetFunction.Sum(.Cells) > 0 Then Set Zellen = .SpecialCells(xlCellTypeFormulas, 1)
.ClearContents
End With
End With
If Zellen Is Nothing Then
MsgBox "Nichts gefunden", vbInformation, "Information"
Else
Zellen.EntireRow.Copy
Sheets("Gefunden").Cells(2, 1).PasteSpecial xlPasteValues
Sheets("Gefunden").Select
End If
End If
'  .UsedRange.Font.Size = 14
'  With .Range("A2:J5000")
'   .Font.Color = RGB(255, 192, 0)
'  .Interior.Color = vbBlack
' .Borders.Color = RGB(255, 192, 0)
'  End With
End Sub

Anzeige
AW: Programmiers mal anders
18.05.2021 13:21:48
Daniel
So wie du mir das hier zeigt, hast du nur sehr wenig Ahnung wir man VBA programmiert, weil du nicht mal eine Einfache With-Klammer kennst und erstellen kannst.
Andererseits enthielt dein ursprüngliches Makro mit dem Dictionary-Objekt schon sehr fortgeschrittene Programmiertechnik.
Das ist so, als würde ein Turmspringer, der Salti und Schrauben vom Dreier beherrscht, beim Sprung vom Startblock versagen.
Passt für mich nicht zusammen.
Gruß Daniel
AW: Programmiers mal anders
18.05.2021 13:04:05
Daniel
Wenn du schon formatiert, würde ich nur den benutzen Bereich formatieren und nicht pauschal viele Zellen.
Das bläht deine Datei unnötig auf, weil Excel für Zellen mit Formatierung ebenso Speicherplatz bereitstellen muss wie für Zellen mit Inhalt.
Gruß Daniel
AW: Programmiers mal anders
18.05.2021 13:32:42
oraculix
Die Tabelle "Gefunden" wird auch von anderen Tabellen genutzt zum suchen und die haben über 3000 Datensätze also zeilen
und diese haben unterschiedliche Formate mit Schrift und Hintergrund
Daher ist es wichtig das ich die Zellen in diesem Makro von Dir das super Funktioniert auch Formatiere.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige