Userform - Daten in eine intelligente Tabelle übertragen

  • Excel

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von SZR2D.

    Userform - Daten in eine intelligente Tabelle übertragen

    Hallo Zusammen, ich habe ein folgendes Problem.
    Ich habe eine Userform erstellt und über die soll ein neuer Benutzer angelegt werden.
    Das soll folgendermaßen funktionieren:

    In die Textbox "new_id" wird die Mitarbeiterkarte eingescannt mit der Personalnummer
    In die Textboxt "new_id2" soll die Karte wiederholt gescannt werden
    Wenn "new_id" und "new_id2" übereinstimmen, wird die Textbox "new_name" aktiviert
    In die Textbox "new_name" wird dann der Name vom Mitarbeiter eingegen
    Wenn alle Felder ausgefüllt sind, wird der Commandbutton "cmd_ok" aktiviert
    Über den Button werden "new_id2" und "new_Name" in eine Tabelle in die nächste leere Zeile eingetragen.

    Hier handelt es sich aber um eine intelligente Tabelle ("id")

    Das funktioniert alles soweit, aber wenn ich jetzt mit der neuen Userkennung über eine andere Userform mich anmelden will, wird der neue User nicht erkannt und taucht in der Liste nicht auf.
    Wenn ich aber händisch den neuen User in der Tabelle anlege, funktioniert alles wie es sollte...

    Hier der Code zu der Userform "Neuer Benutzer"

    Visual Basic-Quellcode

    1. Private Sub userform_Initialize()
    2. 'Zensur bei der UserID Eingabe
    3. With Me.ma_id
    4. .PasswordChar = "*"
    5. .SetFocus
    6. .ForeColor = RGB(0, 0, 255)
    7. .Font.Size = 14
    8. End With
    9. With Me.new_id
    10. .PasswordChar = "*"
    11. .ForeColor = RGB(0, 0, 255)
    12. .Font.Size = 14
    13. End With
    14. With Me.new_id2
    15. .PasswordChar = "*"
    16. .ForeColor = RGB(0, 0, 255)
    17. .Font.Size = 14
    18. End With
    19. With Me.New_name
    20. .ForeColor = RGB(0, 0, 255)
    21. .Font.Size = 14
    22. End With
    23. End Sub
    24. Private Sub ma_id_Change()
    25. 'Name aktivieren
    26. ma_name.Enabled = True
    27. 'Name befüllen
    28. Dim Zeile As Long
    29. Dim tbl As ListObject
    30. Set tbl = DatenMA.ListObjects("adminlog")
    31. 'Schleife über alle Zeilen der Tabelle
    32. For Zeile = 1 To tbl.DataBodyRange.Rows.Count
    33. 'Pürfen auf Übereinstimmung
    34. If ma_id.Value = tbl.DataBodyRange(Zeile, 1).Text Then
    35. 'Wert zuweisen
    36. ma_name.Value = tbl.DataBodyRange(Zeile, 2).Text
    37. 'User ID ausblenden
    38. ma_id.Visible = False
    39. Label1.Visible = False
    40. End If
    41. Next Zeile
    42. 'Name deaktivieren
    43. ma_name.Enabled = False
    44. End Sub
    45. Private Sub new_id2_Change()
    46. If new_id.Value = new_id2.Value Then
    47. New_name.Enabled = True
    48. End If
    49. new_id.Enabled = False
    50. End Sub
    51. Private Sub New_name_Change()
    52. new_id2.Enabled = False
    53. If New_name > 0 Then
    54. cmd_ok.Enabled = True
    55. End If
    56. End Sub
    57. Private Sub cmd_ok_click()
    58. 'Prüfung, ob alle Felder befüllt sind
    59. If New_name.Value = "" Then
    60. MsgBox "Name vom neuen Benutzer muss angegeben werden!", , ""
    61. Exit Sub
    62. End If
    63. With Worksheets("Freigaben")
    64. ' Passwortschutz deaktivieren
    65. .Unprotect Password:=Worksheets("Freigaben").Range("E4")
    66. 'Daten ins Tabellenblatt übernehmen
    67. Dim neueZeile As Long
    68. neueZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    69. ' ID
    70. .Cells(neueZeile, 1).Value = new_id2.Text
    71. ' Name
    72. .Cells(neueZeile, 2).Value = New_name.Text
    73. ' Passwortschutz aktivieren
    74. .Protect Password:=Worksheets("Freigaben").Range("E4")
    75. End With
    76. Unload Me
    77. End Sub


    Muss ich beim "Private Sub cmd_ok_click()" irgendwie die intelligente Tabelle ansprechen? Wenn ja - wie mache ich das effektiv?
    Ich habe es mal so probiert, aber es kommt immer ein Debugfehler bei der Zeile 20...

    Visual Basic-Quellcode

    1. Private Sub cmd_ok_click()
    2. 'Prüfung, ob alle Felder befüllt sind
    3. If New_name.Value = "" Then
    4. MsgBox "Name vom neuen Benutzer muss angegeben werden!", , ""
    5. Exit Sub
    6. End If
    7. Dim neueZeile As Long
    8. Dim tbl As ListObject
    9. Set tbl = DatenMA.ListObjects("id")
    10. With Worksheets("Freigaben")
    11. ' Passwortschutz deaktivieren
    12. .Unprotect Password:=Worksheets("Freigaben").Range("E4")
    13. End With
    14. 'Daten ins Tabellenblatt übernehmen
    15. With tbl
    16. neueZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    17. neueZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    18. ' ID
    19. .Cells(neueZeile, 1).Value = new_id2.Text
    20. ' Name
    21. .Cells(neueZeile, 2).Value = New_name.Text
    22. ' Passwortschutz aktivieren
    23. .Protect Password:=Worksheets("Freigaben").Range("E4")
    24. End With
    25. Unload Me
    26. End Sub
    Zum besseren Verständnis schau Dir dies hier an learn.microsoft.com/de-de/office/vba/api/excel.listobject

    Visual Basic-Quellcode

    1. Dim tblRow As Range
    2. Set tblRow = tbl.ListRows.Add.Range
    3. With tblRow
    4. .Cells(1).Value = new_id2.Text
    5. .Cells(2).Value = New_name.Text
    6. End With
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).