Avatar billede h_s Forsker
14. januar 2006 - 17:24 Der er 3 kommentarer og
1 løsning

Makro - fejl i summeringen

Jeg har en formular, hvor jeg har nogle felter, som lægges sammen i et 3. felt.

Formatet har jeg valgt til at være: #.##0,00 i alle 3 felter.

Følgende værdier står i felterne:

Felt 1: 12.000,00
Felt 2: 1,00

I felt 3 bør der så stå 12.001,00, men der står 13,00.
Makroen der beregner dette er:
'Beregner ny saldo hvis bevægelse er <> "" og sætter "Kr." ind 2 steder
'Det gentages for hver række i tabellen
If ActiveDocument.FormFields("Bevaegelse2").Result <> "" Then
      ActiveDocument.FormFields("Saldo2").Result _
      = Val(ActiveDocument.FormFields("Bevaegelse2").Result) _
      + Val(ActiveDocument.FormFields("Saldo1").Result)
      ActiveDocument.FormFields("Bkr2").Result = "kr."
      ActiveDocument.FormFields("Skr2").Result = "kr."
Else
      ActiveDocument.FormFields("Saldo2").Result = ""
      ActiveDocument.FormFields("Bkr2").Result = ""
      ActiveDocument.FormFields("Skr2").Result = ""
End If
End Sub

Fejlen kan vel rettes ved at sætte noget format ind i formlerne..??

.. Men hvordan?
Avatar billede rvm Nybegynder
14. januar 2006 - 19:02 #1
Det er formateringen der driller funktionen Val.

Her er en ændret kdoe, der tager højde for det:

Dim strBevaegelse2 As String
Dim strSaldo2 As String

If ActiveDocument.FormFields("Bevaegelse2").Result <> "" Then
    If ActiveDocument.FormFields("Bevaegelse2").Result = "" Then
        strBevaegelse2 = 0
    Else
        strBevaegelse2 = CDbl(ActiveDocument.FormFields("Bevaegelse2").Result)
    End If
   
    If ActiveDocument.FormFields("Saldo1").Result = "" Then
        strSaldo2 = 0
    Else
        strSaldo2 = CDbl(ActiveDocument.FormFields("Saldo1").Result)
    End If

    ActiveDocument.FormFields("Saldo2").Result = strBevaegelse2 + strSaldo2

    ActiveDocument.FormFields("Bkr2").Result = "kr."
    ActiveDocument.FormFields("Skr2").Result = "kr."
Else
    ActiveDocument.FormFields("Saldo2").Result = ""
    ActiveDocument.FormFields("Bkr2").Result = ""
    ActiveDocument.FormFields("Skr2").Result = ""
End If
Avatar billede rvm Nybegynder
14. januar 2006 - 19:12 #2
eller mere korrekt med den rigtige variabelnavngivning:

Dim dblBevaegelse2 As Double
Dim dblSaldo2 As Double

If ActiveDocument.FormFields("Bevaegelse2").Result <> "" Then
    If ActiveDocument.FormFields("Bevaegelse2").Result = "" Then
        dblBevaegelse2 = 0
    Else
        dblBevaegelse2 = CDbl(ActiveDocument.FormFields("Bevaegelse2").Result)
    End If
   
    If ActiveDocument.FormFields("Saldo1").Result = "" Then
        dblSaldo2 = 0
    Else
        dblSaldo2 = CDbl(ActiveDocument.FormFields("Saldo1").Result)
    End If

    ActiveDocument.FormFields("Saldo2").Result = dblBevaegelse2 + dblSaldo2

    ActiveDocument.FormFields("Bkr2").Result = "kr."
    ActiveDocument.FormFields("Skr2").Result = "kr."
Else
    ActiveDocument.FormFields("Saldo2").Result = ""
    ActiveDocument.FormFields("Bkr2").Result = ""
    ActiveDocument.FormFields("Skr2").Result = ""
End If
Avatar billede h_s Forsker
15. januar 2006 - 11:45 #3
Super rvm - Det virker, men hvad er det der sker i den sidste makro du har lavet?
Hvad gør CDlb() og hvad betyder det at sætte dbl foran navnet på teksfeltet?
Blot for at kunne gennemskue hvad jeg selv sætter ind i en makro!
Avatar billede rvm Nybegynder
15. januar 2006 - 19:19 #4
CDlb() konverterer indholdet i en variabel til tal-typen double - læs om typerne i hjælpen.
Jeg navngiver variablene med type foran for at man senere i makroen kan se hvilken type varieblen er dimensioneret som (dblSaldo2) - altså en slags service til mig selv :-) - f.eks. str = string, dbl = double
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
Kategori
Tag et kursus i Word og øg effektiviteten

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