Excel VBA - Datenbankzeile in Eingabeformular übernehmen
#1
Halllo zusammen,
ich versuche gerade, eine Schülerdatenbank mit Abfragen nach der Vorlage einer Kundendatenbank von Kai Weissmann zu erstellen.
Dabei erstelle ich die Anwendung neu, um dabei mehr über VBA zu erfahlen (also keine Änderung des vorgegebenen Codes)
Folgendes Problem: Ich versuche, die Daten einer Schülerdatenbank in ein Eingabeformular zu übernehmen. Code:

Sub KundenBearbeiten_DBEingabe()

'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)

Dim Zeile As Long
Zeile = ActiveCell.Row = tbl.HeaderRowRange.Row

With tb_Eingabeformular
   
    'Spalten leeren
    .Columns("H").ClearContents
    .Columns("L").ClearContents
   
   
  'Eingabeformular befüllen
    .Range("H12").Value = tbl.DataBodyRange(Zeile, 1).Value
    .Range("H18").Value = tbl.DataBodyRange(Zeile, 2).Value
    .Range("H20").Value = tbl.DataBodyRange(Zeile, 3).Value
    .Range("H22").Value = tbl.DataBodyRange(Zeile, 4).Value
    .Range("H24").Value = tbl.DataBodyRange(Zeile, 5).Value
    .Range("L18").Value = tbl.DataBodyRange(Zeile, 6).Value
    .Range("L20").Value = tbl.DataBodyRange(Zeile, 7).Value
    .Range("L22").Value = tbl.DataBodyRange(Zeile, 8).Value
    .Range("L24").Value = tbl.DataBodyRange(Zeile, 9).Value
   
    'Navigieren auf das Eingabeformular
    .Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = False
    .Shapes.Range(Array("txt_Bearbeiten", "img_Bearbeiten")).Visible = True
    .Select
      
    'Zelle auswählen
    .Range("H18").Select
   
End With

End Sub

Während bei Kai die richtigen Ergebnisse erscheinen, erscheinen bei mir nur die Überschriften und nicht das Ergebnis der markierten Zeiile.
Ich komm einfach nicht auf den Fehler. Entweder liegt er in der Zeile:
Dim Zeile As Long
Zeile = ActiveCell.Row = tbl.HeaderRowRange.Row

Oder aber, ich hab' irgendwie den Header falsch definiert. Hat jemand eine Idee?
Hier noch die Screenshots der Datenbank und des Eingabeformulars.
   
   
Antworten Top
#2
Moin!
Lade mal die Datei hoch, dann braucht man nichts nachbauen.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • setembrini
Antworten Top
#3
was soll denn, deiner Meinung nach, da rauskommen?
Zeile = ActiveCell.Row = tbl.HeaderRowRange.Row

des zweite "=" sollte doch eher ein Minus sein. 

Ich nehme lieber die Listrows statt des Rangebezuges wie z.b. tbl.DataBodyRange(Zeile, 1).Value
das wäre in deinem Fall tbl.Listrows(zeile).Range(1)

https://www.thespreadsheetguru.com/blog/...cel-tables
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • setembrini
Antworten Top
#4
Hallo,

deinem Quelltext entnehme ich, dass du das Eingabeformular per VBA befüllen möchtest. Das läuft bei Kai genau anders herum. Dort werden im Eingabeformular Daten eingegeben, die dann in die "Datenbank" geschrieben werden.
Ansonsten bin ich bei Ralf: eine Beispieldatei hilft helfen. Wenn wir das nachbauen, kommt sicher was anderes dabei heraus. Das Original von Kai liegt mir vor, aber du hast da offenbar schon reichlich geändert.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#5
Hier die Datei.
Danke für die Bemühungen.


.xlsm   Schuelerverwaltung (version 1).xlsb.xlsm (Größe: 108,62 KB / Downloads: 3)

Das Minus war's. Ich hab' wie ein Verrückter darauf gestarrt und das nicht gesehen.
Aber im Alter von fast 70 ist die Sehschwäche vorprogrammiert.
Vielen, vielen Dank nochmals.


PS.: Kai weist in seinem Video darauf hin, dass es statt des Range Bezugs eine elegantere Möglichkeit gibt - ich wollte aber erst mal den gesamten Code nachvollziehen.

Das Minus war's. Ich hab' wie ein Verrückter darauf gestarrt und das nicht gesehen.
Aber im Alter von fast 70 ist die Sehschwäche vorprogrammiert.
Vielen, vielen Dank nochmals.


PS.: Kai weist in seinem Video darauf hin, dass es statt des Range Bezugs eine elegantere Möglichkeit gibt - ich wollte aber erst mal den gesamten Code nachvollziehen.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste