[SOLVED] kwota słownie
: śr wrz 09, 2020 10:55 pm
Od wielu lat używałam makra autorstwa Pana Jacka Szymona do zamiany na słowa kwot pieniężnych wyrażonych liczbowo. Ostatnio zainstalowałam KDE NEON w wersji 20.04 i zainstalowałam nową wersję LibreOffice. Pojawił się problem z tym makrem. Po pierwsze przy uruchomieniu twierdzi, że zmienna slownie została już zdefiniowana. Ta zmienna nie jest chyba w ogóle używana i chyba chodzi o to że jest funkcja o tej samej nazwie (nie znam BASICA). Usunęłam więc zmienną słownie.
Dalej pojawił się jednak problem z instrukcją znak = Mid(tx0,dlugosc-2,1). Komunikat: Akcja jest nieobsługiwana. Nieprawidłowe wywołanie procedury. Coś próbował przeczytać ale się poddałam. Gdyby ktoś pomógł mi z tym makrem, byłabym wdzięczna.
Dalej pojawił się jednak problem z instrukcją znak = Mid(tx0,dlugosc-2,1). Komunikat: Akcja jest nieobsługiwana. Nieprawidłowe wywołanie procedury. Coś próbował przeczytać ale się poddałam. Gdyby ktoś pomógł mi z tym makrem, byłabym wdzięczna.
Kod: Zaznacz cały
'========= ========= ========= ========= ========= ========= =========
'Autor: Jacek Szymona
'email: ***@um.lublin.pl
'data utworzenia: 17.08.2006 r.
'licencja GPL http://gnu.org.pl/text/licencja-gnu.html
'Zestaw funkcji i procedur do przekształcania liczby zapisanej cyframi
' na wyrażenie słowne w programie "Write"
'uwaga: ta wersja przekształca liczby zapisane w postaci: 12345,67
' część całkowita nie może mieć więcej niż 15 cyfr
'użycie: po wpisaniu liczby i po ustawieniu kursora na liczbie
' należy wywołać makroinstrukcję
'wynik zapisywany jest w nawiasie po zapisie cyfrowym
Public we, wy, forma As String
Sub Slownie
Dim Dokument As Object, Cyframi As Object
Dim Kursor As Object, Kursor1 As Object
Dim tx0, txd, txc, tx1, cyd2, cyd1 As String
Dim dlugosc As Integer
Dim slownie, slownie1, slowniezl, slowniegr, znak, mianogr, mianozl As
String
Dim jednostki(), nastki(), dziesiatki(), setki()
Dim i, j, k As Integer
Dokument = ThisComponent
Kursor = Dokument.currentcontroller.getViewCursor()
Cyframi = Kursor.Text
Kursor1 = Cyframi.createTextCursorByRange(Kursor.getstart())
Kursor1.gotoStartOfWord(false)
Kursor1.gotoEndOfWord(true)
'przypisanie pobranego łańcucha do zmiennej tx0
tx0 = Kursor1.String
Kursor1.goRight(0,false)
dlugosc = Len(tx0)
znak = Mid(tx0,dlugosc-2,1)
If dlugosc < 3 or znak <> "," Then
MsgBox ("Liczba musi być w formacie: 1234,56",0,"Błąd")
Stop
End If
'GoTo grosze_slownie
'GoTo grosze_cyfrowo 'miano = groszy
GoTo grosze_cyfrowo1 'miano = /100
'część dziesiętna
grosze_slownie:
we = Right(tx0,2)
Call miano
If forma = "0" Then
wy = ""
mianogr = ""
ElseIf forma = "1" Then
mianogr = "grosz"
ElseIf forma = "2" Then
mianogr = "grosze"
Else
mianogr = "groszy"
EndIf
slowniegr = wy & mianogr
GoTo zlote_slownie
grosze_cyfrowo:
we = Right(tx0,2)
cyd1 = Mid(we,1,1)
cyd2 = Mid(we,2,1)
If cyd1 = "0" and cyd2 = "0" Then
wy = "0 "
mianogr = "groszy"
ElseIf cyd1 = "0" and cyd2 = "1" Then
wy = "1 "
mianogr = "grosz"
ElseIf cyd1 = "0" and (cyd2 = "2" or cyd2 = "3" or cyd2 = "4") Then
wy = cyd2 & " "
mianogr = "grosze"
ElseIf cyd1 = "0" Then
wy = cyd2 & " "
mianogr = "groszy"
ElseIf cyd1 = "1" Then
wy = cyd1 & cyd2 & " "
mianogr = "groszy"
ElseIf cyd2 = "2" or cyd2 = "3" or cyd2 = "4" Then
wy = cyd1 & cyd2 & " "
mianogr = "grosze"
Else
wy = cyd1 & cyd2 & " "
mianogr = "groszy"
EndIf
slowniegr = wy & mianogr
GoTo zlote_slownie
grosze_cyfrowo1:
we = Right(tx0,2)
cyd1 = Mid(we,1,1)
cyd2 = Mid(we,2,1)
If cyd1 = "0" and cyd2 = "0" Then
wy = "0"
ElseIf cyd1 = "0" and cyd2 = "1" Then
wy = "1"
ElseIf cyd1 = "0" and (cyd2 = "2" or cyd2 = "3" or cyd2 = "4") Then
wy = cyd2 & ""
ElseIf cyd1 = "0" Then
wy = cyd2 & ""
ElseIf cyd1 = "1" Then
wy = cyd1 & cyd2 & ""
ElseIf cyd2 = "2" or cyd2 = "3" or cyd2 = "4" Then
wy = cyd1 & cyd2 & ""
Else
wy = cyd1 & cyd2 & ""
EndIf
slowniegr = wy & "/100"
GoTo zlote_slownie
'część całkowita
zlote_slownie:
dlugosc = dlugosc - 3
txc = Left(tx0,dlugosc)
If dlugosc > 12 Then GoTo biliony
If dlugosc > 9 Then GoTo miliardy
If dlugosc > 6 Then GoTo miliony
If dlugosc > 3 Then GoTo tysiace
GoTo setki
biliony:
we = Left(txc,dlugosc-12)
txc = Right(txc,12)
dlugosc = 12
Call miano
If forma = "0" Then
mianozl = ""
ElseIf forma = "1" Then
mianozl = "bilion "
ElseIf forma = "2" Then
mianozl = "biliony "
Else
mianozl = "bilionów "
EndIf
slowniezl = wy & mianozl
miliardy:
we = Left(txc,dlugosc-9)
txc = Right(txc,9)
dlugosc = 9
Call miano
If forma = "0" Then
mianozl = ""
ElseIf forma = "1" Then
mianozl = "miliard "
ElseIf forma = "2" Then
mianozl = "miliardy "
Else
mianozl = "miliardów "
EndIf
slowniezl = slowniezl & wy & mianozl
miliony:
we = Left(txc,dlugosc-6)
txc = Right(txc,6)
dlugosc = 6
Call miano
If forma = "0" Then
mianozl = ""
ElseIf forma = "1" Then
mianozl = "milion "
ElseIf forma = "2" Then
mianozl = "miliony "
Else
mianozl = "milionów "
EndIf
slowniezl = slowniezl & wy & mianozl
tysiace:
we = Left(txc,dlugosc-3)
txc = Right(txc,3)
dlugosc = 3
Call miano
If forma = "0" Then
mianozl = ""
ElseIf forma = "1" Then
mianozl = "tysiąc "
ElseIf forma = "2" Then
mianozl = "tysiące "
Else
mianozl = "tysięcy "
EndIf
slowniezl = slowniezl & wy & mianozl
setki:
we = txc
Call miano
If forma = "0" Then
mianozl = "złotych"
ElseIf forma = "1" Then
mianozl = "złoty"
ElseIf forma = "2" Then
mianozl = "złote"
Else
mianozl = "złotych"
EndIf
slowniezl = slowniezl & wy & mianozl
slownie = slowniezl & " i " & slowniegr
Kursor1.String = " zł (" & slownie & ")"
End Sub
Sub miano
'Sub slow
'we = InputBox ("Wprowadź liczbę:")
Dim dl As Integer
Dim cy3, cy2, cy1 As String
Dim jednostki(), nastki(), dziesiatki(), setki()
jednostki() = jednostki1()
nastki() = nastki1()
dziesiatki() = dziesiatki1()
setki() = setki1()
dl = Len(we)
cy1 = ""
cy2 = ""
cy3 = ""
wy = ""
forma = ""
'jedna cyfra
If dl = 1 Then
cy1 = we
wy = jednostki(cy1)
If cy1 = "0" Then
forma = "0"
ElseIf cy1 = "1" Then
forma = "1"
ElseIf cy1 = "2" or cy1 = "3" or cy1 = "4" Then
forma = "2"
Else
forma = "5"
End If
'dwie cyfry
ElseIf dl = 2 Then
cy1 = Mid(we,2,1)
cy2 = Mid(we,1,1)
If cy2 = "0" Then
wy = jednostki(cy1)
If cy1 = "0" Then
forma = "0"
ElseIf cy1 = "1" Then
forma = "1"
ElseIf cy1 = "2" or cy1 = "3" or cy1 = "4" Then
forma = "2"
Else
forma = "5"
End If
ElseIf cy2 = "1" Then
wy = nastki(cy1)
forma = "5"
ElseIf cy1 = "2" or cy1 = "3" or cy1 = "4" Then
wy = dziesiatki(cy2) & jednostki(cy1)
forma = "2"
Else
wy = dziesiatki(cy2) & jednostki(cy1)
forma = "5"
End If
'trzy cyfry
Else
cy1 = Mid(we,3,1)
cy2 = Mid(we,2,1)
cy3 = Mid(we,1,1)
If cy3 = "0" and cy2 = "0" and cy1 = "0" Then
wy = ""
forma = "0"
ElseIf cy3 = "0" and cy2 = "0" Then
wy = jednostki(cy1)
If cy1 = "1" Then
forma = "1"
ElseIf cy1 = "2" or cy1 = "3" or cy1 = "4" Then
forma = "2"
Else
forma = "5"
End If
ElseIf cy3 = "0" and cy2 = "1" Then
wy = nastki(cy1)
forma = "5"
ElseIf cy3 = "0" Then
wy = dziesiatki(cy2) & jednostki(cy1)
If cy1 = "2" or cy1 = "3" or cy1 = "4" Then
forma = "2"
Else
forma = "5"
End If
ElseIf cy2 = "1" Then
wy = setki(cy3) & nastki(cy1)
forma = "5"
ElseIf cy1 = "2" or cy1 = "3" or cy1 = "4" Then
wy = setki(cy3) & dziesiatki(cy2) & jednostki(cy1)
forma = "2"
Else
wy = setki(cy3) & dziesiatki(cy2) & jednostki(cy1)
forma = "5"
End If
End If
End Sub
Function jednostki1()
jednostki1() = Array("", "jeden ", "dwa ", "trzy ", "cztery ", "pięć ", _
"sześć ", "siedem ", "osiem ", "dziewięć ")
End Function
Function nastki1()
nastki1() = Array("dziesięć ", "jedenaście ", "dwanaście ", _
"trzynaście ", "czternaście ", "piętnaście ", "szesnaście ", _
"siedemnaście ", "osiemnaście ", "dziewiętnaście ")
End Function
Function dziesiatki1()
dziesiatki1() = Array("", "", "dwadzieścia ", "trzydzieści ", _
"czterdzieści ", "pięćdziesiąt ", "sześćdziesiąt ", _
"siedemdziesiąt ", "osiemdziesiąt ", "dziewięćdziesiąt ")
End Function
Function setki1()
setki1() = Array("", "sto ", "dwieście ", "trzysta ", "czterysta ", _
"pięćset ", "sześćset ", "siedemset ", "osiemset ", "dziewięćset ")
End Function
'========= ========= ========= ========= ========= ========= =========