Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1880to1884
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
Userform / intelligente Tabelle
22.04.2022 08:54:47
Ruben
ich habe nachstehendes VBA geschrieben um die erfasste Daten in der Userform in meine intelliente Tabelle zu übertragen. leider wird in der Tabelle nicht ein Zeile dazugegeben und dort die Daten erfasst, sondern die letzte Zeile überschrieben. wo ist mein Fehler?

Private Sub ButtonSpeichern_Click()
'Daten ins Tabellenblatt eintragen
Dim tbl As ListObject
Set tbl = Tabelle3.ListObjects(1)
Dim neueZeile As Long
'Zeile hinzufügen
neueZeile = Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row
'Zeile in Variabler speichern
Zeile = tbl.DataBodyRange.Rows.Count
'Daten befüllen
With Tabelle3
tbl.DataBodyRange(Zeile, 1).Value = TextBoxID.Value
tbl.DataBodyRange(Zeile, 2).Value = ComboBoxBetrieb.Value
tbl.DataBodyRange(Zeile, 3).Value = TextBoxSuffix.Value
tbl.DataBodyRange(Zeile, 4).Value = ComboBoxAnrede.Value
tbl.DataBodyRange(Zeile, 5).Value = TextBoxTitel.Value
tbl.DataBodyRange(Zeile, 6).Value = TextBoxFamilienname.Value
tbl.DataBodyRange(Zeile, 7).Value = TextBoxVorname.Value
tbl.DataBodyRange(Zeile, 8).Value = TextBoxName.Value
tbl.DataBodyRange(Zeile, 9).Value = ComboBoxGeschlecht.Value
tbl.DataBodyRange(Zeile, 10).Value = ComboBoxNationalitaet.Value
End With
'UserForm schließen
Unload Me
'Navigieren zu Tabellenblatt Datenbank
Tabelle3.Select
ActiveWindow.ScrollRow = tbl.DataBodyRange(Zeile, 1).Row
tbl.DataBodyRange(Zeile, 1).Select
End Sub

Private Sub ButtonSpeichern_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ButtonSpeichern.BackColor = RGB(179, 136, 235)
End Sub

Private Sub UserForm_Initialize()
'Tabelle Einlesen
Dim tbl As ListObject
Set tbl = Tabelle3.ListObjects(1)
'ID befüllen
TextBoxID.Value = tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, 1).Value + 1
'ComboBoxen befüllen
ComboBoxBetrieb.List = Tabelle12.ListObjects("tblBetrieb").DataBodyRange.Value
ComboBoxBetrieb.ListIndex = 0
ComboBoxAnrede.List = Tabelle12.ListObjects("tblAnrede").DataBodyRange.Value
ComboBoxAnrede.ListIndex = 0
ComboBoxGeschlecht.List = Tabelle12.ListObjects("tblGeschlecht").DataBodyRange.Value
ComboBoxGeschlecht.ListIndex = 0
ComboBoxFamilienstand.List = Tabelle12.ListObjects("tblFamilienstand").DataBodyRange.Value
ComboBoxFamilienstand.ListIndex = 0
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform / intelligente Tabelle
22.04.2022 09:14:16
GerdL
Moin Ruben!

'Zeile ins Tabellchen einfügen.
tbl.ListRows.Add
'Zeile in Variabler speichern
Zeile = tbl.DataBodyRange.Rows.Count
Da dein Listobjekt ordentlich deklariert ist, kannst du auf "With Tabelle3" um den Databody außenrum verzichten.
Gruß Gerd
AW: Userform / intelligente Tabelle
22.04.2022 11:01:57
Ruben
Hallo Gerd - danke für die Rasche Antwort - Dein Vorschlag war ursprünglich hinterlegt. Jedoch stürtzt das Excel dann auf unerklärliche weise ab. ich weiß einfach nicht weiter! - Danke für die Hilfe
AW: Userform / intelligente Tabelle
22.04.2022 11:57:35
GerdL
Hallo Ruben,
teste mit der F8-Taste im Einzelschrittmodus. So solltest du normalerweise die fehlerhafte Codezeile u. eine Fehlermeldung erhalten.
Gruß Gerd
Anzeige
AW: Userform / intelligente Tabelle
22.04.2022 14:22:50
Ruben
Hallo Gerd - das habe ich jetzt versucht - irgendwie komme ich leider nicht weiter
Leider kann ich das Excel nicht hochladen, da es zu Groß ist.
hier nochmals der gesamte Code:

Private Sub ButtonSpeichern_Click()
'Daten ins Tabellenblatt eintragen
Dim tbl As ListObject
Set tbl = Tabelle3.ListObjects(1)
Dim neueZeile As Long
'Zeile ins Tabellchen einfügen.
tbl.ListRows.Add
'Zeile in Variabler speichern
Zeile = tbl.DataBodyRange.Rows.Count
'Daten befüllen
With Tabelle3
tbl.DataBodyRange(Zeile, 1).Value = TextBoxID.Value
tbl.DataBodyRange(Zeile, 2).Value = ComboBoxBetrieb.Value
tbl.DataBodyRange(Zeile, 3).Value = TextBoxSuffix.Value
tbl.DataBodyRange(Zeile, 4).Value = ComboBoxAnrede.Value
tbl.DataBodyRange(Zeile, 5).Value = TextBoxTitel.Value
tbl.DataBodyRange(Zeile, 6).Value = TextBoxFamilienname.Value
tbl.DataBodyRange(Zeile, 7).Value = TextBoxVorname.Value
tbl.DataBodyRange(Zeile, 8).Value = TextBoxName.Value
tbl.DataBodyRange(Zeile, 9).Value = ComboBoxGeschlecht.Value
tbl.DataBodyRange(Zeile, 10).Value = ComboBoxNationalitaet.Value
tbl.DataBodyRange(Zeile, 11).Value = TextBoxPLZ.Value
tbl.DataBodyRange(Zeile, 12).Value = TextBoxORT.Value
tbl.DataBodyRange(Zeile, 13).Value = TextBoxStrasse.Value
tbl.DataBodyRange(Zeile, 14).Value = TextBoxSVNr.Value
tbl.DataBodyRange(Zeile, 15).Value = TextBoxGeburtsdatum.Value
tbl.DataBodyRange(Zeile, 16).Value = ComboBoxFamilienstand.Value
tbl.DataBodyRange(Zeile, 17).Value = TextBoxTelePrivat.Value
tbl.DataBodyRange(Zeile, 18).Value = TextBoxMailPrivat.Value
tbl.DataBodyRange(Zeile, 19).Value = TextBoxBank.Value
tbl.DataBodyRange(Zeile, 20).Value = TextBoxBIC.Value
tbl.DataBodyRange(Zeile, 21).Value = TextBoxIBAN.Value
tbl.DataBodyRange(Zeile, 22).Value = TextBoxEU.Value
tbl.DataBodyRange(Zeile, 23).Value = ComboBoxAufenthaltsstaus.Value
tbl.DataBodyRange(Zeile, 24).Value = TextBoxAufenthaltgueltig.Value
tbl.DataBodyRange(Zeile, 25).Value = TextBoxBschaeftigungsbewilligung.Value
tbl.DataBodyRange(Zeile, 26).Value = TextBoxBeschaeftigunggueltig.Value
tbl.DataBodyRange(Zeile, 27).Value = TextBoxEintritt.Value
tbl.DataBodyRange(Zeile, 28).Value = TextBoxErsteintritt.Value
tbl.DataBodyRange(Zeile, 29).Value = TextBoxProbezeit.Value
tbl.DataBodyRange(Zeile, 30).Value = TextBoxBefristung.Value
tbl.DataBodyRange(Zeile, 31).Value = TextBoxAustritt.Value
tbl.DataBodyRange(Zeile, 32).Value = ComboBoxAustrittsgrund.Value
tbl.DataBodyRange(Zeile, 33).Value = ComboBoxFrage.Value
tbl.DataBodyRange(Zeile, 34).Value = ComboBoxTaetigkeit.Value
tbl.DataBodyRange(Zeile, 35).Value = ComboBoxKV.Value
tbl.DataBodyRange(Zeile, 36).Value = ComboBoxLohngruppe.Value
tbl.DataBodyRange(Zeile, 37).Value = ComboBoxVerwendungsgruppe.Value
tbl.DataBodyRange(Zeile, 38).Value = ComboBoxBeschaeftigungsjahr.Value
tbl.DataBodyRange(Zeile, 39).Value = ComboBoxBechaeftigungsart
tbl.DataBodyRange(Zeile, 40).Value = TextBoxArbeitstage.Value
tbl.DataBodyRange(Zeile, 41).Value = TextBoxWochenstunden.Value
tbl.DataBodyRange(Zeile, 42).Value = TextBoxMo.Value
tbl.DataBodyRange(Zeile, 43).Value = TextBoxDi.Value
tbl.DataBodyRange(Zeile, 44).Value = TextBoxMi.Value
tbl.DataBodyRange(Zeile, 45).Value = TextBoxDo.Value
tbl.DataBodyRange(Zeile, 46).Value = TextBoxFr.Value
tbl.DataBodyRange(Zeile, 47).Value = TextBoxSa.Value
tbl.DataBodyRange(Zeile, 48).Value = TextBoxSo.Value
tbl.DataBodyRange(Zeile, 49).Value = TextBoxMonatsstunden.Value
tbl.DataBodyRange(Zeile, 50).Value = TextBoxBruttolohn.Value
tbl.DataBodyRange(Zeile, 51).Value = TextBoxStundenlohn.Value
End With
'UserForm schließen
Unload Me
'Navigieren zu Tabellenblatt Datenbank
Tabelle3.Select
ActiveWindow.ScrollRow = tbl.DataBodyRange(Zeile, 1).Row
tbl.DataBodyRange(Zeile, 1).Select
End Sub

Private Sub ButtonSpeichern_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ButtonSpeichern.BackColor = RGB(179, 136, 235)
End Sub

Private Sub UserForm_Initialize()
'Tabelle Einlesen
Dim tbl As ListObject
Set tbl = Tabelle3.ListObjects(1)
'ID befüllen
TextBoxID.Value = tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, 1).Value + 1
'ComboBoxen befüllen
ComboBoxBetrieb.List = Tabelle12.ListObjects("tblBetrieb").DataBodyRange.Value
ComboBoxBetrieb.ListIndex = 0
ComboBoxAnrede.List = Tabelle12.ListObjects("tblAnrede").DataBodyRange.Value
ComboBoxAnrede.ListIndex = 0
ComboBoxGeschlecht.List = Tabelle12.ListObjects("tblGeschlecht").DataBodyRange.Value
ComboBoxGeschlecht.ListIndex = 0
ComboBoxFamilienstand.List = Tabelle12.ListObjects("tblFamilienstand").DataBodyRange.Value
ComboBoxFamilienstand.ListIndex = 0
ComboBoxNationalitaet.List = Tabelle12.ListObjects("tblLand").DataBodyRange.Value
ComboBoxNationalitaet.ListIndex = 0
ComboBoxAufenthaltsstaus.List = Tabelle12.ListObjects("tblAufenthaltsstaus").DataBodyRange.Value
ComboBoxAufenthaltsstaus.ListIndex = 0
ComboBoxBechaeftigungsart.List = Tabelle12.ListObjects("tblBechaeftigungsart").DataBodyRange.Value
ComboBoxBechaeftigungsart.ListIndex = 0
ComboBoxTaetigkeit.List = Tabelle12.ListObjects("tblTaetigkeit").DataBodyRange.Value
ComboBoxTaetigkeit.ListIndex = 0
ComboBoxKV.List = Tabelle12.ListObjects("tblKV").DataBodyRange.Value
ComboBoxKV.ListIndex = 0
ComboBoxLohngruppe.List = Tabelle12.ListObjects("tblLohngruppe").DataBodyRange.Value
ComboBoxLohngruppe.ListIndex = 0
ComboBoxVerwendungsgruppe.List = Tabelle12.ListObjects("tblVerwendungsgruppe").DataBodyRange.Value
ComboBoxVerwendungsgruppe.ListIndex = 0
ComboBoxBeschaeftigungsjahr.List = Tabelle12.ListObjects("tblBeschaeftigungsjahr").DataBodyRange.Value
ComboBoxBeschaeftigungsjahr.ListIndex = 0
ComboBoxFrage.List = Tabelle12.ListObjects("tblFrage").DataBodyRange.Value
ComboBoxFrage.ListIndex = 0
ComboBoxAustrittsgrund.List = Tabelle12.ListObjects("tblKuendigungsgrund").DataBodyRange.Value
ComboBoxAustrittsgrund.ListIndex = 0
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
ButtonSpeichern.BackColor = RGB(190, 156, 237)
End Sub

