ich habe in einer Datei, mit welcher man über eine UF eine Liste bearbeiten (löschen / hinzufügen / sortieren) kann einen Code, welcher Begriffe zu der Liste hinzu fügt. Wenn ich diesen Code verwende, dann kommt es in seltenen Fällen vor, dass die dazugehörige Datei schlagartig geschlossen wird.
Leider habe ich nicht die Ahnung und würde mich freuen, wenn jemand mal einen Blick drauf wirft, ob der Code fehlerhaft ist und dies zum Schließen / Absturz der Datei führen könnte.
Code:
Option Explicit
Private rngUberschriften As Range
Private Sub cmdHinzufügen_Click() Dim strEingabe As String Dim lngLetzteZeile As Long Dim rngVorhanden As Range 'eine Inputbox für die Neuaufnahme eines Produktes strEingabe = InputBox("Geben Sie ein Produkt ein", "Neueingabe") 'wenn in der Inputbox nichts eingetragen, abbrechen gedrückt oder die ComboBox nichts enthält verlasse die Sub If strEingabe = "" Or ComboBox1.ListIndex = -1 Then Exit Sub With Worksheets("Tabelle1") Set rngVorhanden = .Columns(rngUberschriften.Column).Find(strEingabe, LookIn:=xlValues, lookat:=xlWhole) If Not rngVorhanden Is Nothing Then Exit Sub 'erste leere Zelle in der betreffenden Spalte suchen lngLetzteZeile = .Cells(.Rows.Count, rngUberschriften.Column).End(xlUp).Row + 1 'wert eintragen .Cells(lngLetzteZeile, rngUberschriften.Column).Value = strEingabe 'und sotrieren .Columns(rngUberschriften.Column).Sort key1:=.Cells(1, rngUberschriften.Column), order1:=xlAscending, Header:=xlYes End With
Besser wäre aber den Code nicht mit Exit Sub abzuwürgen, wenn möglich. So würde ich es dann aussehen.
Code:
Private Sub cmdHinzufügen_Click() Dim strEingabe As String Dim lngLetzteZeile As Long Dim rngVorhanden As Range 'eine Inputbox für die Neuaufnahme eines Produktes strEingabe = InputBox("Geben Sie ein Produkt ein", "Neueingabe") 'wenn in der Inputbox nichts eingetragen, abbrechen gedrückt oder die ComboBox nichts enthält verlasse die Sub If strEingabe <> "" And ComboBox1.ListIndex > -1 Then With Worksheets("Tabelle1") Set rngVorhanden = .Columns(rngUberschriften.Column).Find(strEingabe, LookIn:=xlValues, lookat:=xlWhole) If Not rngVorhanden Is Nothing Then Exit Sub 'erste leere Zelle in der betreffenden Spalte suchen lngLetzteZeile = .Cells(.Rows.Count, rngUberschriften.Column).End(xlUp).Row + 1 'wert eintragen .Cells(lngLetzteZeile, rngUberschriften.Column).Value = strEingabe 'und sotrieren .Columns(rngUberschriften.Column).Sort key1:=.Cells(1, rngUberschriften.Column), order1:=xlAscending, Header:=xlYes End With End If
End Sub
Ich habe die If Abfrage umgedreht, so dass der Code abgearbeitet wird wenn die Bedingungen zutreffen.
Hast Du vielleicht Indirekt() Formeln in Deiner Datei?
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28 • Klaus
12.03.2020, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2020, 17:17 von atilla.)
Hallo Klaus,
Uwe hat es schon geschrieben, in meinem Vorschlag gibt es noch ein Exit Sub, was ich ja gar nicht drin haben wollte. Deswegen hier noch mal der Korrigierte Vorschlag:
Code:
Private Sub cmdHinzufügen_Click() Dim strEingabe As String Dim lngLetzteZeile As Long Dim rngVorhanden As Range 'eine Inputbox für die Neuaufnahme eines Produktes strEingabe = InputBox("Geben Sie ein Produkt ein", "Neueingabe") 'wenn in der Inputbox nichts eingetragen, abbrechen gedrückt oder die ComboBox nichts enthält verlasse die Sub If strEingabe <> "" And ComboBox1.ListIndex > -1 Then With Worksheets("Tabelle1") Set rngVorhanden = .Columns(rngUberschriften.Column).Find(strEingabe, LookIn:=xlValues, lookat:=xlWhole) If rngVorhanden Is Nothing Then 'erste leere Zelle in der betreffenden Spalte suchen lngLetzteZeile = .Cells(.Rows.Count, rngUberschriften.Column).End(xlUp).Row + 1 'wert eintragen .Cells(lngLetzteZeile, rngUberschriften.Column).Value = strEingabe 'und sotrieren .Columns(rngUberschriften.Column).Sort key1:=.Cells(1, rngUberschriften.Column), order1:=xlAscending, Header:=xlYes Else MsgBox "Diese(s) " & ComboBox1 & " existiert bereits!" End If End With End If
End Sub
@snb es fehlt noch die Sortierung nach Übertragung. Wäre schön, wenn Du dafür den Code auch noch lieferst.
@Uwe
peinlich aber war. Sollte jetzt kein "Fehlerhafter Code" mehr sein. :20:
Gruß Atilla
Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:1 Nutzer sagt Danke an atilla für diesen Beitrag 28 • Klaus
Vielen herzlichen Dank Euch für das Checken des Codes und die Korrektur- / Veränderungsvorschläge. Ihr seid echt Spitze.
@Attila - darauf muss man ja erstmal kommen das umzudrehen :19: Nehm ich gern an. Eine Indirekt() Formel ist nicht verwendet. Ich hab bei diesem Projekt weitestgehend alles auf VBA umgestellt. Ein paar S-Verweise sind noch enthalten.
@Kuwer - Vielen Dank für den Hinweis und den Link - ich werde das entsprechend richtig stellen.
@snb - Vielen Dank für die Umstellung der Datei. Ist wieder einiges bei was ich erstmal ergründen muss :75:
@ snb - warum gibt es auf deiner Webseite eigentlich keine Suchfunktion? Ich wollte mich gerade zu "CurrentRegion" etwas belesen... scheitere aber am Index.
Versuche gerade hinter die zweite Zeile deines Codes: