Страницы: 1
RSS
Как убрать "разрушительный сбой" функции в 32-х разрядной версии эксель, Выкладываю код одной из функций, которая работает в 64-х разрядной версии эксель, но не работает на 32-х разрядной версии эксель
 
Всем привет!
Выкладываю код одной из функций, которая работает в 64-х разрядной версии эксель, но выдает  "разрушительный сбой" на 32-х разрядной версии эксель.
Я гуглил о проблеме и так понял это связанно с "option explicit", который прописан в модуле "Эта книга".
Не нашел как адаптироваться если функций в книге несколько.
В общем мне нужно чтобы все мои функции книги работали на обоих версиях экселя
Откликнувшимся большое спасибо!
Код
Function SUMMPROPIS(n As Double) As String
 
 Dim Nums1, Nums2, Nums3, Nums4 As Variant
 
 Nums1 = Array("", "один ", "два ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ")
 Nums2 = Array("", "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", _
                        "восемьдесят ", "девяносто ")
 Nums3 = Array("", "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", _
                        "восемьсот ", "девятьсот ")
 Nums4 = Array("", "одна ", "две ", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ")
 Nums5 = Array("десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", _
                        "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
 
 If n <= 0 Then
   SUMMPROPIS = "ноль"
   Exit Function
 End If
 'разделяем число на разряды, используя вспомогательную функцию Class
 ed = Class(n, 1)
 dec = Class(n, 2)
 sot = Class(n, 3)
 tys = Class(n, 4)
 dectys = Class(n, 5)
 sottys = Class(n, 6)
 mil = Class(n, 7)
 decmil = Class(n, 8)
 
 'проверяем миллионы
 Select Case decmil
   Case 1
     mil_txt = Nums5(mil) & "миллионов "
     GoTo www
   Case 2 To 9
     decmil_txt = Nums2(decmil)
 End Select
 Select Case mil
   Case 1
     mil_txt = Nums1(mil) & "миллион "
   Case 2, 3, 4
     mil_txt = Nums1(mil) & "миллиона "
   Case 5 To 20
     mil_txt = Nums1(mil) & "миллионов "
 End Select
www:
 sottys_txt = Nums3(sottys)
 'проверяем тысячи
 Select Case dectys
   Case 1
     tys_txt = Nums5(tys) & "тысяч "
     GoTo eee
   Case 2 To 9
     dectys_txt = Nums2(dectys)
 End Select
 Select Case tys
   Case 0
     If dectys > 0 Then tys_txt = Nums4(tys) & "тысяч "
   Case 1
     tys_txt = Nums4(tys) & "тысяча "
   Case 2, 3, 4
     tys_txt = Nums4(tys) & "тысячи "
   Case 5 To 9
     tys_txt = Nums4(tys) & "тысяч "
 End Select
 If dectys = 0 And tys = 0 And sottys <> 0 Then sottys_txt = sottys_txt & " тысяч "
eee:
 sot_txt = Nums3(sot)
 'проверяем десятки
 Select Case dec
   Case 1
     ed_txt = Nums5(ed)
     GoTo rrr
   Case 2 To 9
     dec_txt = Nums2(dec)
 End Select
 
 ed_txt = Nums1(ed)
rrr:
 'формируем итоговую строку
 SUMMPROPIS = decmil_txt & mil_txt & sottys_txt & dectys_txt & tys_txt & sot_txt & dec_txt & ed_txt
End Function

'вспомогательная функция для выделения из числа разрядов
Private Function Class(M, I)
  Class = Int(Int(M - (10 ^ I) * Int(M / (10 ^ I))) / 10 ^ (I - 1))
End Function
 
Цитата
Сергей Юрьевич написал:
так понял это связанно с "option explicit", который прописан в модуле "Эта книга".
с этим это не связано, ищите проблему в установленной версии офиса.
По вопросам из тем форума, личку не читаю.
 
Обычно сбой 32 и 64 версий связан с вызовами WinAPI функций, у вас этого в файле нет и все ваши функции должны нормально работать во всех Excel.
1. Надо определиться в какой именно функции происходит сбой, а то в вашем файле 2 функции и процедура
2. надо определиться на какой строке происходит ошибка, тогда легче решить вашу проблему
3. Option Explicit вообще не имеет отношения к ошибкам. Вы можете просто удалить эту строку везде, где она вам не нравится
Изменено: New - 22.08.2021 18:14:49
Страницы: 1
Наверх