Dlookup werkt niet VBA

Status
Niet open voor verdere reacties.

steefjuh

Gebruiker
Lid geworden
6 sep 2007
Berichten
31
Hallo allemaal,

Ik probeer automatisch een nieuw record aan te maken. Het is mijn bedoeling om het veld ProjectID in te vullen met de ID nummer van een project. Het project nummer moet dan hetzelde project nummer zijn van de laatst aangemaakte record in splitupexport.

Het veld "splitupID" moet ditzelfde laatst aangemaakte record zijn

en het veld "splituptype" moet detzelfde tekst zijn als "Pricetype" in het tabel Splitupexport van de laatst aangemaakte record in splitupexport.


Hopelijk is dit niet te ingewikkeld.


De tabellen zijn:

"Projects"
"Splituptype"
"Splitupexport"

en dit moet allemaal in het tabel "Project_splitup"

Code:
Private Sub Command1585_Click()
Dim Project_splitup As DAO.Recordset

Set Project_splitup = CurrentDb.OpenRecordset("Project_splitup")
Project_splitup.AddNew

Project_splitup![ProjectID] = DLookup("ID", "Projects", "[Splituptype![ProjectnumberinPricesplitup]] = " & [Projects![ProjectNumber]] & " AND [Splitupexport![Id]] = " & DMax("ID", "Splitupexport") & "")
Project_splitup![SplitupID] = DMax("ID", "Splitupexport")
Project_splitup![Splituptype] = DLookup("ID", "Splituptype", "[Splituptype![Splituptype]]] = " & [Splitupexport![Pricetype]] & " AND [Splitupexport![Id]] = " & DMax("ID", "Splitupexport") & "")
Project_splitup.Update
Project_splitup.Close
Set Project_splitup = Nothing
DoCmd.Close
End Sub

Nu werkt het niet en ik begrijp helaas niet waarom. Ik heb niet veel kennis van VBA maar ik zou het enorm waarderen als iemand mij hierbij kan helpen.

gr. steven
 
Ik vind het nogal ingewikkeld; moet veel simpeler kunnen. Om te beginnen de vraag: vanaf welk formulier/tabel start je deze actie?
 
Ik start via een knop in het formulier "Price Split-up Details" met record source "Project_splitup"
 

Bijlagen

  • ProjectenDatabase.zip
    1,7 MB · Weergaven: 21
Ik snap het niet helemaal; je formulier is gebaseerd op de tabel [Project_splitup]. De knop <New connection> (daar gaat het om, neem ik aan?) bevat de code die je hierboven hebt staan. Met die knop open je de tabel die al open is, want je formulier draait er op. Vervolgens gebruik je allerlei DLookUp formules om data op te halen uit dezelfde tabel. Dat is dus nogal omslachtig. De velden [SplitupID], [ProjectID] en [Splituptype] staan namelijk gewoon, met waarden en al, op je formulier.
Maar als ik bijvoorbeeld naar de keuzelijst voor SplitupID kijk, dan zie ik daar een enorme hoeveelheid dubbele records staan:
Code:
ID	ProjectnumberinPricesplitup	PriceSplitupdate	Pricetype	Supplier
12	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
13	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
14	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
15	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
16	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
17	12345	25-12-2019	Sales Estimate V1	FERROS
18	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
19	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
20	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
21	12345	25-12-2019	Sales Estimate V1	VANDERLANDE
Om maar een voorbeeldje te laten zien. Daar zitten slechts twee verschillende leveranciers in, de rest is identiek (op het ID na uiteraard). Voor een keuzelijst is dit onwerkbaar. Lijkt mij. Maar dat staat an sich los van je vraag. Maar je initiële vraag is mij ook niet helemaal duidelijk.

Het project nummer moet dan hetzelde project nummer zijn van de laatst aangemaakte record in splitupexport. Het veld "splitupID" moet ditzelfde laatst aangemaakte record zijn en het veld "splituptype" moet detzelfde tekst zijn als "Pricetype" in het tabel Splitupexport van de laatst aangemaakte record in splitupexport.

