powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка в коде не могу разобраться.
11 сообщений из 11, страница 1 из 1
Ошибка в коде не могу разобраться.
    #40025652
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, есть (как всегда) база в ней форма, которая выдаёт ... ну что-то выдаёт, так это чтото должно ещё выдать сумму прописью, нашёл модуль воткнул, алилуйяяя, заработало, но почему-то работает только на одном компьютере (причём старом офис 2003) а на офисах 2007 и выше не хочет, помогите, что не так.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
Option Compare Database   'Use Database order For String comparisons
Dim Flag_Propis As Integer, Flag1_Propis As Integer

Public Function Num2Str(dblNum As Double, Optional lVal As Integer = 1, Optional lUseDecimal As Long = 2, Optional sGender As String) As String
'это просто оболочка для функций.
'lVal - валюта. поддерживаются:
'1 -рубли
'2 - доллары
'3 - марки
'4 - фунты
'5 - условные единицы
'6 - целых (просто числа)
'lUseDecimal -выводить ли дробную часть
'0 - не выводить
'1- выводить числом
'2- выводить прописью

'am 010507
'для простых чисел можно применять род -
'то есть если передаешь одновременно Валюту 6,lUseDecimal=0 и какой род - то
'в случае целого числа не будет выведено слово "целая" и число будет в указанном роде
'Например
'? Num2Str(1,6,0)=одна целая
'? Num2Str(1,6,0,"c")=одно
    
'проверим параметры
    Select Case sGender
    Case "", "w", "ж", "W", "Ж" '- женский
    Case "m", "м", "M", "М" '- мужской
    Case "n", "с", "N", "С" '- средний
    Case Else
       Stop 'НЕКОРРЕКТНЫЙ РОД!
    End Select
'только в этом (то есть обратном) случае необходимо учитывать род!
    If lVal <> 6 Or lUseDecimal <> 0 Then sGender = ""
    
    Select Case lUseDecimal
    Case 0
       Num2Str = Propis_X(dblNum, lVal, sGender)
    Case 1
       Num2Str = Propis_X(dblNum, lVal) + Propis_Коп(CCur(dblNum), lVal)
    Case 2
       Num2Str = Propis_X(dblNum, lVal) + Propis_Low_X(dblNum, lVal)
    Case Else
    End Select

End Function


Function Propis_Low_X(X_Sum As Double, Flag_L As Integer)
Dim x_Sum_S As String, Result_X As String, Len_C As Integer
Dim i As Integer, j As Integer, Start As Integer, Len_X As Integer
x_Sum_S = Trim(Str(X_Sum))
Start = InStr(x_Sum_S, ".")
  If Start <> 0 Then
   Len_X = Len(x_Sum_S)
   x_Sum_S = Mid$(x_Sum_S, Start + 1, Len_X - Start)
   Len_C = Len(x_Sum_S)
    If Len_C > 2 Then
       x_Sum_S = Mid$(x_Sum_S, 1, 1) + Trim(Str(IIf(Val(Mid$(x_Sum_S, 3, 1)) > 4, Val(Mid$(x_Sum_S, 2, 1)) + 1, Val(Mid$(x_Sum_S, 2, 1)))))
    Else
        If Len_C = 1 Then
           x_Sum_S = x_Sum_S + "0"
        End If
    End If
   Len_C = 2
   j = 1: Result_X = "": Flag_Propis = 0: Flag1_Propis = 0
    For i = Len_C To 1 Step -1
       Result_X = Result_X + Propis_Y(i, Mid$(x_Sum_S, j, 1), Flag_L)
       Result_X = Result_X + Propis_Low_Z(i, Flag_L)
       j = j + 1
    Next i
  Else
'am 010507 - добавил вывод подписи к нулю...
'по идее наверное есть необходимость параметра - не выводить вообще если нет...
   Result_X = "00 " + Propis_Low_Z(1, Flag_L)
  End If
Propis_Low_X = Result_X
End Function

