Untitled
unknown
plain_text
a year ago
5.7 kB
302
Indexable
Never
Sub liczba_1_konwersja() Dim liczba As Double ' liczba Dim x1 As String ' liczba slowami Range("B14").Select ' Miejsce dla danych liczba = ActiveCell.Offset(0, 0) ' Czytaj Liczbe x1 = Liczba_slowa(liczba) ActiveCell.Offset(0, 1) = x1 ' zapis liczby slowami End Sub Sub licz_zakres_konwersja() Dim x1 As String ' liczba slowami Dim liczba As Double ' liczba Dim Linia As Variant Dim Nazwa_Ark_Katalog As String Dim Nrlinii As Integer Nazwa_Ark_Katalog = Arkusz1.Name Worksheets(Nazwa_Ark_Katalog).Activate ' aktywacja arkusza z danymi katalogowymi Range("A4").Select ' Zaznaczenie obszaru dla nazwy maszyny Selection.CurrentRegion.Select Selection.CurrentRegion.Select Nrlinii = 0 For Each Linia In Selection.Rows liczba = ActiveCell.Offset(Nrlinii, 0) ' Czytaj Liczbe x1 = Liczba_slowa(liczba) ActiveCell.Offset(Nrlinii, 1) = x1 ' zapis liczby slowami Nrlinii = Nrlinii + 1 Next MsgBox "Koniec przeliczania zakresu" Range("A4").Select ' Zaznaczenie obszaru dla nazwy maszyny End Sub Function Liczba_slowa(wej_liczba As Double) As Variant '=================================================================== '= Procedure: Liczba_slowa = '= Type: Function = '= = '= Opis: zamiana liczby na jej reprezentację słowną = '= Parametr: wej_liczba - Double = Application.Volatile 'zmienne do przechowywania części składowych argumentu dblAmount, 'tysięcy złotych, złotych i groszy. Dim intST As Integer, intDT As Integer, intTY As Integer Dim intSZ As Integer, intDZ As Integer, intZL As Integer Dim intDG As Integer, intGR As Integer 'zmienne pomocne przy określaniu prawidłowej formy gramatycznej 'słów : tysiąc, złoty, grosz. Dim intT As Integer, intZ As Integer, intG As Integer 'zmienne te przechowują odpowiedni element tekstowy ze zdefinowanych 'niżej tablic. Dim varSETKI As Variant, varDZIESIATKI As Variant, varNASTKI As Variant Dim varJEDNOSTKI As Variant, varTYSIACE As Variant, varZLOTE As Variant Dim varGROSZE As Variant Dim strSLOWNIE As String, strAMOUNT As String 'jeżeli wartość absolutna liczby przekracza 999.999,99 funkcja zwraca 'wartość błędu #N/A. If Abs(wej_liczba) > 999999.99 Then Liczba_slowa = CVErr(xlErrNA) Exit Function End If 'zdefiniowanie tablic zawierających wartości słowne odpowiadające 'elementom wartości varSETKI = Array("", "sto ", "dwieście ", "trzysta ", "czterysta ", _ "pięćset ", "sześćset ", "siedemset ", "osiemset ", "dziewięćset ") varDZIESIATKI = Array("", "dziesięć ", "dwadzieścia ", "trzydzieści ", _ "czterdzieści ", "pięćdziesiąt ", "sześćdziesiąt ", "siedemdziesiąt ", _ "osiemdziesiąt ", "dziewięćdziesiąt ") varNASTKI = Array("", "jedenaście ", "dwanaście ", "trzynaście ", _ "czternaście ", "piętnaście ", "szesnaście ", "siedemnaście ", _ "osiemnaście ", "dziewiętnaście ") varJEDNOSTKI = Array("", "jeden ", "dwa ", "trzy ", "cztery ", _ "pięć ", "sześć ", "siedem ", "osiem ", "dziewięć ") varTYSIACE = Array("", "tysiąc ", "tysiące ", "tysięcy ") '****** TUTAJ ZMIANA TAK BYŁO WCZEŚNIEJ ' varZLOTE = Array("zero, ", ", ", ", ", ", ") varZLOTE = Array("zero zł,", "zł, ", "zł, ", "zł, ") '****** TUTAJ ZMIANA TAK BYŁO WCZEŚNIEJ 'varGROSZE = Array("zero ", " ", " ", " ") varGROSZE = Array("zero groszy", "grosz ", "grosze ", "groszy ") 'zamiana liczby na tekst w formacie '00000000'. strAMOUNT = Format(Abs(Application.WorksheetFunction.Round(wej_liczba, 2) * 100), "00000000") 'rozbijamy liczbe na części składowe. 'Tysiace intST = Val(Mid(strAMOUNT, 1, 1)) intDT = Val(Mid(strAMOUNT, 2, 1)) intTY = Val(Mid(strAMOUNT, 3, 1)) 'Zlote intSZ = Val(Mid(strAMOUNT, 4, 1)) intDZ = Val(Mid(strAMOUNT, 5, 1)) intZL = Val(Mid(strAMOUNT, 6, 1)) 'Grosze intDG = Val(Mid(strAMOUNT, 7, 1)) intGR = Val(Mid(strAMOUNT, 8, 1)) strSLOWNIE = varSETKI(intST) 'kod poniżej służy umożliwia zwrócenie prawidłowej formy 'gramatycznej liczebników. If intDT = 1 And intTY <> 0 Then strSLOWNIE = strSLOWNIE & varNASTKI(intTY) Else strSLOWNIE = strSLOWNIE & varDZIESIATKI(intDT) & varJEDNOSTKI(intTY) End If 'Tysiące If (intST + intDT + intTY) = 0 Then intT = 0 ElseIf (intST + intDT) = 0 And intTY = 1 Then intT = 1 ElseIf (intTY = 2 Or intTY = 3 Or intTY = 4) And intDT <> 1 Then intT = 2 Else intT = 3 End If strSLOWNIE = strSLOWNIE & varTYSIACE(intT) & varSETKI(intSZ) 'pojedyncze If intDZ = 1 And intZL <> 0 Then strSLOWNIE = strSLOWNIE & varNASTKI(intZL) Else strSLOWNIE = strSLOWNIE & varDZIESIATKI(intDZ) & varJEDNOSTKI(intZL) End If If (intST + intDT + intTY + intSZ + intDZ + intZL) = 0 Then intZ = 0 ElseIf (intSZ + intDZ = 0) And intZL = 1 Then intZ = 1 ElseIf (intZL = 2 Or intZL = 3 Or intZL = 4) And intDZ <> 1 Then intZ = 2 Else intZ = 3 End If '****** TUTAJ ZMIANA TAK BYŁO WCZEŚNIEJ strSLOWNIE = strSLOWNIE & varZLOTE(intZ) 'strSLOWNIE = strSLOWNIE & varZLOTE(intZ) & "zł, " '0.1 dziesiatki If intDG = 1 And intGR <> 0 Then strSLOWNIE = strSLOWNIE & varNASTKI(intGR) Else strSLOWNIE = strSLOWNIE & varDZIESIATKI(intDG) & varJEDNOSTKI(intGR) End If If intDG + intGR = 0 Then intG = 0 ElseIf intDG = 0 And intGR = 1 Then intG = 1 ElseIf (intGR = 2 Or intGR = 3 Or intGR = 4) And intDG <> 1 Then intG = 2 Else intG = 3 End If strSLOWNIE = strSLOWNIE & varGROSZE(intG) Liczba_slowa = strSLOWNIE End Function