Wie Mase schon angesprochen hat, kann man die Suche verbessern. Darum soll es hier aber nicht gehen.
Also, die UserForm:
'
' Klassenmodul: UserForm1
'
Option Explicit
Private m_wksRef As Excel.Worksheet
Private m_lngZeile As Long
Public Function SetSource(Worksheet As Excel.Worksheet, Zeile As Long) As Boolean
If Worksheet Is Nothing Or Zeile <= 0 Then
Call Err.Raise(5, Source:=Me.Name) 'invalid call or arguments
End If
Set m_wksRef = Worksheet
m_lngZeile = Zeile
With m_wksRef
TextBox_Name.Value = .Cells(m_lngZeile, 2).Value
TextBox_Tel.Value = .Cells(m_lngZeile, 3).Value
ComboBox1.Value = .Cells(m_lngZeile, 4).Value
TextBox_Typ.Value = .Cells(m_lngZeile, 5).Value
TextBox_Schluessel.Value = .Cells(m_lngZeile, 6).Value
TextBox_HU.Value = .Cells(m_lngZeile, 7).Value
TextBox_Notizen.Value = .Cells(m_lngZeile, 9).Value
End With
SetSource = True
End Function
Private Sub Button_ok_Click()
If TextBox_Name = "" Then
MsgBox "Du musst einen Namen eintragen!"
Unload Me
Else
With m_wksRef
.Cells(m_lngZeile, 2).Value = TextBox_Name
.Cells(m_lngZeile, 3).Value = TextBox_Tel
.Cells(m_lngZeile, 4).Value = ComboBox1
.Cells(m_lngZeile, 5).Value = TextBox_Typ
.Cells(m_lngZeile, 6).Value = TextBox_Schluessel
.Cells(m_lngZeile, 7).Value = TextBox_HU
.Cells(m_lngZeile, 9).Value = TextBox_Notizen
End With
MsgBox "Kundendaten wurden erfolgreich gespeichert"
End If
End Sub
'Dieses Ereignis tritt auf, wenn das Fenster den Fokus erhält
Private Sub UserForm_Activate()
If m_wksRef Is Nothing Or m_lngZeile <= 0 Then
'Me.SetSource wurde vor Me.Show nicht aufgerufen
Call MsgBox("'" & Me.Name & " wurde nicht korrekt initialisiert.", vbCritical)
Unload Me
End If
End Sub
'Dieses Ereignis tritt einmalig bei Erstellung der Instanz auf (z.B. Set usf = New UserForm1)
Private Sub UserForm_Initialize()
'...
End Sub
Die eigens erstellte Methode SetSource dient dazu, das Tabellenblatt und die Daten-Zeile zu setzen, über die die UserForm die Daten lesen/schreiben soll und muss vor UserForm1.Show aufgerufen worden sein.
Beachte bitte das die UserForm hier auf korrektem Weg per Unload Me entladen wird.
(UserForm1 ist nur eine Instanz von UserForm1; man kann jedoch mehrere Instanzen davon - bei Bedarf - erzeugen; auf die gegenwärtige Instanz bezieht man sich mit Me)
Der Aufruf der UserForm1 im Modul:
'
' Modul
'
Option Explicit
Sub KundenSuche()
Dim blnErfolg As Boolean
Dim AnzZahlen As Long
Dim kD As Integer
Dim i As Long
With Worksheets("Kontakte")
AnzZahlen = .UsedRange.Rows.Count
kD = Application.InputBox("Bitte Kundennummer angeben", "Kundennummer", Type:=1)
For i = 1 To AnzZahlen
If kD = .Cells(i, 1).Value Then
blnErfolg = UserForm1.SetSource(Worksheet:=.Range("A1").Worksheet, Zeile:=i)
'wir haben unseren Eintrag gefunden,
' kein Grund mehr weiter die Zeilen abzuklappern ;)
Exit For
End If
Next
End With
If blnErfolg Then
MsgBox "Kunden gefunden"
UserForm1.Show
Else
MsgBox "Kundennummer nicht vorhanden" & Chr(10) & "Bitte erneut eingeben!", vbCritical, "Fehler"
End If
End Sub
Wie gesagt, die Suche kann man besser gestalten und es gibt hier und da auch noch Punkte die nicht so sauber sind. Darum soll es hier aber nicht gehen.
Soweit das Ganze...
Grüße
|