Hallo Gemeinde.
Ich beschäftige mich seit ein paar Tagen mit Access (Access 2016) und bin somit absoluter Neueinsteiger.
Das Problem über dem ich gerade brüte ist, wie ich beim Laden des Formulars eine Tabellenzelle auslesen kann, diesen Wert verändere (bis hier her klappt's schon) und dann diesen veränderten Wert wieder in dieselbe Tabellenzelle zurückschreibe. Und genau daran hapert's momentan.
Das Textfeld "KuNr" im Formular soll gefüllt werden mit einer Kundennummer, die in der Tabelle "tblLetzteKuNr" im Feld "Nummer" gespeichert ist.
Folgenden Code habe ich geschrieben:
Private Sub Form_Load()
Dim varX As Variant
Dim varKuNr As String
varX = DLookup("[Nummer]", "tblLetzteKuNr", "[ID] = 1")
varX = varX + 1
'---------------------------
'Hier soll varX wieder in die Tabelle zurückgeschrieben werden
'---------------------------
varKuNr = CStr(varX)
'Jetzt wird die Variable auf eine Standardlänge von 6 Zeichen gebracht, indem links mit Nullen aufgefüllt wird.
varKuNr = auffüllen(varKuNr, "links", 6, "0")
Me.KuNr = varKuNr
End Sub
Hier der Code der Funktion "auffüllen":
Function auffüllen(zellwert As String, orientierung As String, laenge As Long, fuellzeichen As String)
Dim i, j, n As Integer
Dim fuellstring As String
n = Len(zellwert)
j = laenge - n
For i = 1 To j
fuellstring = fuellstring & fuellzeichen
Next i
If orientierung = "rechts" Then
auffüllen = zellwert & fuellstring
Else
auffüllen = fuellstring & zellwert
End If
End Function
Ich habe keinen Schimmer, wie ich das anpacken soll.
Für einen kleinen Schups in die Richtige Richtung wäre ich dankbar.
VG Ralf
Hallo,
hier erhebt sich auch die Frage, wofür das gut sein soll...
Beschreibe mal das Ziel, das mit diesem Vorgehen anvisiert ist....
Hi Franz.
Der Sinn hinter dieser Übung ist, die zuletzt vergebene Kundennummer in der Tabelle zu speichern.
Im Formular will ich diese auslesen, das Formularfeld für die Kundennummer automatisch mit der um eins erhöhten Kundennummer befüllen und die neu vergebene Kundennummer wieder in der Tabelle speichern.
Sollte ich hier zu kompliziert denken, bin ich natürlich auch für eine bessere Lösung für mein Problem dankbar.
VG Ralf
Hallo,
ja, Du denkst zu kompliziert... ;) (und schwebst noch in der Excel-Welt)
Der Vorgang ist mir klar, nur welchen Geschäftsvorgang willst Du damit behandeln?
Einen neuen Kunden anlegen (d. H. eine Kundennummer für den neuen Kunden vergeben)? Das geht normalerweise wesentlich einfacher, bzw. sogar ganz automatisch und praktisch ohne Code....
Zeige mal den Screenshot des Beziehungsfensters. Wenn dort die Tabellen noch nicht hinzugefügt sind, hole das nach und erstelle anschliessend den Screenshot.
Beschreibe dann, welchen Arbeitsablauf passieren soll.
Hallo,
warum nimmst Du für die Kundennummer nicht einfach einen Autowert?
Dann kannst Du Dir den kompletten VBA Code sparen. Ein Autowert zählt automatisch hoch.
Eine Tabelle "tblLetzteKuNr" íst auch bei Deiner Version nicht notwendig, die letzte KuNr kann einfach mit DMax ermittelt werden.
Auch das Auffüllen ist nicht notwendig, das lässt sich einfach mit dem Format für das Feld erledigen.
Im Formularereignis "Beim Anzeigen":
If Me.NewRecord = True Then
Me.KuNr = Format(DMax("KuNr","Kundentabelle") + 1,"000000")
End If
Das ersetzt Deinen kompletten oben gezeigten Code.
Hallo Ralf,
Abgesehen von Klaus' und Franz' richtigen Hinweisen, ginge das in dem
du nicht per DLookup die letzte Nummer bestimmst, sondern einen
Recordset auf die Tabelle tblLetzteKuNr öffnest. Dann kannst du die
letzte Nummer per
varX = rs.Fields("Nummer")
auslesen, und per
rs.edit
rs.Fields("Nummer") = varKuNr
rs.update
zurück schreiben.
I.Ü. Warum verwendest du für eine Nummer ein Feld vom Typ Text?
Vorangestellte Nullen kannst du doch bei der Ausgabe generieren.
gruss ekkehard
Vielen Dank euch allen für eure Antworten.
Ich werde mich da mal durcharbeiten.
Sollte ich nicht weiterkommen, melde ich mich wieder.
VG Ralf