Avatar billede bbkdk Seniormester
25. marts 2023 - 10:04 Der er 3 kommentarer og
1 løsning

Opret variabler

Jeg har lavet talrige databaser, men et problem har jeg aldrig fået løst.
Nemlig oprettelse af variabler (midlertidige variabler).

Spørgsmålet kan konkretiseres således:

Jeg har en database med et bogførings program. Det virker ret professionelt, men der mangler en ting, nemlig muligheden for at ændre de faste konti til moms (indgående og udgående), samt kasse og bank, uden at skulle gå ind i VBA-koden.

Disse faste konti er angivet i VBA, som vist nedenstående, Men hvis en anden (ikke så erfaring bruger), skal anvende bogføringsprogrammet, er det jo ikke sikkert, at han vil anvende den samme kontoplan.

Uddrag af VBA koden:

Private Sub Kommandoknap28_Click()

If Momskode = 1 Then

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "FrmKassekladde", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.Beløb = -Beløb * 0.2
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToRecord , , acPrevious
Me.Kontonummer = Kontonummer
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "FrmKassekladde", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.Beløb = Beløb * 5
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToRecord , , acPrevious
Me.Kontonummer = 2120
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.GoToRecord acForm, "FrmKassekladde", acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.Beløb = -Beløb * 0.2
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToRecord , , acPrevious
Me.Kontonummer = 2130

DoCmd.GoToRecord , , acNext

"Me.Kontonummer = 2120" i ovenstående kode gør, at beløbet bogføres på bankkontoen.

Men hvis bankkontoen i den aktuelle database ikke har nummer 2120, duer systemet ikke.

Er der nogen der har et bud på, hvorledes der kan oprettes en funktion, der ude fra forsiden af databasen gør det muligt at sætte de faste konti, som den aktuelle bruger ønsker. Det er formentlig funktionen (eller makroen) "Midlertidig variabel", der skal anvendes, men hvordan gøres det helt konkret?
Avatar billede Gustav Ekspert
25. marts 2023 - 10:28 #1
Gem dem i en tabel, her SystemKonti, og hent dem, når du skal bruge dem, fx:
Me!Kontonummer.Value = DLookup("MomsKontoInd", "SystemKonti")
Me!Kontonummer.Value = DLookup("MomsKontoUd", "SystemKonti")
Avatar billede bbkdk Seniormester
25. marts 2023 - 17:15 #2
Mange tak for svaret, det ser ud til at virke fint.

Når jeg skriver "ser ud til" er det fordi, jeg er begyndt at få en fejl, når jeg anvender programmet. Jeg skal skynde mig at tilføje, at den var der før jeg indsatte din løsning. Og den er kommet "ud af det blå". Jeg har på intet tidspunkt været ude og pille i VBA, før den dukkede op.

Jeg har aldrig mødt fejlen før, men nu forhindrer den programmet i at fungere optimalt.

Når jeg klikker på knappen "Bank", eller "Kasse", for at foretage en automatisk bogføring, kommer der en fejlmeddelelse:

"Bogføring kan ikke indsættes i udklipsholder, fordi udklipsholder ikke svarer".

Ved en debug er det linjen "DoCmd.RunCommand acCmdPaste", der er markeret.

Der er en bruger, der har haft et problem med at sætte ind, og som har givet en løsning på i hvert fald hans problem i denne tråd:

https://stackoverflow.com/questions/72075278/how-to-avoid-ms-access-error-the-command-or-action-paste-is-not-available-now

Men jeg kan ikke finde den knap, der slår historikken i Udklipsholder fra, som der er en, der henviser til i løsning 2.

Og jeg har forsøgt at skrive "Pause = (0.1), før indsætning, som vist i løsning 1.

Men det virker stadig ikke.
Avatar billede Gustav Ekspert
25. marts 2023 - 18:19 #3
I Windows 11 er det er nøjagtigt, som han skriver:
Indstillinger, System, Udklipsholder, Oversigt over udklipsholder.

Pause må være en brugerfunktion. Den må du søge efter - og også bruge den rigtige syntaks.
Eller prøv med DoEvents.

Alternativt med et API-kald:
' Suspends the execution of the current thread until the time-out interval elapses.
'
#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" ( _
        ByVal dwMilliseconds As Long)
#Else
    Private Declare Sub Sleep Lib "kernel32" ( _
        ByVal dwMilliseconds As Long)
#End If
Den bruger millisekunder, så det ville være:
Sleep 100
Avatar billede bbkdk Seniormester
26. marts 2023 - 00:31 #4
Det virker.

Mange tak for hjælp.

Problemet med at indsætte poster forsvandt af sig selv,

Men jeg er belært af erfaring bange for, at det kommer igen. Så vil jeg forsøge med dine forslag til at løse problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester