Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1400to1404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte in Userform Speichern

Werte in Userform Speichern
15.01.2015 09:20:20
Stefan
Hallo, ich habe folgendes Problemchen.
Hier der Link zur Datei.
https://www.herber.de/bbs/user/95016.xlsm
Was ich nicht hinbekomme ist das er die Daten im Tabellenblatt "Personal" -> Personalnummer sucht. Und nicht bei 8 Zahlen ein Fehler auswirft "Überlauf"
Ich würde gerne auch festlegenb das TextBox1 bei "Personal" -> "DG" ist. Was muss ich grundlegend im Code verändern.
Für die Suche habe ich folgendes

Private Sub CommandButton2_Click()
Dim x As Integer
Z = Worksheets("Personal").UsedRange.Rows.Count
x = TextBox2
temp = 0
For i = 2 To Z
If Cells(i, 1) = 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

Danke,Stefan

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte in Userform Speichern
15.01.2015 12:32:34
AndrRo
Hallo Stefan,
mit "Dim x As Integer"
deckst du Zahlen bis 32.767 ab, keine achtstelligen
gruss
AndrRo

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

Anzeige
AW: Werte in Userform Speichern
15.01.2015 13:18:16
Stefan
Danke dir fsc,
Mega geil ! jetzt Muss ich nur noch probieren das er beim Speichern / Abbrechen wieder ins erste Tabellenblatt zurück springt.
Grüße

AW: Werte in Userform Speichern
15.01.2015 13:58:34
Rudi
Hallo,
wieder ins erste Tabellenblatt zurück springt
man muss nicht 'springen'!
Ansprechen (referenzieren) reicht.
Gruß
Rudi

AW: Werte in Userform Speichern
15.01.2015 16:21:07
Stefan
Jau danke. War nicht so schnell zum Posten. Hatte im ersten Moment wieder zu kompliziert gedacht.
Muss erst mal schauen das ich eine Abfrage schreibe die mit dem eingegebenen Datum eine Auswertung geht wann der nächste Impftermin ist. Er soll dort dann alle anzeigen die in den nächsten 4 Wochen das machen müssten.
Grüße

Anzeige
AW: Werte in Userform Speichern
15.01.2015 12:38:25
Rudi
Hallo,
Und nicht bei 8 Zahlen ein Fehler auswirft "Überlauf"
Integer geht nur im Bereich von -32.768 bis 32.767!
Private Sub CommandButton2_Click()
Dim x As Long
x = TextBox2
Zeile = Application.Match(x, Worksheets("Personal").Columns(1), 0)
If Not IsError(Zeile) Then
UserForm2.Show
Else
MsgBox "Personalnummer nicht vorhanden!", vbExclamation
TextBox2 = ""
End If
End Sub

Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige