AW: Werte in Userform Speichern
15.01.2015 12:36:10
fcs
Hallo Stefan,
die Variable x ist als Integer deklariert. Da sind nur Werte bis ca. zulässig.
Deklariere x als Long, dann sind Werte bis zulässig.
Außerdem sollte geprüft werden, ob die Textbox2 leer ist oder nicht nummerische Werte enthält, sonst sind weiter Fehlermeldungen möglich.
In der Zeile
If Cells(i, 1) = x Then
musst du die 1 durch eine 4 ersetzen, damit in Spalte D die Personalnummer gesucht wird.
Private Sub CommandButton2_Click()
Dim x As Long
Z = Worksheets("Personal").UsedRange.Rows.Count
If TextBox2 = "" Then
MsgBox "Bitte erst Eingabe in Textbox machen"
Exit Sub
ElseIf IsNumeric(TextBox2) Then
x = CDbl(TextBox2)
Else
MsgBox "Personalnummer muss eine Zahl sein"
Exit Sub
End If
temp = 0
For i = 2 To Z
If Worksheets("Personal").Cells(i, 4) = x Then
temp = 1
Exit For
End If
Next
If temp = 1 Then
Unload Me
zeile = i
UserForm2.Show
Else
MsgBox "Personalnummer nicht vorhanden!", vbExclamation
TextBox2 = ""
End If
End Sub
Problem suche in "Personal":
Dein Makro startet auf "Startseite" als aktives Blatt.
Da du im Userform immer mit
TextboxXYZ= Cells(Zeile,Spalte)
oder
Cells(Zeile,Spalte) = irgendwas
arbeitest, werden immer die Werte aus dem aktiven Blatt gelesen/geschrieben.
Du musst, bevor das Userform1 angezeigt wird, das Blatt "Personal" aktivieren.
Sub ändern()
Worksheets("Personal").Activate
UserForm1.Show
End Sub
Alternativ kannst du auch in der Initialisierungs-Prozedur des Userform1 das Blatt aktivieren.
'zusätzlicher Code in Userform1
Private Sub UserForm_Initialize()
Worksheets("Personal").Activate
End Sub
Der sicherste Weg zur Vermeidung von Zugriffen auf ein falsches Tabellenblatt ist, die Zellen komplett inkl. Tabellenblatt zu referenzieren.
If Worksheets("Personal").Cells(i, 4) = x Then
'oder im Userform2 mit With ... End With Anweisungen
Private Sub UserForm_Initialize()
With Worksheets("Personal")
TextBox1 = .Cells(zeile, 1)
TextBox2 = .Cells(zeile, 2)
TextBox3 = .Cells(zeile, 3)
TextBox4 = .Cells(zeile, 5)
TextBox5 = .Cells(zeile, 4)
TextBox6 = .Cells(zeile, 6)
TextBox7 = .Cells(zeile, 7)
TextBox8 = .Cells(zeile, 8)
TextBox9 = .Cells(zeile, 9)
TextBox10 = .Cells(zeile, 10)
TextBox11 = .Cells(zeile, 11)
TextBox12 = .Cells(zeile, 12)
TextBox13 = .Cells(zeile, 13)
End With
End Sub
Das für Cells geschriebene gilt auch für alle anderen Objekte eines Tabellenblatts (Range, Columns, Rows, etc).
Zuweisung von Werten zu Textboxen in Userform2:
Die Zuweisung der Werte, so dass Nr. der Textbox und Nummer der Spalte übereinstimmen ist im Code ja schon fast korrekt umgesetzt.
Du musst im Userform-Editor jetzt die Textboxen an die richtige Posiion verschieben. Dazu im VBA-Editor das Eigenschaften-Fenster einblenden; dann siehst du nach Klick auf eine Textbox deren Namen. Theoretisch kann man auch die Namen der Textboxen ändern. In deinem Fall geht das Verschieben aber schneller.
Datumseingaben:
Wenn in den Textboxen ein Datum eingegben wird, dann muss der Textbox-Inhalt beim Eintragen in das Tabellenblatt in einen Datumswert umgewandelt werden, sonst gibt es evtl. Probleme bei der Auswertung, wenn text statt Datum in den Zellen steht. In der Datei hab ich den Code mal für 2 Textboxen entsprechend angepasst.
Gruß
Franz
Deine Datei angepasst:
https://www.herber.de/bbs/user/95021.xlsm