Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1488to1492
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
VBA Textbox füllen
27.04.2016 18:22:22
Michael
Hallo VBA Experten,
mal wieder habe ich ein Problem!
Ich möchte in die Listbox1 nicht die erste und zweite Spalte laden, sondern die 1 und dritte! Wie muss ich 1 To 2 ändern damit das funktioniert?
Gruss Michael
'############################### Eingabemasken Mitarbeiter werden bei Start geleert und gefüllt (Beginn Einlesevorgang) ####################
'############################### Ebenso wird die Geburtstagsliste geladen ####################
'Startroutine für Eiungabemasken Mitarbeiter wird ausgeführt bevor die Eingabemaske angezeigt wird

Private Sub UserForm_Initialize()
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
'Alle TextBoxen leer machen
txtPersonalnummer = ""
txtVorname = ""
txtName = ""
txtGeburtsdatum = ""
txtEintritt = ""
txtBeruf = ""
txtAbteilung = ""
txtEntgeltgruppe = ""
txtStufe = ""
txtSchlüsselnummer = ""
txtLeistungsbeurteilung = ""
txtKF = ""
txtJubiläum = ""
txtEraGrundlohn = ""
txtEraGrundlohnStd = ""
txtLeistungsbeurteilungP = ""
txtGrundlohngesamt = ""
txtKostenstelle = ""
txtEingruppierung = ""
txtAnrede = ""
Dim breite(1 To 11) As Single
Dim spaltenbreite As String
For i = 1 To 2
breite(i) = Sheets(1).Columns(i).ColumnWidth * 6 '5.075 ##Spaltenbreite angepasst##
spaltenbreite = spaltenbreite & breite(i) & ";"
Next
With Me.ListBox1
.ColumnCount = 2
.ColumnHeads = True
.RowSource = "Stammdaten!A2:B500" '##Geburtstagsliste in Userform einlesen##
.ColumnWidths = spaltenbreite
ListBox1.ColumnWidths = "2,5cm;4,0cm"
End With
'######################################      Eingabemasken Era werden bei Start geleert und gefü _
llt (Beginn Einlesevorgang)       ##############################################################################################################
'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
'Alle TextBoxen leer machen
txtEraJahr = ""
txtEraMitarbeiter = ""
txtEraAzubi1 = ""
txtEraAzubi2 = ""
txtEraAzubi3 = ""
txtEraAzubi4 = ""
'In dieser Routine laden wir alle vorhandenen
'Einträge in die Listbox ListL
ListEra.Clear 'Zuerst einmal die Liste leeren
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der dritten Spalte in Tabelle 6 drin steht
Do While Trim(CStr(Tabelle3.Cells(lZeile, 7).Value))  ""
'Aktuelle Zeile in die ListBox ListL eintragen
ListEra.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 7).Value))
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
'######################################      Geburts-und Jubilarstage aus  Geburtstage In  _
Listbox einlesen      ###########################################################################
For i = 4 To 11
breite(i) = Sheets(1).Columns(i).ColumnWidth * 6 '5.075 ##Spaltenbreite angepasst##
spaltenbreite = spaltenbreite & breite(i) & ";"
Next
With Me.ListGeb
.ColumnCount = 8
.ColumnHeads = True
.RowSource = "Geburtstag!D2:K500" '##Geburtstagsliste in Userform einlesen##
.ColumnWidths = spaltenbreite
ListGeb.ColumnWidths = "2,5cm;4,0cm;3,2cm;1,3cm;3,0cm;3,0cm;4,0cm;3,3cm"
End With
End Sub

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Textbox füllen
27.04.2016 18:27:08
Werner
Hallo Michael,
auf die Schnelle
With Me.ListBox1
.ColumnCount = 3
.ColumnHeads = True
.RowSource = "Stammdaten!A2:C500"
und dann die Breite für die Spalte 2 in der Listbox auf 0 setzen.
Gruß Werner

AW: VBA Textbox füllen
27.04.2016 18:39:25
Michael
Hallo Werner
Hallo Daniel,
manchmal kann eine Lösung so einfach sein, man muss nur drauf kommen.....
Ich Depp.
Vielen Dank euch beiden

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
27.04.2016 18:49:27
Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
27.04.2016 19:06:08
Michael
Ich nochmal, jetzt werden meine Änderungen nicht mehr gespeichert. Ich denke er findet die Persiónalnummer nicht in der Listbox da ich aus einer Spalte drei ín der Listbox gemacht habe.
Wie sprechen ich nun die erte Spalte der Listbox beim vergleichen mit der ersten Spalte des Tabellenblattes an?
Gruss Michael
'############################### Anderungen Mitarbeiter speichern ###################################################
Private Sub cmdSpeichern_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
If Trim(CStr(txtPersonalnummer.Value)) = "" Then
'Meldung ausgeben
MsgBox "Du musst mindestens einen Namen/Personalnummer eingeben!", vbCritical +  _
vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
If MsgBox("Möchtest du die Ändrungen wirklich übernehmen?", vbYesNo) = vbNo Then
Unload Me
FormularMitarbeiter.Show
End If
'Ausbauoption: Prüfen, ob der Name in Tabelle1 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Value = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(txtPersonalnummer.Value))
Tabelle1.Cells(lZeile, 2).Value = txtVorname.Text
Tabelle1.Cells(lZeile, 3).Value = txtName.Text
Tabelle1.Cells(lZeile, 4).Value = txtGeburtsdatum.Value
Tabelle1.Cells(lZeile, 5).Value = txtEintritt.Value
Tabelle1.Cells(lZeile, 7).Value = txtBeruf.Text
Tabelle1.Cells(lZeile, 8).Value = txtAbteilung.Text
Tabelle1.Cells(lZeile, 9).Value = txtEntgeltgruppe.Value
Tabelle1.Cells(lZeile, 11).Value = txtSchlüsselnummer.Text
Tabelle1.Cells(lZeile, 14).Value = txtLeistungsbeurteilung.Value
Tabelle1.Cells(lZeile, 16).Value = txtKF.Value
Tabelle1.Cells(lZeile, 22).Value = txtKostenstelle.Value
Tabelle1.Cells(lZeile, 23).Value = txtEingruppierung.Value
Tabelle1.Cells(lZeile, 24).Value = txtAnrede.Value
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name geändert hat
If ListBox1.Text  Trim(CStr(txtPersonalnummer.Value)) Then
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
' Liste neu sortieren
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, 3).End(xlUp).Row
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Add Key:=Range( _
"C1:C" & loLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Stammdaten").Sort
.SetRange Range("A1:X" & loLetzte)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.Goto Reference:=Sheets("Stammdaten").Range("AE1")
With Sheets("Stammdaten")
loKopieren = .Cells(Rows.Count, 2).End(xlUp).Row
.Range(.Cells(2, 2), .Cells(loKopieren, 4)).Copy
Sheets("Geburtstag").Cells(3, 4).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 18), .Cells(loKopieren, 19)).Copy
Sheets("Geburtstag").Cells(3, 7).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 6), .Cells(loKopieren, 6)).Copy
Sheets("Geburtstag").Cells(3, 9).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 20), .Cells(loKopieren, 21)).Copy
Sheets("Geburtstag").Cells(3, 10).PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
ActiveWorkbook.Save
Unload Me
FormularMitarbeiter.Show
End Sub

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
27.04.2016 20:46:44
Werner
Hallo Michael,
versuch mal:
If ListBox1.List(ListBox1.ListIndex, 0) = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
Gruß Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
28.04.2016 16:05:41
Michael
Hallo Werner,
funktioniert leider nicht! Schmeist keinen Fehler aber ändert auch nichts.
Gruss Michael

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
29.04.2016 00:27:32
Werner
Hallo Michale,
versuch mal das hier. Ich konnte aber nicht richtig testen, hatte ehrlich gesagt keine Lust die ganze Datei und die Userform nachzubauen.
Private Sub CommandButton1_Click()
Dim lZeile As Long
Dim wert As String
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If Listbox1.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die Namen Spalte auch gefüllt ist!!
If Trim(CStr(txtPersonalnummer.Value)) = "" Then
Meldung ausgeben
MsgBox "Du musst mindestens einen Namen/Personalnummer eingeben!", vbCritical + _
vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
If MsgBox("Möchtest du die Ändrungen wirklich übernehmen?", vbYesNo) = vbNo Then
Unload Me
FormularMitarbeiter.Show
End If
'Ausbauoption: Prüfen, ob der Name in Tabelle1 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))  ""
'Datensatz Name Spalte mit selektiertem Eintrag der ListBox vergleichen
wert = CStr(Listbox1.List(Listbox1.ListIndex, 0))
If wert = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(txtPersonalnummer.Value))
Tabelle1.Cells(lZeile, 2).Value = txtVorname.Text
Tabelle1.Cells(lZeile, 3).Value = txtName.Text
Tabelle1.Cells(lZeile, 4).Value = txtGeburtsdatum.Value
Tabelle1.Cells(lZeile, 5).Value = txtEintritt.Value
Tabelle1.Cells(lZeile, 7).Value = txtBeruf.Text
Tabelle1.Cells(lZeile, 8).Value = txtAbteilung.Text
Tabelle1.Cells(lZeile, 9).Value = txtEntgeltgruppe.Value
Tabelle1.Cells(lZeile, 11).Value = txtSchlüsselnummer.Text
Tabelle1.Cells(lZeile, 14).Value = txtLeistungsbeurteilung.Value
Tabelle1.Cells(lZeile, 16).Value = txtKF.Value
Tabelle1.Cells(lZeile, 22).Value = txtKostenstelle.Value
Tabelle1.Cells(lZeile, 23).Value = txtEingruppierung.Value
Tabelle1.Cells(lZeile, 24).Value = txtAnrede.Value
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich der Name geändert hat
If wert  Trim(CStr(txtPersonalnummer.Value)) Then
Call UserForm_Initialize
If Listbox1.ListCount > 0 Then Listbox1.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
' Liste neu sortieren
loLetzte = Sheets("Stammdaten").Cells(Rows.Count, 3).End(xlUp).Row
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Stammdaten").Sort.SortFields.Add Key:=Range( _
"C1:C" & loLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Stammdaten").Sort
.SetRange Range("A1:X" & loLetzte)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.Goto Reference:=Sheets("Stammdaten").Range("AE1")
With Sheets("Stammdaten")
loKopieren = .Cells(Rows.Count, 2).End(xlUp).Row
.Range(.Cells(2, 2), .Cells(loKopieren, 4)).Copy
Sheets("Geburtstag").Cells(3, 4).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 18), .Cells(loKopieren, 19)).Copy
Sheets("Geburtstag").Cells(3, 7).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 6), .Cells(loKopieren, 6)).Copy
Sheets("Geburtstag").Cells(3, 9).PasteSpecial Paste:=xlValues
.Range(.Cells(2, 20), .Cells(loKopieren, 21)).Copy
Sheets("Geburtstag").Cells(3, 10).PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
ActiveWorkbook.Save
Unload Me
FormularMitarbeiter.Show
End Sub
Gruß Werner

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
29.04.2016 15:32:47
Michael
Hallo Werner,
leider klappt es immer noch nicht. Habe auch viel gegoogelt, komme aber nicht weiter.
habe mal eine ältere Version geändert und auf den Server geladen.
Ich dachte es geht auch ohne die Datei. Sorry!
https://www.herber.de/bbs/user/105341.xlsm
Gruß Michael

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
29.04.2016 17:30:55
Werner
Hallo Michael,
mal schaun, ob ich am Wochenende dazu komme.
Ich stell mal offen, falls jemand anderes reinschauen will.
Gruß Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
29.04.2016 18:13:53
Michael
Hallo Werner,
Danke dir!
Schönes Wochenende

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.05.2016 15:29:39
Werner
Hallo Michael,
ungeduldig geworden? Hatte am Wochenende nicht viel Zeit. Habe mir die Sache mal kurz angeschaut. Das was du im neuen Betrag schreibst stimmt so nicht. Der Vergleich zwischen dem Lisbox-Eintrag und der Spalte im Blatt funktioniert sehr wohl. Allerdings führt der Code dann jeweils nur die erste Zeile aus, bei der die Werte aus den Textboxen in die Tabelle geschrieben werden. Dann verzweigt der Code dann plötzlich wieder in die Click-Routine der Listbox1 und arbeitet die ab. Dabei werden die Textboxen dann mit den Werten aus dem Tabellenblatt gefüllt was zur Folge hat, dass die ganzen Änderungen weg sind.
Warum das so ist, konnte ich noch nicht rauskriegen.
Gruß Werner

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.05.2016 22:41:23
Michael
Hallo Werner, nicht ungeduldig, wollte für Unterstützung sorgen 😆 Ich habe auch nochmal alles versucht, bekomme es aber nicht hin. Halbe Internet durchforstet.. ohne Erfolg. Wäre natürlich super wenn du mir da helfen könntest. Gruß Michael

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
03.05.2016 05:51:19
Werner
Hallo Michael,
ich bin jetzt zwar nicht der Experte, aber ich werde weiter dran bleiben, das fuchst mich schon. Dieser Thread hier wird wohl demnächst ins Archiv wandern.
Ich beobachte dann auch mal deinen neuen Beitrag. Mal schauen, ob da auch von anderer Seite was kommt.
Gruß Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
03.05.2016 20:05:04
Michael
Hallo Werner,
habe das Problem mit 2 Listboxen gelöst. War einfacher.
Vielen Dank für deine Mühe
Gruß Michael

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
03.05.2016 23:37:05
Werner
Hallo Michael,
werde mich trotzdem noch mal an die Sache mit der zwei(drei) spaltigen Listbox dran machen - das fuchst mich einfach.
Sollte ich eine Lösung finden werde ich ggf. einen neuen Beitrag aufmachen und dich mit @Michael anschreiben.
Gruß Werner

AW: Gerne u. Danke für die Rückmeldung. o.w.T.
04.05.2016 06:15:36
Michael
Guten Morgen Werner,wäre super, würde es bei mir dann auch umstellen, die perfekte Lösung ist die jetzige nämlich nicht. Gruß Michael

AW: VBA Textbox füllen
27.04.2016 18:30:34
Daniel
Hi
da würde alle drei Spalten in die Listbox laden und die zweite einfach ausblenden
With Me.ListBox1
.ColumnCount = 3
.ColumnHeads = True
.RowSource = "Stammdaten!A2:C500" '##Geburtstagsliste in Userform einlesen##
.ColumnWidths = "2,5cm;0cm;4,0cm"
End With
alles andere macht die Sache kompliziert.
gruß Daniel

Anzeige
AW: @Daniel - zu spät
27.04.2016 18:32:31
Werner
Hallo Daniel,
zu spääät ;-P
Gruß Werner

AW: @Daniel - zu spät
27.04.2016 19:11:35
Daniel
Was für ein Kindetgarteniveau, Werner

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige