|
| Старший Администратор
|
Сообщение: 209
Зарегистрирован: 01.02.10
Откуда: Киев
Репутация:
0
|
|
Отправлено: 26.02.10 14:53. Заголовок: Макрос для WORD, рас..
Макрос для WORD, расписывающий суммы в числах словами. И выделяющий ПДВ (НДС). Сам сочинял. Ставил на все, включая Word-2002. На 2003 поставить не смог, сколько не бился. Видимо, надо почитать инструкцию. На 2007 не ставил. ====================== Public Sub DecToTxt() Dim A2 As String, D1 As String, A3 As String, W1 As Double Dim PDV As Double, D2 As String, KJ As Integer A3 = "А ничего не выбрано!! Или выбран один символ, а это не переводится!! Или выбрано не число!!" If Len(Selection) > 1 Then A2 = Selection If Val(A2) > 0 Then Call TRANSSUM(A2, D1, "K") KJ = InStr(A2, ","): If KJ > 0 Then Mid$(A2, KJ, 1) = "." W1 = Val(A2) PDV = W1 * 0.2 A2 = Str(PDV) Call TRANSSUM(A2, D2, "K") Selection = D1 & ", у тому числі ПДВ" & " " & D2 Else MsgBox (A3) End If Else MsgBox (A3) End If End Sub ================== '----------------------------------------------------------------- Public Sub TRANSSUM(A1 As String, D1 As String, PR1 As String) 'Процедура переписывания чисел до 99999999.99 строкой слов 'PR1 - Признак "K"-с коп., "O"-с 00 коп, "N" -без коп. ' Пример вызова: Call TRANSSUM(A2, D11, "K") Dim KB1 As Integer, TA1 As String, KC1 As Long, DC1 As Integer, DS1 As String Dim dd1 As String, D21 As String, D22 As String, D3 As String, D4 As String Dim D5 As String, D6 As String, D7 As String, D8 As String, BB1 As String Dim JB1 As Integer, JB2 As Integer, I1 As Integer, FL1 As Integer, PCH1 As String Dim KJ As Integer, DLC As Integer, KBD As Integer Dim FLGNUL As Boolean, dd2 As Single dd2 = Val(A1) If dd2 < 1 Then FLGNUL = True Else FLGNUL = False KJ = InStr(A1, "."): If KJ > 0 Then Mid$(A1, KJ, 1) = "," KJ = InStr(A1, ",") If KJ < 1 Then A1 = A1 + ",00" KJ = InStr(A1, ",") KBD = InStr(A1, ","): DLC = Len(A1) If DLC - KBD = 1 Then A1 = A1 & "0" KB1 = InStr(A1, ",") - 1 JB1 = 0: FL1 = 0 For I1 = 1 To KB1 TA1 = Mid$(A1, I1, 1) Select Case TA1 Case " ", "0": Mid$(A1, I1, 1) = " " Case Else FL1 = 1 End Select If FL1 = 1 Then Exit For Next I1 For I1 = KB1 To 1 Step -1 If Mid$(A1, I1, 1) <> " " Then JB1 = JB1 + 1 Else Exit For Next I1 TA1 = Mid$(A1, 1 + (KB1 - JB1), KB1 - (KB1 - JB1)): KC1 = Val(TA1) If KC1 > 99999999 Then D1 = "Сумма больше 99 999 999! Нет трансформации !!": Exit Sub If KC1 < 10 Then '-----0.00 DC1 = KC1: GoSub KODODIN: DS1 = dd1 ElseIf KC1 > 9 And KC1 < 20 Then '-----00.00 DC1 = KC1: GoSub KODDVA: DS1 = D21 ElseIf KC1 > 19 And KC1 < 100 Then '-----00.00 BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1): GoSub KODDVAB BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1): GoSub KODODIN DS1 = D22 + dd1 ElseIf KC1 > 99 And KC1 < 1000 Then '-----000.00 BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1): GoSub KODTRI BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D3 + D21 End If ElseIf KC1 > 999 And KC1 < 10000 Then '-----0 000.00 BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1): GoSub KODCHET BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1) If DC1 > 0 Then GoSub KODTRI Else D3 = "" BB1 = Mid$(TA1, 3, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D4 + D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D4 + D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D4 + D3 + D21 End If ElseIf KC1 > 9999 And KC1 < 100000 Then '-----00 000.00 JB2 = 2: BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1) If DC1 > 1 Then GoSub TRIKOD1: D5 = D22 + D4: D22 = "" Else GoSub TRIKOD2: D5 = D21 + "тисяч ": D21 = "" End If BB1 = Mid$(TA1, 3, 1): DC1 = Val(BB1) If DC1 > 0 Then GoSub KODTRI Else D3 = "" BB1 = Mid$(TA1, 4, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D5 + D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D5 + D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D5 + D3 + D21 End If ElseIf KC1 > 99999 And KC1 < 1000000 Then '-----000 000.00 JB2 = 3: BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1): GoSub KODTRI: D6 = D3: D3 = "" BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub TRIKOD: D5 = D6 + D4 ElseIf DC1 > 1 Then GoSub TRIKOD1: D5 = D6 + D22 + D4: D22 = "" Else GoSub TRIKOD2: D5 = D6 + D21 + "тисяч ": D21 = "" End If BB1 = Mid$(TA1, 4, 1): DC1 = Val(BB1): GoSub KODTRI BB1 = Mid$(TA1, 5, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D5 + D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D5 + D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D5 + D3 + D21 End If ElseIf KC1 > 999999 And KC1 < 10000000 Then '-----0 000 000.00 JB2 = 4: BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1): GoSub KODSEM BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1): If DC1 > 0 Then GoSub KODTRI: D6 = D3: D3 = "" BB1 = Mid$(TA1, 3, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub TRIKOD: D5 = D6 + D4 ElseIf DC1 > 1 Then GoSub TRIKOD1: D5 = D6 + D22 + D4: D22 = "" Else GoSub TRIKOD2: D5 = D6 + D21 + "тисяч ": D21 = "" End If BB1 = Mid$(TA1, 5, 1): DC1 = Val(BB1): GoSub KODTRI BB1 = Mid$(TA1, 6, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D7 + D5 + D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D7 + D5 + D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D7 + D5 + D3 + D21 End If ElseIf KC1 > 9999999 And KC1 < 100000000 Then '----00 000 000.00 JB2 = 5: BB1 = Mid$(TA1, 1, 1): DC1 = Val(BB1) If DC1 > 1 Then GoSub KODDVAB: BB1 = Mid$(TA1, 2, 1): DC1 = Val(BB1): GoSub KODSEM D8 = D22 + D7: D22 = "" Else BB1 = Mid$(TA1, 1, 2): DC1 = Val(BB1): GoSub KODDVA: D8 = D21 + "миллионов ": D21 = "" End If BB1 = Mid$(TA1, 3, 1): DC1 = Val(BB1): If DC1 > 0 Then GoSub KODTRI: D6 = D3: D3 = "" BB1 = Mid$(TA1, 4, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub TRIKOD: D5 = D6 + D4 ElseIf DC1 > 1 Then GoSub TRIKOD1: D5 = D6 + D22 + D4: D22 = "" Else GoSub TRIKOD2: D5 = D6 + D21 + "тисяч ": D21 = "" End If BB1 = Mid$(TA1, 6, 1): DC1 = Val(BB1): GoSub KODTRI BB1 = Mid$(TA1, 7, 1): DC1 = Val(BB1) If DC1 = 0 Then GoSub DVAKOD: DS1 = D8 + D5 + D3 + dd1 ElseIf DC1 > 1 Then GoSub DVAKOD1: DS1 = D8 + D5 + D3 + D22 + dd1 Else GoSub DVAKOD2: DS1 = D8 + D5 + D3 + D21 End If End If GoSub PECH: D1 = Trim(DS1) '& " грн." If UCase$(PR1) = "O" Then D1 = D1 & " коп. 00" ElseIf UCase$(PR1) = "K" Then If Len(A1) >= KJ + 2 Then TA1 = Mid$(A1, KJ + 1, 2) Else TA1 = Right$(A1, 2) End If D1 = A1 & " (" & D1 & ") грн. " & TA1 & " коп." End If Exit Sub KODODIN: Select Case DC1 Case 0: If FLGNUL Then dd1 = "нуль" Else Return Case 1: dd1 = "одна " Case 2: dd1 = "дві " Case 3: dd1 = "три " Case 4: dd1 = "чотири " Case 5: dd1 = "п'ять " Case 6: dd1 = "шiсть " Case 7: dd1 = "сiм " Case 8: dd1 = "вiсiм " Case 9: dd1 = "дев'ять " End Select Return KODDVA: Select Case DC1 Case 10: D21 = "десять " Case 11: D21 = "одинадцять " Case 12: D21 = "дванадцять " Case 13: D21 = "тринадцять " Case 14: D21 = "чотирнадцять " Case 15: D21 = "п'ятнадцять " Case 16: D21 = "шiстнадцять " Case 17: D21 = "сiмнадцять " Case 18: D21 = "вiсiмнадцять " Case 19: D21 = "дев'ятнадцять " End Select Return KODDVAB: Select Case DC1 Case 2: D22 = "двадцять " Case 3: D22 = "тридцять " Case 4: D22 = "сорок " Case 5: D22 = "п'ятдесят " Case 6: D22 = "шiстдесят " Case 7: D22 = "сiмдесят " Case 8: D22 = "вiсiмдесят " Case 9: D22 = "дев'яносто " End Select Return KODTRI: Select Case DC1 Case 1: D3 = "сто " Case 2: D3 = "двiстi " Case 3: D3 = "триста " Case 4: D3 = "чотириста " Case 5: D3 = "п'ятсот " Case 6: D3 = "шiстсот " Case 7: D3 = "сiмсот " Case 8: D3 = "вiсiмсот " Case 9: D3 = "дев'ятсот " End Select Return KODCHET: Select Case DC1 Case 0: D4 = "тисяч " Case 1: D4 = "одна тисяча " Case 2: D4 = "двi тисячі " Case 3: D4 = "три тисячі " Case 4: D4 = "чотири тисячі " Case 5: D4 = "п'ять тисяч " Case 6: D4 = "шiсть тисяч " Case 7: D4 = "сiм тисяч " Case 8: D4 = "вiсiм тисяч " Case 9: D4 = "дев'ять тисяч " End Select Return KODSEM: Select Case DC1 Case 0: D7 = "мiльйонiв " Case 1: D7 = "один мiльйон" Case 2: D7 = "два мiльйона " Case 3: D7 = "три мiльйона " Case 4: D7 = "чотири мiльйона " Case 5: D7 = "п'ять мiльйонiв " Case 6: D7 = "шiсть мiльйонiв " Case 7: D7 = "сiм мiльйонiв " Case 8: D7 = "вiсiм мiльйонiв " Case 9: D7 = "дев'ять мiльйонiв " End Select Return DVAKOD: BB1 = Mid$(TA1, JB1, 1): DC1 = Val(BB1): GoSub KODODIN Return DVAKOD1: GoSub KODDVAB: BB1 = Mid$(TA1, JB1, 1): DC1 = Val(BB1): GoSub KODODIN Return DVAKOD2: BB1 = Mid$(TA1, JB1 - 1, 2): DC1 = Val(BB1): GoSub KODDVA Return TRIKOD: BB1 = Mid$(TA1, JB2, 1): DC1 = Val(BB1) If DC1 > 0 Then GoSub KODCHET Else If D6 <> "" Then D4 = "тисяч " End If Return TRIKOD1: GoSub KODDVAB: BB1 = Mid$(TA1, JB2, 1): DC1 = Val(BB1) If DC1 > 0 Then GoSub KODCHET Else D4 = "тисяч " Return TRIKOD2: BB1 = Mid$(TA1, JB2 - 1, 2): DC1 = Val(BB1): GoSub KODDVA Return PECH: '---- Первую букву - большую ----- Return PCH1 = Mid$(DS1, 1, 1) Select Case Asc(PCH1) Case 224 To 255: Mid$(DS1, 1, 1) = Chr$(Asc(PCH1) - 32) End Select Return End Sub '---------------------------------------
|