Blijkbaar wil je de laatst ingevoerde waarden gebruiken als input voor een nieuw record. Dat kan heel simpel, door de waarden die je kiest bij het aanmaken van een nieuw record vast te zetten als DefaultValue voor dat nieuwe record. Dus iets als:
Code:
Private Sub Form_BeforeUpdate(Cancel As Integer)
    Me.cboProjectID.DefaultValue = Me.cboProjectID
    Me.cboSplitupID.DefaultValue = Me.cboSplitupID
    Me.cboSplituptype.DefaultValue = Me.cboSplituptype
    If MsgBox("Data has been changed." & vbLf & "Save this record?", vbYesNo, "") = vbNo Then DoCmd.RunCommand acCmdUndo
End Sub
 
Hoi Octafish,

Allereerst bedankt voor je hulp zover! De velden [SplitupID], [ProjectID] en [Splituptype] staan inderdaad op het formulier. Deze vul ik nu handmatig in met een new record. Maar ik zou dit graag willen automatiseren. De knop new connection gaat waarschijnlijk weg en de vba wil ik achter de vba code van de import knop plakken. Ik ben nog steeds bezig met een concept van access en er zullen meer waarden komen.

FYI, deze database is bedoeld om prijzen en kilogrammen staal die we inschatten voor stalen platformen in een database bij te houden en dalijk met elkaar te vergelijken. Met de import knop importeer ik de prijzen in het tabel splitupexport, deze wil ik middels een relatie aan een project koppelen en aan een type prijs (sales budget, laatste inschatting (LE) en RFQ (prijs van leveranciers)). Middels de tabel Project_splitup maak ik een many to many relatie met andere tabellen. Vandaar dat deze ook vrij ingewikkeld is en lukt dit volgens mij niet met een defaultvalue.



Voor [ProjectID] moet ik het ID nummer hebben uit het tabel projecten. Dit moet het record ID nummer zijn van het project met hetzelfde projectnummer heeft als het projectnummer in het laatst ingevoerde record in het tabel "splitupexport".

Als ik een nieuw record aanmaak in het tabel [Project_splitup] moet ik voor het veld [ProjectID] een het ID nummer van een project hebben:

1. Dus als het laatst geimporteerde (ik importeer de record uit excel) record in het tabel [splitupexport] in het veld [ProjectnumberinPricesplitup] de waarde "12345" heeft staan en in het tabel [projects] het project nummer (van bijv. Praag[ProjectNumber] de waarde: "12345" heeft, moet in het tabel [Project_splitup] in het nieuwe record veld [ProjectID] de waarde "1" krijgen.

2. Voor het veld [SplitupID] in het tabel [Project_splitup], hoef ik alleen het de waarde van veld [ID] te hebben van de laatst geimporteerde record van tabel [splitupexport].

3. En als het laatst geimporteerde record in het tabel [splitupexport] in het veld [Pricetype] de waarde "Sales Estimate V3" heeft staan en in het tabel [Split-up-type] het veld [Split-up-type] de waarde: "Sales Estimate v3" heeft, moet in het tabel [Project_splitup] in het nieuwe record veld [splitupID] de waarde "3" krijgen.

Daarom dacht ik aan een lookup functie maar mischien werkt het beter en eenvoudiger op een andere vba code.
 
Heb je mijn oplossing al uitgeprobeerd? Ik lees namelijk niets in je laatste bericht dat mijn oplossing in de weg zou staan. Opmerkingen als: "Vandaar dat deze ook vrij ingewikkeld is en lukt dit volgens mij niet met een defaultvalue." wekken de indruk dat je het niet geprobeerd hebt. Dat lijkt mij toch het minste dat je kunt doen :).

Verder snap ik je proces niet helemaal; als je een project opent vanuit de Project List kom je in een project formulier met tabbladen. Het tabblad Sales is m.i. gebaseerd op een niet-genormaliseerde tabel, want die bevat geen subformulier met daarin werkelijke records, maar 15 voorgedefinieerde rijen. Lijkt mij een hele onwenselijke situatie. Op dat tabblad staat dus de knop <Import new price split-up> waar je het over hebt, en die opent dan het formulier Price split-up. Dit formulier zou dus al de Project code moeten bevatten (wat makkelijk kan vanuit de knop <Import new price split-up>). Maar wat je daar verder mee doet? Je hebt dus die twee knoppen Import (Excel bestand?) en <New connection>. Maar het proces stopt daar dus wat mij betreft.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan