Hallo,
ich hab ein kleines Problem.
Ich möchte eine Zahl aus Access in ein Wordformular übertragen. Diese Zahl muss aber als Text wiederholt werden .. also 20 = Zwanzig .. 133 = Einhunderdreiunddreißig.
Bislang habe ich das Ganze über einen Bericht ausgegeben, aber ich möchte es umstellen, da der Bericht häufiger auf Änderungenangepasst werden muss und dies in Word leichter geht. Bisher hatte ich hierfür eine Funktion eingerichtet .. diese funktioniert aber nicht bei der Übergabe zu Word.
Function ZahlzuText(Number)
Number = Abs(Fix(Number)) 'Vergesse Nachkommastellen
If Number = 0 Then ZahlzuText = "Null": Exit Function
Dim Chr(12) As String, Block As Integer, z As Integer, hz As Integer, ze As Integer, zz As Integer, EZ As Integer
Dim ztext As String, t As String, Bst1 As String, Wortrest As String, WLänge As Variant
Chr(0) = "": Chr(1) = "ein": Chr(2) = "zwei": Chr(3) = "drei"
Chr(4) = "vier": Chr(5) = "fünf": Chr(6) = "sechs": Chr(7) = "sieben"
Chr(8) = "acht": Chr(9) = "neun": Chr(10) = "zehn": Chr(11) = "elf"
Chr(12) = "zwölf"
For Block = 3 To 1 Step -1 'Millionen,Tausender,Hunderter-Block
'extrahiere Hunderter-Blöcke in z:
z = (Number Mod (10 ^ (Block * 3))) \ 10 ^ ((Block - 1) * 3)
If z > 0 Then 'Blockwert >0
'bestimme HunderterZiffer in HZ, ZehnerZiffer in ZZ
'ZehnerundEinerZahl in ZE und die EinerZiffer in EZ:
hz = z \ 100: ze = z Mod 100: zz = ze \ 10: EZ = z Mod 10
ztext$ = "" 'der Zahltext für einen Hunderter-Block
If hz > 0 Then 'Es gibt Hunderter
ztext$ = Chr(hz) & "hundert"
If ze > 0 And ze < 10 Then ztext$ = ztext$ & "und" 'z.B 303
End If
'die Hunderter sind gesetzt. Setzte nun Zehner und Einer:
If ze > 0 Then 'Falls es überhaupt Zehner/Einer gibt
If ze < 13 Then 'Zehner/Einer<13
If Block = 1 And Number > 999 And z < 10 Then 'Hunderter-Block
ztext$ = ztext$ & "und" 'xxx.00v zu "und" v
End If
ztext$ = ztext$ & Chr(ze)
Else 'Zehner/Einer = 13-99
If EZ > 0 Then 'zunächst die Einer
If EZ = 7 And zz = 1 Then
ztext$ = ztext$ & "sieb" 'Siebzehn statt siebenzehn
Else
ztext$ = ztext$ & Chr(EZ)
End If
If zz > 1 Then ztext$ = ztext$ & "und" 'z.B. drei "und" zwanzig
End If
If zz = 1 Then
ztext$ = ztext$ + "zehn"
ElseIf zz = 2 Then
ztext$ = ztext$ + "zwanzig"
ElseIf zz = 3 Then
ztext$ = ztext$ + "dreißig"
ElseIf zz = 6 Then
ztext$ = ztext$ + "sechzig"
ElseIf zz = 7 Then
ztext$ = ztext$ + "siebzig"
Else
ztext$ = ztext$ & Chr(zz) & "zig"
End If
End If
End If
t$ = ""
If Block = 3 Then
t$ = "Millionen"
If Right(ztext$, 3) = "ein" Then ztext$ = ztext$ + "e": t$ = "million"
ElseIf Block = 2 Then
If Right(ztext$, 3) = "ein" And z <> 1 Then ztext$ = ztext$ + "s"
t$ = "tausend"
ElseIf Block = 1 Then
If Right(ztext$, 3) = "ein" Then ztext$ = ztext$ + "s"
End If
ZahlzuText = ZahlzuText & ztext$ & t$
Bst1 = Left(ZahlzuText, 1)
Bst1 = UCase(Bst1)
WLänge = Len(ZahlzuText)
WLänge = WLänge - 1
Wortrest = (Right(ZahlzuText, WLänge))
ZahlzuText = Bst1 + Wortrest
End If
Next
End Function
Hallo,
Kommando zurück .. ich hab das Problem gefunden.
Hallo,
was auch immer die Lösung deines wie auch immer gearteten Problems sein mag, CHR() ist eine Access-Funktion und sollte nicht für eigene Deklarationen verwendet werden.