Hallo hab da ein Problem und hoffe hier kann mir jemand helfen
hab ein paar werte die ich miteinander in einer abfrage mittels vba code verrechne.
ungefähr:
anzahl = 1
rechnung:
a= b*c/anzahl
if a größer 100 then
anzahl= anzahl+1
end if
jetzt soll wenn die anzahl bei einem kunden 2 oder höher ist ein neuer datensatz mit den gleichen werten angelegt werden nur der name soll ergänzt werden
hab mir das ungefähr so vorgestellt.
Public Function name(anzahl, KundenName)
If anzahl > 1 Then
Do Until anzahl = 1
datensatz kopieren
name = KundenName & "_" & anzahl
anzahl = anzahl - 1
Loop
Else
name = KundenName
End If
End Function
also das dann die daten so sind
Kunde a b c 1
Kunde_2 a b c 2
programmiere mit access 03
gibt es da irgend eine lösung?
vielen dank schonmal :)
Hallo,
irgendwie versteh ich das Vorhaben nicht.
Kannst Du nicht einfach in einem Feld eine Menge erfassen?
Wieso muss der Datensatz so oft kopiert werden? Du erzeugst doch jede Menge redundante Daten.
also es geht mir um ein programm zur Kabelberechnung.
wenn ich bei einem Verbraucher einen Kabelquerschnitt von über 300mm² brauche muß ich 2 Kabel legen weil es so dicke Kabel nich gibt.
deswegen muß ich in meiner Kabelliste den Datensatz auch 2mal drin haben.
hoffe es ist jetzt verständlicher warum ich das so brauche.
Hallo,
versteh ich trotzdem nicht.
Du kannst doch in einem Feld in einer Abfrage die Menge berechnen:
ErforderlicheMenge: [Menge]*(ErrechneterQuerschnitt\301+1)
Wozu dann 2 Datensätze mit dem Kunden?
Zur Beachtung:
Der Teiloperator vor 301 ist der Rückstrich (Backslash) für ganzzahliges teilen.
schon klar das ich einfach schreiben könnte 2mal das kabel das wär ja einfach
auf der baustelle müssen dann aber 2 kabel verlegt werden und jedes muß eine eigene kennnummer besitzen.
deshalb brauch ich das kabel 2 mal in der kabelliste mit 2 kennummern
kabelkennnummer von nach länge usw.
nochmal anschaulicher. ich habe jetzt eine tabelle
kabelnummer von nach länge anzahl querschnitt
K1 S1 V1 20 1 4,5
K2 S2 V2 30 2 4,5
und jetzt soll daraus werden
K1 S1 V2 20 1 4,5
K2_1 S2 V2 30 1 4,5
K2_2 S2 V2 30 1 4,5
Hallo,
das Problem solltest Du mit einer weiteren Tabelle lösen in der die Kabellänge und die Kennnummer gespeichert wird. Mit einem Bezug zum Kabel. Im Kabel einen Bezug zum Kunden und Du musst gar nicht programmieren.
da müsste ich doch aber trotzdem alles per hand eingeben oder versteh ich das falsch?
möchte nämlich nicht bei 1000 kabeln kontrollieren ob sie doppelt sein müssen und dann die daten neu eingeben.
Hallo,
Zitatda müsste ich doch aber trotzdem alles per hand eingeben oder versteh ich das falsch?
Ja, das verstehst Du falsch. Du musst nur die Kennnummer eingeben und das musst Du auch bei deiner Version. Alles andere wird über die Beziehungen automatisch geregelt. Ohne etwas programmieren zu müssen.
Die Eingabe machst Du mit einen Hauptformular für das Kabel an sich (Kabelnummer, Kunde, Länge, Querschnitt usw.)
und einem Unterformular (verknüpft) in das Du einfach die Kennnummern der Kabel schreibst. Im Hafo ermittelst Du noch mit obiger Formel die Anzahl der Kabel und sorgst per VBA dafür dass dass die entsprechen Menge Kennnummern erfasst werden.
hallo
hab das jetzt über ein formular und folgenden vba code gelöst
'------------------------------------------------------------
' Kopieren
'
'------------------------------------------------------------
Function Kopieren()
On Error GoTo ende
Dim x As Double
Dim y As Double
y = 1
DoCmd.OpenForm "Kabellisteneu", acNormal, "", "", , acNormal
anfang:
x = Forms.kabellisteneu.Kabelanzahl
Forms.kabellisteneu.Kabelanzahl = 1
If x > 1 Then
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
Do Until x = 1
DoCmd.RunCommand acCmdRecordsGoToNew
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
If x > 99 Then
Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 2) & x
ElseIf x > 9 Then
Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 3) & x
Else
Forms.kabellisteneu.Kabel_Kurzzeichen = Left(Forms.kabellisteneu.Kabel_Kurzzeichen, 4) & x
End If
x = x - 1
Forms.kabellisteneu.Kabelanzahl = 1
Loop
End If
y = y + 1
DoCmd.GoToRecord acDataForm, "Kabellisteneu", acGoTo, y
GoTo anfang
ende:
DoCmd.Close acForm, "Kabellisteneu"
End Function
trotzdem vielen dank
Hallo,
das ist zwar eine Lösung, aber keine gute. Du erzeugst redundante Daten, die man in einer DB vermeiden sollte. Das ist ja geradezu der Grund für eine DB, keine Redundanzen zu erzeugen..
Mit der 2.Tabelle könntest Du das Vorhaben elegant und datentechnisch richtig ohne eine einzige Zeile VBA umsetzen. Ohne mehr manuell schreiben zu müssen als jetzt auch.