'Formular Löschen For Each ctrElement In Controls Select Case TypeName(ctrElement) Case "TextBox": ctrElement = "" End Select Next
'Listbox löschen ListBox1.Clear
Unload Me
mit Unload Me wird die Userform aus dem Speicher entfernt. Du brauchst daher nicht vorher die Textboxen noch leeren, das geschieht mit den Entladen ganz automatisch.
... Ich bin gerade am Verzweifeln. Eigentlich dachte ich meine Suchmaske und das mit dem zurückspeichern von Änderungen klappt, macht es aber irgendwie nicht. Meine Suchmaske hat drei Möglichkeit zum Suchen. Suche 1 sucht in Spalte A, 2 in B und 3 in C. Habe ich über eine der Suchvarianten gesucht, dann kann ich über einen Button die Maske entsperren, Daten ändern und über einen weiteren Button Änderungen in das Tabellenblatt zurückspeichern. Zum Speichern verwende ich den nachfolgenden Code. Und hier scheint mal wieder der Fehler im Detail zu stecken. Irgendwie speichert er nicht die Daten dort wo Sie hin sollen, sondern immer verschoben. Suche ich über Spalte A, verschiebt er die Daten in der geänderten Zeile aus den Spalten B, C und D um eine Spalte nach links. Suche ich in Spalte B, schiebt er ab E alles um eins nach rechts...
Code:
Private Sub CommandButton13_Click() 'Änderungen an Daten speichern
' ' ändern '
Dim lLetzte As Long Dim ctrElement As Control
If TextBox27.Text = "" Then MsgBox "Sie müssen Aktenzeichen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox27.SetFocus Exit Sub End If If TextBox28.Text = "" Then MsgBox "Sie müssen einen Namen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox28.SetFocus Exit Sub End If
If TextBox29.Text = "" Then MsgBox "Sie müssen einen Vornamen eingeben - Danke.", _ 48, " Hinweis für " & Application.UserName TextBox28.SetFocus Exit Sub End If
' ' die Daten sind geprüft und können in die Tabelle eingetragen werden ' 'Application.ScreenUpdating = True
With Worksheets("Daten_WS")
rngFind.Offset(0, 0).Value = WorksheetFunction.Proper(TextBox27.Text) rngFind.Offset(0, 1).Value = WorksheetFunction.Proper(TextBox28.Text) rngFind.Offset(0, 2).Value = WorksheetFunction.Proper(TextBox29.Text) rngFind.Offset(0, 4).Value = WorksheetFunction.Proper(TextBox30.Text) rngFind.Offset(0, 5).Value = WorksheetFunction.Proper(TextBox31.Text) rngFind.Offset(0, 6).Value = WorksheetFunction.Proper(TextBox32.Text) rngFind.Offset(0, 7).Value = WorksheetFunction.Proper(TextBox33.Text) rngFind.Offset(0, 8).Value = WorksheetFunction.Proper(TextBox34.Text) rngFind.Offset(0, 9).Value = WorksheetFunction.Proper(TextBox43.Text) rngFind.Offset(0, 10).Value = WorksheetFunction.Proper(TextBox35.Text) If IsNumeric(TextBox36.Text) Then rngFind.Offset(0, 11).Value = CDate(WorksheetFunction.Proper(TextBox36.Text)) If IsNumeric(TextBox37.Text) Then rngFind.Offset(0, 12).Value = CDate(WorksheetFunction.Proper(TextBox37.Text)) If IsNumeric(TextBox38.Text) Then rngFind.Offset(0, 13).Value = CDate(WorksheetFunction.Proper(TextBox38.Text)) If IsNumeric(TextBox39.Text) Then rngFind.Offset(0, 14).Value = CInt(WorksheetFunction.Proper(TextBox39.Text)) rngFind.Offset(0, 15).Value = WorksheetFunction.Proper(TextBox40.Text) rngFind.Offset(0, 16).Value = WorksheetFunction.Proper(TextBox41.Text)
lLetzte = IIf(.Range("A65536") <> "", 65536, .Range("A65536").End(xlUp).Row) + 1 If lLetzte < 2 Then lLetzte = 2
End With
Application.ScreenUpdating = True
'Formular Löschen For Each ctrElement In Controls Select Case TypeName(ctrElement) Case "TextBox": ctrElement = "" 'Case "ListBox": ctrElement = "" End Select Next
'Listbox löschen ListBox1.Clear
'Textfelder, Schalter sperren, entsperren und sichtbar und unsichtbar machen '...gekürzt
Du hast hier keine Unterscheidung nach der Suchspalte. Das Aktenzeichen gehört aber immer in Spalte B. Beim Auslesen der Daten hast Du es gut getroffen, dort fängst Du bei 0, -1 oder -2 mit dem Offset an.
Allerdings ist mir noch unklar, wieso nicht alle Einträge verschoben sein sollen: Zitat: Suche ich in Spalte B, schiebt er ab E alles um eins nach rechts...
Eventuell ist das ein Ansatz: Set rngFind = .Cells(rngFind.Row, 2)
Wenn Du die Zeile an den Anfang des Makros zum Eintragen setzt, wird die Zelle immer in die Spate B gelegt - Textbox27 ist das Aktenzeichen aus Spalte B.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)