Private Sub TextBoxMo_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxDi_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxMi_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxDo_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxFr_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxSa_Change()
Call Wochenstunden
End Sub

Private Sub TextBoxSo_Change()
Call Wochenstunden
End Sub

Private Sub Wochenstunden()
If Len(TextBoxMo.Text) = 0 Then
TextBoxMo.Value = 0
End If
If Len(TextBoxDi.Text) = 0 Then
TextBoxDi.Value = 0
End If
If Len(TextBoxMi.Text) = 0 Then
TextBoxMi.Value = 0
End If
If Len(TextBoxDo.Text) = 0 Then
TextBoxDo.Value = 0
End If
If Len(TextBoxFr.Text) = 0 Then
TextBoxFr.Value = 0
End If
If Len(TextBoxSa.Text) = 0 Then
TextBoxSa.Value = 0
End If
If Len(TextBoxSo.Text) = 0 Then
TextBoxSo.Value = 0
End If
Me.TextBoxWochenstunden = CDbl(TextBoxMo.Value) + CDbl(TextBoxDi.Value) + CDbl(TextBoxMi.Value) + CDbl(TextBoxDo.Value) + CDbl(TextBoxFr.Value) + CDbl(TextBoxSa.Value) + CDbl(TextBoxSo.Value)
End Sub

Private Sub TextBoxWochenstunden_Change()
Call Monatsstunden
End Sub

Private Sub Monatsstunden()
Me.TextBoxMonatsstunden.Value = CDbl(TextBoxWochenstunden.Value) * CDbl(4.333)
TextBoxMonatsstunden = Format("0" & TextBoxMonatsstunden, "#")
End Sub

Private Sub TextBoxVorname_Cange()
Call Namezusammen
End Sub

Private Sub TextBoxFamilienname_Cange()
Call Namezusammen
End Sub

Private Sub Namezusammen()
Me.TextBoxName.Text = Me.TextBoxVorname.Text & " " + Me.TextBoxFamilienname.Text
End Sub

Private Sub TextBoxPLZ_AfterUpdate()
Dim varRes As Variant
If IsNumeric(TextBoxPLZ) Then
With Sheets("Verweise")
varRes = Application.Match(CDbl(TextBoxPLZ), .Range("AK1:AK2123"), 0)
If IsNumeric(varRes) Then
TextBoxORT = Application.Index(.Range("AL1:AL2123"), varRes)
Else
TextBoxORT = "PLZ '" & TextBoxPLZ & "' nicht gefunden"
End If
End With
Else
TextBoxORT = "Bitte PLZ eingeben"
End If
End Sub

Private Sub TextBoxVorname_Change()
TextBoxName.Value = TextBoxVorname.Value & " " & TextBoxFamilienname.Value
TextBoxSuffix.Value = TextBoxVorname & "" & TextBoxFamilienname
End Sub

Private Sub TextBoxFamilienname_Change()
TextBoxName.Value = TextBoxVorname.Value & " " & TextBoxFamilienname.Value
TextBoxSuffix.Value = TextBoxVorname & "" & TextBoxFamilienname
End Sub

Private Sub TextBoxFamilienname_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii >= Asc("a") And KeyAscii 

Private Sub TextBoxBIC_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii >= Asc("a") And KeyAscii 

Private Sub TextBoxBruttolohn_Change()
TextBoxStundenlohn.Value = TextBoxBruttolohn.Value / TextBoxMonatsstunden.Value
TextBoxStundenlohn = Format("0" & TextBoxStundenlohn, "#.00")
End Sub

Anzeige
AW: Userform / intelligente Tabelle
22.04.2022 19:26:22
ralf_b
versuchs mal so. Dein Missmasch mit Listobjectelementen und Arbeitsblattbezügen kann schon mal verwirren.