Function Propis_Low_Z(Number_Position As Integer, Flag_L As Integer)
Dim Result_Z As String
Result_Z = ""
  Select Case Number_Position
   Case 13:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "сексилионов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "сексилиона ": Flag1_Propis = 0
     Case 2: Result_Z = "сексилион ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 10:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "миллиардов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "миллиарда ": Flag1_Propis = 0
     Case 2: Result_Z = "миллиард ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 7:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "миллионов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "миллиона ": Flag1_Propis = 0
     Case 2: Result_Z = "миллион ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 4:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "тысяч ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "тысячи ": Flag1_Propis = 0
     Case 2: Result_Z = "тысяча ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 1:
    Select Case Flag_Propis
     Case 0:
      Select Case Flag_L
         Case 1: Result_Z = "копеек "
         Case 2: Result_Z = "центов "
         Case 3: Result_Z = "пфеннигов "
         Case 4: Result_Z = "пенни "
         Case 5: Result_Z = "сотых "
         Case 6: Result_Z = "сотых "
        End Select
       Flag1_Propis = 0
     Case 1:
        Select Case Flag_L
         Case 1: Result_Z = "копейки "
         Case 2: Result_Z = "цента "
         Case 3: Result_Z = "пфеннига "
         Case 4: Result_Z = "пенни "
         Case 5: Result_Z = "сотых "
         Case 6: Result_Z = "сотых "
        End Select
       Flag1_Propis = 0
     Case 2:
        Select Case Flag_L
         Case 1: Result_Z = "копейка "
         Case 2: Result_Z = "цент "
         Case 3: Result_Z = "пфенниг "
         Case 4: Result_Z = "пенни "
         Case 5: Result_Z = "сотая "
         Case 6: Result_Z = "сотая "
        End Select
       Flag1_Propis = 0
    End Select
   Flag_Propis = 0
  End Select
Propis_Low_Z = Result_Z
End Function

'am 010507 - добавлено sGender - описание см. Num2Str
'am changed 001113
Function Propis_X(X_Sum As Double, Flag_L As Integer, Optional sGender As String)
Dim x_Sum_S As String, Result_X As String
Dim i As Integer, j As Integer, Start As Integer, Len_X As Integer, Len_C As Integer
x_Sum_S = Trim(Str(X_Sum))
Start = InStr(x_Sum_S, ".")
Len_X = Len(x_Sum_S)
Len_C = IIf(Start = 0, Len_X, Start - 1)
j = 1: Result_X = "": Flag_Propis = 0: Flag1_Propis = 0
   For i = Len_C To 1 Step -1
'am 010507 - добавл sGender
   Result_X = Result_X + Propis_Y(i, Mid$(x_Sum_S, j, 1), Flag_L, sGender)
   Result_X = Result_X + Propis_Z(i, Flag_L, sGender)
'am 010507 - end
   j = j + 1
   Next i
'am 001113
  If Nz(Result_X, "") = "" And Len_X > 0 Then
   Flag_Propis = 0
   Propis_X = "ноль " & Propis_Z(1, Flag_L)
  Else
   Propis_X = Result_X
  End If
End Function

'am 020218 - в миллионах и миллиардах добавлено слово Один (если он один)
'am 011031 - исправлена ошибка, возникшая после добавления рода - не печатались двойки в миллионах...
'am 010507 - добавлено sGender - описание см. Num2Str
Function Propis_Y(Number_Position As Integer, Source_String As String, Flag_L As Integer, Optional sGender As String)
' предполагается, что если sGender<>"" то последнее числит. выводить с указанном роде
Dim Result_Y As String
Result_Y = ""
  Select Case Number_Position
   Case 9, 6, 3, 12, 15:
  Select Case Source_String
     Case "1": Result_Y = "сто ": Flag1_Propis = 1
     Case "2": Result_Y = "двести ": Flag1_Propis = 1
     Case "3": Result_Y = "триста ": Flag1_Propis = 1
     Case "4": Result_Y = "четыреста ": Flag1_Propis = 1
     Case "5": Result_Y = "пятьсот ": Flag1_Propis = 1
     Case "6": Result_Y = "шестьсот ": Flag1_Propis = 1
     Case "7": Result_Y = "семьсот ": Flag1_Propis = 1
     Case "8": Result_Y = "восемьсот ": Flag1_Propis = 1
     Case "9": Result_Y = "девятьсот ": Flag1_Propis = 1
    End Select
   Propis_Y = Result_Y
   Exit Function
  Case 8, 5, 2, 11, 14:
   Select Case Source_String
     Case "1": Flag_Propis = 1: Flag1_Propis = 1
     Case "2": Result_Y = "двадцать ": Flag1_Propis = 1
     Case "3": Result_Y = "тридцать ": Flag1_Propis = 1
     Case "4": Result_Y = "сорок ": Flag1_Propis = 1
     Case "5": Result_Y = "пятьдесят ": Flag1_Propis = 1
     Case "6": Result_Y = "шестьдесят ": Flag1_Propis = 1
     Case "7": Result_Y = "семьдесят ": Flag1_Propis = 1
     Case "8": Result_Y = "восемьдесят ": Flag1_Propis = 1
     Case "9": Result_Y = "девяносто ": Flag1_Propis = 1
    End Select
   Propis_Y = Result_Y
   Exit Function
  Case 7, 4, 1, 10, 13:
   If Flag_Propis = 1 Then
     Select Case Source_String
      Case "0": Result_Y = "десять "
      Case "1": Result_Y = "одиннадцать "
      Case "2": Result_Y = "двенадцать "
      Case "3": Result_Y = "тринадцать "
      Case "4": Result_Y = "четырнадцать "
      Case "5": Result_Y = "пятнадцать "
      Case "6": Result_Y = "шестнадцать "
      Case "7": Result_Y = "семнадцать "
      Case "8": Result_Y = "восемнадцать "
      Case "9": Result_Y = "девятнадцать "
     End Select
     Flag_Propis = 0
      Else
       Select Case Source_String
        Case "1":
'am 010507 - только добавил комментарий
'Result_Y = IIf(Number_Position = 4, "одна ", IIf(Number_Position = 1 And (Flag_L = 3 Or Flag_L = 5), "одна ", "один ")): Flag_Propis = 2
            If Number_Position = 4 Then 'это тысячи - они в разрядах женский род, остальные (миллион и т.д.) - мужской
               Result_Y = "одна "
'am 020218 - чтобы 1000000 был Один миллион... а не просто миллион.
            ElseIf Number_Position = 7 Or Number_Position = 10 Then
'это миллионы или миллиарды - мужской род всегда
               Result_Y = "один "
            ElseIf Number_Position = 1 Then
                If Flag_L = 3 Or Flag_L = 5 Then 'марки и у.е
                   Result_Y = "одна "
'am 010507 - добавил №6 (целая)
'если sGender="" - то женский род (целая), иначе - в зависимости от sGender
                ElseIf Flag_L = 6 Then
                    Select Case sGender
                    Case "", "w", "ж", "W", "Ж" '- женский
                       Result_Y = "одна "
                    Case "m", "м", "M", "М" '- мужской
                       Result_Y = "один "
                    Case "n", "с", "N", "С" '- средний
                       Result_Y = "одно "
                    Case Else
                       Stop 'НЕкорректный род!!!
                    End Select
                Else
                   Result_Y = "один " ' всё остальное
                End If
            End If
           Flag_Propis = 2
           Flag1_Propis = 1
        Case "2":
'am 010507 - только добавил комментарий
'Result_Y = IIf(Number_Position = 4, "две ", IIf(Number_Position = 1 And (Flag_L = 3 Or Flag_L = 5), "две ", "два ")): Flag_Propis = 1
            If Number_Position = 4 Then 'это тысячи - они в разрядах женский род, остальные (миллион и т.д.) - мужской
               Result_Y = "две "
            ElseIf Number_Position = 1 Then
                If Flag_L = 3 Or Flag_L = 5 Then 'марки и у.е
                   Result_Y = "две "
'am 010507 - добавил №6 (целая)
'если sGender="" - то женский род (целая), иначе - в зависимости от sGender
                ElseIf Flag_L = 6 Then
                    Select Case sGender
                    Case "", "w", "ж", "W", "Ж" '- женский
                       Result_Y = "две "
                    Case "m", "м", "M", "М", "n", "с", "N", "С" '- мужской и средний
                       Result_Y = "два "
                    Case Else
                       Stop 'НЕВЕРНЫЙ формат!!
                    End Select
                Else
                   Result_Y = "два " ' всё остальное
                End If
'am 011031 - ошибка! В случае 7го разряда - проскакивает...
            Else
               Result_Y = "два "
            End If
         Flag_Propis = 1
         Flag1_Propis = 1
        Case "3": Result_Y = "три ": Flag_Propis = 1: Flag1_Propis = 1
        Case "4": Result_Y = "четыре ": Flag_Propis = 1: Flag1_Propis = 1
        Case "5": Result_Y = "пять ": Flag1_Propis = 1
        Case "6": Result_Y = "шесть ": Flag1_Propis = 1
        Case "7": Result_Y = "семь ": Flag1_Propis = 1
        Case "8": Result_Y = "восемь ": Flag1_Propis = 1
        Case "9": Result_Y = "девять ": Flag1_Propis = 1
       End Select
      End If
   Propis_Y = Result_Y
   Exit Function
End Select
End Function

'am 010507 - добавлен род (здесь не проверяется - проверяется выше - вызывай всегда Num2Str
Function Propis_Z(Number_Position As Integer, Flag_L As Integer, Optional sGender As String)
'sGender - род числительного... подразумевается что если он <>""
'то не надо выводить слово "целая" после числительного
Dim Result_Z As String
Result_Z = ""
  Select Case Number_Position
   Case 13:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "сексилионов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "сексилиона ": Flag1_Propis = 0
     Case 2: Result_Z = "сексилион ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
    Case 10:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "миллиардов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "миллиарда ": Flag1_Propis = 0
     Case 2: Result_Z = "миллиард ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 7:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "миллионов ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "миллиона ": Flag1_Propis = 0
     Case 2: Result_Z = "миллион ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
   Case 4:
    Select Case Flag_Propis
     Case 0:
      If Flag1_Propis = 1 Then
       Result_Z = "тысяч ": Flag1_Propis = 0
      End If
     Case 1: Result_Z = "тысячи ": Flag1_Propis = 0
     Case 2: Result_Z = "тысяча ": Flag1_Propis = 0
    End Select
   Flag_Propis = 0
  Case 1:
    Select Case Flag_Propis
     Case 0:
      Select Case Flag_L
         Case 1: Result_Z = "рублей "
         Case 2: Result_Z = "долларов США "
         Case 3: Result_Z = "марок "
         Case 4: Result_Z = "фунтов "
         Case 5: Result_Z = "условных единиц "
         Case 6: Result_Z = "целых "
        End Select
       Flag1_Propis = 0
     Case 1:
        Select Case Flag_L
         Case 1: Result_Z = "рубля "
         Case 2: Result_Z = "доллара США "
         Case 3: Result_Z = "марки "
         Case 4: Result_Z = "фунта "
         Case 5: Result_Z = "условных единиц "
         Case 6: Result_Z = "целых "
        End Select
       Flag1_Propis = 0
     Case 2:
        Select Case Flag_L
         Case 1: Result_Z = "рубль "
         Case 2: Result_Z = "доллар США "
         Case 3: Result_Z = "марка "
         Case 4: Result_Z = "фунт "
         Case 5: Result_Z = "условная единица "
         Case 6: Result_Z = "целая "
        End Select
       Flag1_Propis = 0
    End Select
'am 010507 - не выводим последнее слово если sGender <> ""
    If Flag1_Propis = 0 And sGender <> "" Then Result_Z = " "
'am 010507 end
   Flag_Propis = 0
  End Select

Propis_Z = Result_Z
End Function

Function Propis_V(X_Sum As Double)
Dim x_Sum_S As String, Result_X As String, Result_Y As String
Dim i As Integer, j As Integer, Start As Integer, Len_X As Integer, Len_C As Integer
  
