Avatar billede faroe Nybegynder
01. august 2001 - 16:12 Der er 6 kommentarer og
2 løsninger

at få et tal til tekst

er der nogen som har et modul eller ved vårdan man gør dette, vis man skriver 4000,47 kr, so skal dette skrivest som tekst (  Firetusen kroner 47/100  )
01. august 2001 - 23:22 #1
Ikke helt, men jeg har en anden, som omskriver det til formatet:
fire*nul*nul*nul*47/100

Dette er fuldt lovligt til checks (hvis det er det, du skal bruge det til!?

Public Function CheckBeløb(Beløb as String) As String
    Dim n As Integer
    CheckBeløb = \"*\"
    For n = 1 To Len(Beløb)
        Select Case Mid(Beløb, n, 1)
            Case \"0\": CheckBeløb = CheckBeløb & \"nul\"
            Case \"1\": CheckBeløb = CheckBeløb & \"et\"
            Case \"2\": CheckBeløb = CheckBeløb & \"to\"
            Case \"3\": CheckBeløb = CheckBeløb & \"tre\"
            Case \"4\": CheckBeløb = CheckBeløb & \"fire\"
            Case \"5\": CheckBeløb = CheckBeløb & \"fem\"
            Case \"6\": CheckBeløb = CheckBeløb & \"seks\"
            Case \"7\": CheckBeløb = CheckBeløb & \"syv\"
            Case \"8\": CheckBeløb = CheckBeløb & \"otte\"
            Case \"9\": CheckBeløb = CheckBeløb & \"ni\"
            Case \",\"
                CheckBeløb = CheckBeløb & Mid(Beløb, InStr(1, Beløb, \",\") + 1, 2) & \"/100\"
                Exit For
            Case \".\": CheckBeløb = Left(CheckBeløb, Len(CheckBeløb) - 1)
        End Select
        CheckBeløb = CheckBeløb & \"*\"
    Next n
       
End Function


Vær blot opmærksom på. at du skal levere beløbet som tekst! Anvend evt CStr() til at konvertere dit beløb til tekst.

Eks:
msgbox CheckBeløb(cstr(4000,47))

Håber, at det kan bruges.
/Thomas
Avatar billede nih Novice
02. august 2001 - 11:40 #2
Jeg har en på engelsk:

Function dhNumToStr(ByVal varValue As Variant) As String
   
   
    On Error GoTo HandleErrors
   
    Dim intTemp As Integer
    Dim varNames As Variant
    Dim lngDollars As Long
    Dim intCents As Integer
    Dim strOut As String
    Dim strTemp As String
    Dim intI As Integer
   
    If Not IsNumeric(varValue) Then Exit Function
   
    \' 999,999,999.99 is the largest possible value.
    If varValue > 999999999.99 Then Exit Function
    varNames = Array(\"\", \"Thousand\", \"Million\")
   
    varValue = Abs(varValue)
    lngDollars = Int(varValue)
    intCents = (varValue - lngDollars) * 100

    If lngDollars > 0 Then
        \' Loop through each set of three digits,
        \' first the hundreds, then thousands, and then
        \' millions.
        Do
            intTemp = lngDollars Mod 1000
            lngDollars = Int(lngDollars / 1000)
            \' Prepend spelling of new triplet of digits to the
            \' existing output.
            If intTemp <> 0 Then
                strOut = dhHandleGroup(intTemp) & \" \" & _
                varNames(intI) & \" \" & strOut
            End If
            intI = intI + 1
        Loop While lngDollars > 0
        \' Handle the cents.
        strOut = RTrim(strOut) & \" and \" & _
        Format$(intCents, \"00\") & \"/100\"
    End If
   
ExitHere:
    dhNumToStr = strOut
    Exit Function

HandleErrors:
    \' Handle all errors by returning an empty string
    strOut = \"\"
    Resume ExitHere
End Function

Den er taget fra bogen: VBA develpers handbook.
Med lidt arbejde skulle den nok kunne oversættes til dansk ;)

Niels
Avatar billede nih Novice
02. august 2001 - 11:52 #3
Det gik vist lidt hurtigt

Der mangler en function:

Private Function dhHandleGroup(ByVal intValue As Integer) As String
   
    \' Called by dhNumToStr
    Static varOnes As Variant
    Static varTens As Variant
    Dim strOut As String
    Dim intDigit As Integer
   
    If IsEmpty(varOnes) Then
        varOnes = Array(\"\", \"One\", \"Two\", \"Three\", \"Four\", \"Five\", _
        \"Six\", \"Seven\", \"Eight\", \"Nine\", \"Ten\", _
        \"Eleven\", \"Twelve\", \"Thirteen\", \"Fourteen\", \"Fifteen\", _
        \"Sixteen\", \"Seventeen\", \"Eighteen\", \"Nineteen\", \"Twenty\")
    End If
    If IsEmpty(varTens) Then
        \' Elements 0 and 1 in this array aren\'t used.
        varTens = Array(\"\", \"\", \"Twenty\", \"Thirty\", \"Forty\", _
        \"Fifty\", \"Sixty\", \"Seventy\", \"Eighty\", \"Ninety\")
    End If
   
    \' Get the hundreds digit, and then the rest.
    intDigit = intValue \\ 100
    intValue = intValue Mod 100
   
    \' If there\'s a hundreds digit, add that now.
    If intDigit > 0 Then strOut = varOnes(intDigit) & \" Hundred\"
           
    \' Handle the tens and ones digits.
    Select Case intValue
        Case 1 To 20
            strOut = strOut & varOnes(intValue)
        Case 21 To 99
            intDigit = intValue \\ 10
            intValue = intValue Mod 10
            If intDigit > 0 Then
                strOut = strOut & \" \" & varTens(intDigit)
            End If
            If intValue > 0 Then
                strOut = strOut & \"-\" & varOnes(intValue)
            End If
    End Select

    dhHandleGroup = strOut
End Function

Niels
Avatar billede faroe Nybegynder
02. august 2001 - 12:46 #4
Tusen tak får hjelpen
Avatar billede nih Novice
02. august 2001 - 19:57 #5
>>> Thomas - Hvis du er med endnu

Hvordan bruger du kommatal til dine funktionskald ??

Jeg har altid problemmer med at konvertere eks. 4000,45 til 4000.45. Både SQL strenge og også i de 2 ovennævnte funktioner, virker kun med \'.\'  -Jeg kan godt oprette et nyt spørgsmål med point i.

Niels
Avatar billede fogh Nybegynder
30. januar 2006 - 17:05 #6
Hej Thomas og Niels!

Når jeg forsøger at anvende jeres funktioner i dag (30-01-2006) virker de ikke.
Muligvis fordi jeg er en skovl til at kode, muligvis fordi der er noget versions fnidder med VBA?? - Det meste af funktionerne står med "rødt" i editoren??

Har I noget bud? - Jeg opretter gerne et nyt spørgsmål, for jeg skal nemlig bruge en funktion der kan oversætte tal til "check tekst" og allerhelst den "fulde version".
(hvor 1.621,37 bliver til "ettusindesekshundredetotien 37/100" )

Skal jeg oprette et nyt spørgsmål?

på forhånd tak Thomas
31. januar 2006 - 08:25 #7
Hej Fogh,

Det skyldes formentlig, at Eksperten har indsat en masse \ i koden.
Det er ofte sket i gamle indlæg :(

Hvis du fjerner alle \, så skulle det gerne virke :o)
Avatar billede fogh Nybegynder
01. februar 2006 - 01:31 #8
Det virker ikke helt alligevel...
Jeg har oprettet spørgsmål http://www.eksperten.dk/spm/684070
mvh Thomas
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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