AW: Daten aus Tabelle wieder in UF einlesen ...
25.09.2006 21:13:35
fcs
Hallo Ralph,
hier ein Beispiel wie man mit Hilfe einer Spalte mit Schlüsselfeld-Eigenschaft die Daten aus der Tabelle in ein Userform laden kann und auch wieder in die Tabelle zurückspeichern kann.
In meinem Beispiel wird der gesuchte Schlüssel in einer Combobox ausgewählt. Mit Laden-Button werden die zugehörigen Daten ins Userform geholt und per Speichern-Button werden sie in die Tabelle zurückgeschrieben.
Beim Code für das Zurückschreiben muss du bei Zahlen und Datumsangaben immer den als Text aus den Formblatt-Elementen kommenden Inhalt (zumindest unter Excel97 ist das so) in ein entsprechendes Format wandeln. Funktionen CDate, CDbl, CInt etc. verwenden, sonst werden die Inhalte in der Tabelle falsch zurückgegeben.
Beispiel-Datei: https://www.herber.de/bbs/user/37005.xls
Gruss
Franz
Private Sub CB_Laden_Click()
'Suchen des Schlüssels und Laden der Daten aus der Tabelle ins Formblatt
Dim wks As Worksheet, ZelleSchluessel As Range
Set wks = ActiveWorkbook.Worksheets("Tabelle1")
'Suchen des Schlüssels in Spalte 1 (Spalte kann beliebig gewählt werden)
Set ZelleSchluessel = wks.Columns(1).Find(What:=Me.ComboBox_Schluessel, LookIn:=xlValues, Lookat:=xlWhole)
'Daten in Formblatt einlesen
With wks
UserForm1.TB_Daten01.Value = .Cells(ZelleSchluessel.Row, 2).Value 'Text aus Spalte 2
UserForm1.TB_Daten02.Value = Format(.Cells(ZelleSchluessel.Row, 3).Value, "DD.MM.YYYY") 'Datum aus Spalte 3
UserForm1.TB_Daten03.Value = .Cells(ZelleSchluessel.Row, 4).Value 'Zahl aus Spalte 4
'... ähnlich die Daten der anderen Formblattelemente mit Daten aus der Tabelle füllen
End With
End Sub
Private Sub CB_Schliessen_Click()
Unload Me
End Sub
Private Sub CB_Speichern_Click()
'Suchen des Schlüssels und zurückschreiben der Daten aus dem Formblatt in die Tabelle
If Me.ComboBox_Schluessel = "" Then Exit Sub
Application.EnableEvents = False
Dim wks As Worksheet, ZelleSchluessel As Range
Set wks = ActiveWorkbook.Worksheets("Tabelle1")
'Suchen des Schlüssels in Spalte 1 (Spalte kann beliebig gewählt werden)
Set ZelleSchluessel = wks.Columns(1).Find(What:=Me.ComboBox_Schluessel, LookIn:=xlValues, Lookat:=xlWhole)
'Daten in Formblatt einlesen
With wks
.Cells(ZelleSchluessel.Row, 2).Value = UserForm1.TB_Daten01.Value 'Text nach Spalte 2
If UserForm1.TB_Daten02.Value = "" Then
.Cells(ZelleSchluessel.Row, 3).ClearContents
Else
.Cells(ZelleSchluessel.Row, 3).Value = CDate(UserForm1.TB_Daten02.Value) 'Datum nach Spalte 3
End If
If UserForm1.TB_Daten03.Value = "" Then
.Cells(ZelleSchluessel.Row, 4).ClearContents
Else
.Cells(ZelleSchluessel.Row, 4).Value = CDbl(UserForm1.TB_Daten03.Value) 'Dezimalzahl nach Spalte 4
End If
'... ähnlich die Daten der anderen Formblattelemente in die Tabelle zurückschreiben
End With
Application.EnableEvents = True
End Sub