x_Sum_S = Trim$(Format(X_Sum, "#0.00"))
Start = InStr(x_Sum_S, ".")
Len_X = Len(x_Sum_S)
Len_C = IIf(Start = 0, Len_X, Start - 1)
j = 1
Result_X = ""
Flag_Propis = 0
Flag1_Propis = 0
  
  For i = Len_C To 1 Step -1
   Result_X = Result_X + Propis_Y(i, Mid$(x_Sum_S, j, 1), 3)
   j = j + 1
  Next i
  If Result_X <> "" Then Result_X = Result_X & IIf(Flag_Propis = 2, "целая ", "целых ")
'Debug.Print Flag_Propis, Flag1_Propis
    
j = 1
Result_Y = ""
Flag_Propis = 0
Flag1_Propis = 0
  If Start > 0 Then
   x_Sum_S = Mid$(x_Sum_S, Start + 1, 2)
    For i = 2 To 1 Step -1
     Result_Y = Result_Y + Propis_Y(i, Mid$(x_Sum_S, j, 1), 3)
     j = j + 1
    Next i
  End If
  If Result_Y <> "" Then Result_Y = Result_Y & IIf(Flag_Propis = 2, "сотая ", "сотых ")
  
Propis_V = Result_X & Result_Y & "тонн"

End Function

Public Function Propis_Коп(K_SumFP As Currency, Optional ValID As Integer = 1) As String
Dim K_Sum As Integer, Result As String
   K_Sum = (K_SumFP - Int(K_SumFP)) * 100
   Select Case K_Sum
      Case 11, 12, 13, 14: Result = " копеек"
         Select Case ValID
                Case 1
                   Result = " копеек "

                Case 6 'число
                   Result = " сотых "
                Case Else
                   Result = " "
       End Select
      Case 1, 21, 31, 41, 51, 61, 71, 81, 91: Result = " копейка"
         Select Case ValID
                Case 1
                   Result = " копейка "
                Case 2 'USD
                   Result = " цент "
                Case 3 'марки
                   Result = " пфенинг "
                Case 4 'фунт
                   Result = " пенни "
                Case 5 'у.е.
                   Result = " сотая "
                Case 6 'число
                   Result = " сотая "
                Case Else
                   Result = " "
       End Select
      Case Else
         Select Case K_Sum - Int(K_Sum / 10) * 10
            Case 2, 3, 4: Result = " копейки"
                  Select Case ValID
                         Case 1
                           Result = " копейки "
                         Case 2 'USD
                           Result = " цента "
                         Case 3 'марки
                           Result = " пфенинга "
                         Case 4 'фунт
                           Result = " пенни "
                         Case 5 'у.е.
                           Result = " сотых "
                         Case 6 'число
                           Result = " сотых "
                         Case Else
                           Result = " "
                End Select
            Case Else: Result = " копеек"
                    Select Case ValID
                         Case 1
                           Result = " копеек "
                         Case 2 'USD
                           Result = " центов "
                         Case 3 'марки
                           Result = " пфенингов "
                         Case 4 'фунт
                           Result = " пенни "
                         Case 5 'у.е.
                           Result = " сотых "
                         Case 6 'число
                           Result = " сотых "
                         Case Else
                           Result = " "
                End Select
         End Select
   End Select
   Propis_Коп = Format$(K_Sum, "00") & Result
End Function

Public Function Propis_Руб(R_SumFP As Currency, Optional ValID As Integer = 1) As String
Dim R_Sum As Integer, Result As String
   R_Sum = (R_SumFP - Int(R_SumFP)) * 100
   Select Case R_Sum
      Case 11, 12, 13, 14: Result = " коп."
         Select Case ValID
                Case 1
                   Result = " коп. "
                Case 2 'USD
                   Result = " центов "
                Case 3 'марки
                   Result = " пфенингов "
                Case 4 'фунт
                   Result = " пенни "
                Case 5 'у.е.
                   Result = " сотых "
                Case 6 'число
                   Result = " сотых "
                Case Else
                   Result = " "
       End Select
      Case 1, 21, 31, 41, 51, 61, 71, 81, 91: Result = " коп."
         Select Case ValID
                Case 1
                   Result = " коп. "
                Case 2 'USD
                   Result = " цент "
                Case 3 'марки
                   Result = " пфенинг "
                Case 4 'фунт
                   Result = " пенни "
                Case 5 'у.е.
                   Result = " сотая "
                Case 6 'число
                   Result = " сотая "
                Case Else
                   Result = " "
       End Select
      Case Else
         Select Case R_Sum - Int(R_Sum / 10) * 10
            Case 2, 3, 4: Result = " коп."
                  Select Case ValID
                         Case 1
                           Result = " коп. "
                         Case 2 'USD
                           Result = " цента "
                         Case 3 'марки
                           Result = " пфенинга "
                         Case 4 'фунт
                           Result = " пенни "
                         Case 5 'у.е.
                           Result = " сотых "
                         Case 6 'число
                           Result = " сотых "
                         Case Else
                           Result = " "
                End Select
            Case Else: Result = " коп."
                    Select Case ValID
                         Case 1
                           Result = " коп. "
                         Case 2 'USD
                           Result = " центов "
                         Case 3 'марки
                           Result = " пфенингов "
                         Case 4 'фунт
                           Result = " пенни "
                         Case 5 'у.е.
                           Result = " сотых "
                         Case 6 'число
                           Result = " сотых "
                         Case Else
                           Result = " "                End Select
         End Select
   End Select
   









Propis_Руб = Format$(R_Sum, "00") & Result         ----> Вот на эту строчку, и на оператор "Format$" ругается









End Function
'am 010525 - вставлю род
Public Function Cop(zV, ValID As Long) As String
Dim s As Currency
   s = 100 * (zV - Int(zV))
    Select Case ValID
    Case 1
       Cop = " " & s & " коп. "
    Case 2 'USD
        Select Case Right$(s, 1)
        Case "1"
           Cop = " " & s & " цент "
        Case "2", "3", "4"
           Cop = " " & s & " цента "
        Case Else
           Cop = " " & s & " центов "
        End Select
    Case 3 'марки
        Select Case Right$(s, 1)
        Case "1"
           Cop = " " & s & " пфенинг "
        Case "2", "3", "4"
           Cop = " " & s & " пфенинга "
        Case Else
           Cop = " " & s & " пфенингов "
        End Select
    Case 4 'фунт
       Cop = " " & s & " пенни "
    Case 5, 6 'у.е., число
        Select Case Right$(s, 1)
        Case "1"
           Cop = " " & s & " сотая "
        Case Else
           Cop = " " & s & " сотых "
        End Select
    Case Else
       Cop = " " & s & " коп. "
    End Select
  
End Function



Propis_Руб = Format$(R_Sum, "00") & Result ----> Вот на эту строчку, и на оператор "Format$" ругается
В VBA это выделено большим количеством пустых строк

Вот что написано в поле формы

Код: vbnet
1.
2.
="Общая сумма по договору: с " & [Дата договора начало] & " года по " & [Дата договора конец] & _
" года составляет " & CStr(Int([Сумм_Год])) & " руб. " & Propis_Руб([Сумм_Год];1) & " (" & JS_Num2Str([Сумм_Год]) & ")"



Если у кого-то есть более простой вариант суммы прописью, буду признателен.
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40025682
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в окне отладки, что выдает?
Код: vbnet
1.
? Num2Str(100)
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40025685
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005
Propis_Руб = Format$(R_Sum, "00") & Result ----> Вот на эту строчку, и на оператор "Format$" ругается
когда "ругается" на стандартную функцию - это "битый" рэфэренс, к гадалке не ходи
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40025703
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005

Если у кого-то есть более простой вариант суммы прописью, буду признателен.
Пользую очень давно-все удовлетворяет.
"Допилите" под наименование валюты(отдельное поле таблицы)сами
В сети подобных примеров тьма
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
Public Function TextSum(numSum As Variant) As String
w$ = Round(numSum, 2) 'Входное число - tekst tipа "123.45",защита
'"от дурака" не сделана
'выделение рублей в записи числа и удаление левых пробелов
rubli$ = LTrim$(Left$(Str(Val(w$) * 100), _
Len(Str(Val(w$) * 100)) - 2))
cop$ = RTrim$(Right$(Str(CDbl(w$) * 100), 2)) 'выделение дробной части
'числа и удаление правых пробелов

Do While Len(rubli$) < 9
rubli$ = "0" & rubli$
Loop
res$ = ""
For i% = 1 To 3
trojka$ = Mid$(rubli$, 3 * i% - 2, 3)
Call Num3(trojka$, i%) ' Вызов функции формирования gotovoй тройки,
'tipа "123 тысячи"
res$ = res$ & trojka$ ' Накопление таких троек
Next i%
'res$ = UCase$(Left$(res$, 1)) & Right$(res$, Len(res$) - 1) 'Запись
'первой буквы res$ в верхнем регистре

c$ = " коп." ' Блок добавления копеек
If (Right$(cop$, 1) = "1" And Left$(cop$, 1) <> "1") Then c$ = _
" коп."
If ((Right$(cop$, 1) = "2" Or Right$(cop$, 1) = "3" Or _
Right$(cop$, 1) = "4") And Left$(cop$, 1) <> "1") Then _
c$ = " коп."
If Left(res$, 1) <> "Р" Then res$ = res$ & cop$ & c$ Else _
res$ = cop$ & c$

TextSum = res$ ' Выход tekstа
End Function


Public Function Num3(trojka$, i%)
Dim sl$(1 To 3, 0 To 3)
sl$(1, 1) = "миллион "
sl$(2, 1) = "тысяча "
sl$(3, 1) = "рубль "
'-
sl$(1, 2) = "миллиона "
sl$(2, 2) = "тысячи "
sl$(3, 2) = "рубля "
'-
sl$(1, 3) = "миллионов "
sl$(2, 3) = "тысяч "
sl$(3, 3) = "рублей "
sl$(3, 0) = "рублей "
'-
ed$ = Right$(trojka$, 1)
des$ = Mid$(trojka$, 2, 1)
sot$ = Left$(trojka$, 1)
'-
If ed$ = "0" Then r3$ = ""
If ed$ = "1" Then If i% = 2 Then r3$ = "одна " Else r3$ = "один "
If ed$ = "2" Then If i% = 2 Then r3$ = "две " Else r3$ = "два "
If ed$ = "3" Then r3$ = "три "
If ed$ = "4" Then r3$ = "четыре "
If ed$ = "5" Then r3$ = "пять "
If ed$ = "6" Then r3$ = "шесть "
If ed$ = "7" Then r3$ = "семь "
If ed$ = "8" Then r3$ = "восемь "
If ed$ = "9" Then r3$ = "девять "
'-
If des$ = "0" Then r2$ = ""
s$ = des$ & ed$
If s$ = "10" Then r3$ = "десять "
If s$ = "11" Then r3$ = "одиннадцать "
If s$ = "12" Then r3$ = "двенадцать "
If s$ = "13" Then r3$ = "тринадцать "
If s$ = "14" Then r3$ = "четырнадцать "
If s$ = "15" Then r3$ = "пятнадцать "
If s$ = "16" Then r3$ = "шестнадцать "
If s$ = "17" Then r3$ = "семнадцать "
If s$ = "18" Then r3$ = "восемнадцать "
If s$ = "19" Then r3$ = "девятнадцать "
'-
If des$ = "2" Then r2$ = "двадцать "
If des$ = "3" Then r2$ = "тридцать "
If des$ = "4" Then r2$ = "сорок "
If des$ = "5" Then r2$ = "пятьдесят "
If des$ = "6" Then r2$ = "шестьдесят "
If des$ = "7" Then r2$ = "семьдесят "
If des$ = "8" Then r2$ = "восемьдесят "
If des$ = "9" Then r2$ = "девяносто "
'-
If sot$ = "0" Then r1$ = ""
If sot$ = "1" Then r1$ = "сто "
If sot$ = "2" Then r1$ = "двести "
If sot$ = "3" Then r1$ = "триста "
If sot$ = "4" Then r1$ = "четыреста "
If sot$ = "5" Then r1$ = "пятьсот "
If sot$ = "6" Then r1$ = "шестьсот "
If sot$ = "7" Then r1$ = "семьсот "
If sot$ = "8" Then r1$ = "восемьсот "
If sot$ = "9" Then r1$ = "девятьсот "
'-
If trojka$ <> "000" Then j% = (-1) * CInt(ed$ = "1" And des$ <> "1") _
+ (-2) * CInt((ed$ = "2" Or ed$ = "3" Or ed$ = "4") And des$ <> "1")
If j% = 0 And trojka$ <> "000" Then j% = 3
trojka$ = r1$ & r2$ & r3$ & sl$(i%, j%) 'формирование тройки цифр и
'слова,например-"123 тысячи"
End Function

...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40025958
Wawan2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubucha,

Выдаёт "Can`t find project or library"
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40025985
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005
bubucha,

Выдаёт "Can`t find project or library"

Ну так Court уже писал же - иди смотри references...... Они в tools.... Там будет что-то начинающееся с Missing - вот его надо найти где-то(на компе где работает например) и зарегить через reg32svr
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40026000
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wawan2005,
Сделать код покороче, оптимизировать не хотите? С просторов:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Function MSumProp$(chislo#) 'Автор MCH (Михаил Ч.), май 2012, http://www.excelworld.ru/forum/3-9902-1
    Dim rub$, kop$, ed, des, sot, nadc, razr, i&, m$
    If chislo >= 1E+15 Or chislo < 0 Then Exit Function
    
    sot = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
    des = Array("", "", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
    nadc = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
    ed = Array("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ", "", "одна ", "две ")
    razr = Array("триллион ", "триллиона ", "триллионов ", "миллиард ", "миллиарда ", "миллиардов ", "миллион ", "миллиона ", "миллионов ", "тысяча ", "тысячи ", "тысяч ", "рубль ", "рубля ", "рублей ")
    
    rub = Left(Format(chislo, "000000000000000.00"), 15)
    kop = Right(Format(chislo, "0.00"), 2)
    If CDbl(rub) = 0 Then m = "ноль "
    For i = 1 To Len(rub) Step 3
        If Mid(rub, i, 3) <> "000" Or i = Len(rub) - 2 Then
            m = m & sot(CInt(Mid(rub, i, 1))) & IIf(Mid(rub, i + 1, 1) = "1", nadc(CInt(Mid(rub, i + 2, 1))), _
                    des(CInt(Mid(rub, i + 1, 1))) & ed(CInt(Mid(rub, i + 2, 1)) + IIf(i = Len(rub) - 5 And CInt(Mid(rub, i + 2, 1)) < 3, 10, 0))) & _
                    IIf(Mid(rub, i + 1, 1) = "1" Or (Mid(rub, i + 2, 1) + 9) Mod 10 >= 4, razr(i + 1), IIf(Mid(rub, i + 2, 1) = "1", razr(i - 1), razr(i)))
        End If
    Next i
    MSumProp = UCase(Left(m, 1)) & Mid(m, 2) & kop & " копе" & IIf(kop \ 10 = 1 Or ((kop + 9) Mod 10) >= 4, "ек", IIf(kop Mod 10 = 1, "йка", "йки"))
End Function
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40026036
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Сделать код покороче...

это лечит бытые references?
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40026186
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubucha
Сергей Лалов
Сделать код покороче...

это лечит бытые references?


Не только референсы.. а ещё ангину, педикулез, гонорею и эбола..
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40026271
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
bubucha
пропущено...

это лечит бытые references?


Не только референсы.. а ещё ангину, педикулез, гонорею и эбола..


а КОВИД????????
...
Рейтинг: 0 / 0
Ошибка в коде не могу разобраться.
    #40026371
DarkMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИВП
а КОВИД????????
не излечИм.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка в коде не могу разобраться.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]