VBA: Datenbankzeile über Eingabeformular ändern
#1
Question 
Hallo zusammen,
ich hab' mal wieder ein Problem mit meinem Projekt Schülerdatenbank, basierend auf einer Kundendatenbank von Kai Weissmann.
Ich lade die gesamte Datei hoch - damit es im Bedarfsfall eingesehen werden kann.
Mein Problem:
Ich möchte einen Datensatz über ein Eingabeformular ändern. Dazu ist eine Prozedur hinter einem Symbol hinterlegt.
Die VBA Anweisung lautet (fängt mit "else" an, weil vorher noch die Prozedur 'Kunden anlegen' steht):
'Kunde bearbeiten
Else

    Zeile = Range("Tabelle1[Kunden-ID]").Find(What:=tb_Eingabeformular.Range("H12").Value _
    , LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row

End If

Der Fehler scheint im Bezug Range("Tabelle1[Kunden-ID]") zu liegen. Die Syntax hab' ich mehrmals überprüft - ist identisch.
Das einzige, was ich geändert habe, ist der Name der Datei - intern habe ich alle ursprünglichen Bezeichnungen übernommen.

Ich hoffe, die Frage ist nicht zu aufwändig.

.xlsm   Schuelerverwaltung.xlsm (Größe: 111,3 KB / Downloads: 8)
Antworten Top
#2
Hallo,

versuche es mal so: Zeile = tb_Datenbank.Range("B:B").Find(What:=tb_Eingabeformular.Range("H12").Value _
    , LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row       
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • setembrini
Antworten Top
#3
Hi,

oder ersetz deinen ...Find-Code durch diesen hier:
Code:
    With tbl.ListColumns("ID").DataBodyRange
        Zeile = .Cells.Find(What:=tb_Eingabeformular.Range("H12").Value, LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row
    End With
...meine Idee ist nur ein weiterer Weg zu deinem Ziel.

Hilfts?

Ciao
Thorsten
[-] Folgende(r) 1 Nutzer sagt Danke an Oberschlumpf für diesen Beitrag:
  • setembrini
Antworten Top
#4
Erst einmal, Dank an euch beide.
Beide Varianten funktionieren - hilft mir sehr!
Diese Versionen sind für mich auch schlüssiger, weil "tb_Datenbank" direkt angesprochen wird.
Ich werd' mich jetzt nicht damit aufhalten, trotzdem bleibt für mich noch immer die Frage, warum "Tabelle1" bei Kai Weissman funktioniert und bei mir nicht.
Die Datenbank ist das erste Tabellenblatt - kann es sein, dass in einer Vorgängerversion von Excel dieses Tabellenblatt intern als "Tabelle1" bezeichnet wird?
Die Antwort ist jetzt nicht so wichtig - würde mir nur helfen, es zu verstehen.
Antworten Top
#5
Hallo,

wie heißt das Blatt denn in der Originalversion? Persönlich finde ich es ohnehin grenzwertig, den Codenamen der Tabellenblätter zu verändern.

Hallo,

wie ich vermute, ist das Original die Kundenverwaltung von Kai Wesemann. Dort ist das so eingetragen: Range("Tabelle1[Kunden-ID]"). Die Spalte mit den Kundennummern hat die Überschrift Kunden-ID bei dir ist das aber nur ID. Tabelle1 bezieht sich in dem Fall nicht auf das Tabellenblatt, sondern auf die Intelligente Tabelle auf dem Tabellenblatt tb_Datenbank. Das ist ein Unterschied.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • setembrini
Antworten Top
#6
Danke für deine weiteren Erläuterungen.
Ich bin ein blutiger Anfänger, deswegen wollte ich die Schritte im Anleitungsvideo Schritt für Schritt nachvollziehen, um etwas zu lernen.
Ein wichtiger Hinweis von dir ist, dass ich 'Id' statt 'Kunden-ID' als Spaltenüberschrift eingetragen habe - das werde ich sofort wieder ändern. (Dann funktioniert sehr wahrscheinlich auch der Code von Kai Weissmann bei mir.)
Die Namen der Tabellenblätter hab' ich nicht geändert.
Ich wollte programintern nichts ändern. Kunde bleibt Kunde etc. Nur die Bezeichnung der Eingabefelder wollte ich für die zukünftigen Nutzer ändern - also Kunde nach Schüler - das Eingabefeld hat dabei weiter die Referenz Kunde.
Außerdem hab' ich in der Tabelle noch zusätzliche Spalten für Telefonnummern eingefügt, da die Lehrer oft mehrere "Notfallnummern" haben.
Und den Namen der Datei hab' ich in Schülerverwaltung geändert, was, glaube ich programtechnisch keine Auswirkungen hat.
Ich denke, ich muss mich als allererstes mal schlau machen, was eine intelligente Tabelle ist.

Eine Frage hab' ich aber noch. Ich wollte aufbauend auf der Schüler(Kunden)datenbank evtl. noch weitere Datenbanken anlegen (z.B. Fehlstunden inkl. Auswertung).
Ist es vor diesem Hintergrund sinnvoller, mit der Referenz 'Tabelle1' oder mit der Referenz 'tb_Datenbank' weiterzuarbeiten.

Vielen Dank für deine Bemühungen und hilfreichen Hinweise.
Antworten Top
#7
Aber..., warum ein Formular wenn man dafür auch die Tabelle benützen kann ???
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#8
Hallo,
wenn ich das für mich selbst machen würde, würde eine Tabelle natürlich reichen.
Aber ich mach' das für Endnutzer (Lehrer), die sich kaum mit Excel beschäftigt haben.
Im Grunde genommen soll das Ganze im Endeffekt aussehren wie eine eigenständige Anwendung (ohne Excel Menüs etc.)
Der Endnutzer soll gar nicht direkt in der Tabelle arbeiten und sie eigentlich gar nicht zu Gesicht bekommen (also es soll keine Notwendigkeit bestehen sich innerhalb der Datenbank zu bewegen).
Alles soll über Masken geschehen: Datensätze anlegen, Datensätze ändern, Datensätze abfragen.

Es geht mir darum, dass ich VBA lerne, indem ich ein tatsächlich nützliches Projekt starte - bei einem 'fiktiven' Projekt verliert man schnell die Lust.

Hallo,
ich noch mal.
Ich hab' jetzt meinen Fehler gefunden.
Unter 'Tabellenentwurf' hatte meine Tabelle den Namen 'Tabelle3' und nicht 'Tabelle1', nachdem ich den Namen geändert hatte, funktioniert der Code von Kai Weissmann.
U.U. hab' ich beim Erstellen der Datenbank mehrere Anläufe gemacht und Excel hat hochgezählt - oder was auch immer.
Auf alle Fälle (natürlich) mein Fehler.
Antworten Top
#9
Zum lernen, schau mal:

https://www.snb-vba.eu/VBA_Userform_in_database_en.html
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


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