Dim tbl As ListObject
Dim objLstRow As ListRow
Set tbl = Tabelle3.ListObjects(1)
'Zeile ins Tabellchen einfügen.
Set objLstRow = tbl.ListRows.Add
'Daten befüllen Zelle für Zelle in der neuen Zeile
With objLstRow
.Cells(1).Value = TextBoxID.Value
.Cells(2).Value = ComboBoxBetrieb.Value
'usw..
End With

AW: Userform / intelligente Tabelle
23.04.2022 08:18:21
Ruben
Guten Morgen Gerd - funkt leider nicht.
AW: Userform / intelligente Tabelle
23.04.2022 08:59:27
GerdL
Guten Morgen Ruben,
der letzte Teil-Code ist von Ralf u. stimmig.
Ohne deine signifikante Beispieldatei ist alles ein Rätselraten.
Damit sind wir wieder beim Autobeispiel.
Wenn du in der Werkstatt anrufst u. sagst "Mein Auto läuft nicht."
hat der Mechaniker 22000 Fehlerquellen im Kopf.
Die für deinen Fall passende kann er dir allerdings nicht sagen.
Gruß Gerd
Anzeige
AW: Userform / intelligente Tabelle
24.04.2022 19:04:20
Ruben
Schönen Sonntag Abend vorerst einmal.
ich habe das ganze Wochenende alles mögliche versucht und bin auf folgendes gestoßen!
mein bereits erklärte Userform wird aus einer davorgelegenen Userform erzeugt. wenn ich in der ersten Userform (UserFormPersonal) den Bezug zu Tabelle3 entferne funktioniert es.
https://www.herber.de/bbs/user/152631.xlsm
AW: Userform / intelligente Tabelle
24.04.2022 20:20:56
ralf_b
Entferne die Rowsource zuordnung in den Eigenschaften der Listbox und im Codemodul. Nimm die List Eigenschaft um die Tabellendaten einzufügen.
Das Listobject mußt du nicht ständig neu zu einer Variablen tbl zuweisen. Nutze dazu eine globale Variable.

Anzeige
AW: Userform / intelligente Tabelle
25.04.2022 08:39:36
Ruben
Hallo und danke für die rasche Antwort. leider versteh ich, aufgrund meines recht beschränkten Wissens über VBA, die Antwort nicht. LG Ruben
AW: Userform / intelligente Tabelle
25.04.2022 17:55:24
ralf_b
naja, is schon witzig das du es nicht verstehst, wo es doch auf Basis deines Codes geschrieben wurde.
Man kann eine Listbox auf 3 Arten füllen.
Entweder mit der Rowsource Eigenschaft. Listbox1.Rowsource = "Tabelle1!A1:X20"
Oder über die List Eigenschaft. Listbox1.List = Tabelle1.Range("A1:A20").Value
Oder über Additem. Damit fügt man eine Zeile der Liste hinzu.
Du hast die Rowsourceeigenschaft benutzt. Diese ist etwas problematisch weil sie sich mit den anderen Varianten nicht verträgt. Bei Rowsource werden nicht die Werte in die Liste geschrieben, sondern eine Verknüpfung Tabelle - Liste erzeugt. Ich glaube das deswegen das Hinzufügen einer Zeile per tbl.Listrows.add nicht funktioniert. Mein Test hat mich darin bestärkt.
In deinem Code wird mehrfach dim tbl as Listobject set tbl = Tab...... benutzt.
Wird die gleiche Variable mit dem gleichen Inhalt mehrfach( in verschieden Modulen) verwendet, sollte man diese einmal per public tbl as Listobject erstellen und nur einmal an entsprechender Stelle(bei erstmaliger Verwendung) per set tbl = tab.... der Objektvariablen ein Wert zu weisen. Global ( modulübergreifend) erstellt man Variablen in einem Allgemeinen Modul.
Schau dir im Eigenschaftsfenster deiner Listbox des Feld der Rowsourceeigenschaft an und lösche den Inhalt. Suche dann im Code nach Rowsource und ersetze den Code durch eine Listbox1.list = tbl.databodyrange Anweisung. Vorher aber der Objektvariablen tbl die Listbox zuweisen.
Mehr erkläre ich dazu nicht.
Anzeige
AW: Userform / intelligente Tabelle
26.04.2022 14:53:35
Ruben
Recht herzlichen Dank für die Info und Erklärung hab es jetzt hinbekommen.

31 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige