Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сумма прописью в Word - Как допилить? - Мир MS Excel

Старая форма входа
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Word » Сумма прописью в Word - Как допилить? (Word)
Сумма прописью в Word - Как допилить?
Alex_ST Дата: Понедельник, 28.10.2013, 15:26 | Сообщение № 1
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Народ, тут понадобилось договора писать, а там сумма прописью...
Можно было бы, конечно, и имеющимися наработками для Excel'я воспользоваться, но я у себя в копилке нашёл, что числа до 999999 можно в текст прямо Вордом перегонять (например, здесь, здесь, здесь, ...).
Решил попробовать.
Вот что примерно получилось:[vba]
Код
Sub SumPropWord()
       With Selection
          '.Range.Text = Replace(.Range.Text, " ", "")
          .Fields.Add .Range, Type:=wdFieldEmpty, Text:="=" & .Range.Text & " \*CardText", PreserveFormatting:=False
          .Fields.Update
       End With
End Sub
[/vba]
И всё бы, наверное, и ничего, да вот только триады цифр в документе для читабельности обычно разбиваются пробелом. А с пробелами не пашет.
Попытался тупо заменить пробел на "пустышку" Replace'ом в Selection.Range.Text - не вышло - макрос стал давать ошибку в формуле...
Я объектную модель Ворда практически не знаю. Тыкаю почти наугад по аналогии с Excel'ем :(
Конечно, идеалом было бы допилить макрос так, чтобы он ПОСЛЕ (а не ВМЕСТО) выделенного числа выдавал его же прописью, но это уже не так важно.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 28.10.2013, 16:33
 
Ответить
СообщениеНарод, тут понадобилось договора писать, а там сумма прописью...
Можно было бы, конечно, и имеющимися наработками для Excel'я воспользоваться, но я у себя в копилке нашёл, что числа до 999999 можно в текст прямо Вордом перегонять (например, здесь, здесь, здесь, ...).
Решил попробовать.
Вот что примерно получилось:[vba]
Код
Sub SumPropWord()
       With Selection
          '.Range.Text = Replace(.Range.Text, " ", "")
          .Fields.Add .Range, Type:=wdFieldEmpty, Text:="=" & .Range.Text & " \*CardText", PreserveFormatting:=False
          .Fields.Update
       End With
End Sub
[/vba]
И всё бы, наверное, и ничего, да вот только триады цифр в документе для читабельности обычно разбиваются пробелом. А с пробелами не пашет.
Попытался тупо заменить пробел на "пустышку" Replace'ом в Selection.Range.Text - не вышло - макрос стал давать ошибку в формуле...
Я объектную модель Ворда практически не знаю. Тыкаю почти наугад по аналогии с Excel'ем :(
Конечно, идеалом было бы допилить макрос так, чтобы он ПОСЛЕ (а не ВМЕСТО) выделенного числа выдавал его же прописью, но это уже не так важно.

Автор - Alex_ST
Дата добавления - 28.10.2013 в 15:26
Poltava Дата: Понедельник, 28.10.2013, 18:31 | Сообщение № 2
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

У меня такая конструкция срабатывает нормально
[vba]
Код
Text:="=" & Replace(.Range.Text, " ", "") & " \*CardText"
[/vba]
А вот со вставкой после пока ничего не придумал сам с вердом на Вы
 
Ответить
СообщениеУ меня такая конструкция срабатывает нормально
[vba]
Код
Text:="=" & Replace(.Range.Text, " ", "") & " \*CardText"
[/vba]
А вот со вставкой после пока ничего не придумал сам с вердом на Вы

Автор - Poltava
Дата добавления - 28.10.2013 в 18:31
Alex_ST Дата: Понедельник, 28.10.2013, 21:04 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Poltava, спасибо за совет и попытку помочь.
А со вставкой после подождём, может быть кто-нибудь из более продвинутых в Ворде чем мы откликнется.
А то, глядишь, и сумму прописью от МСН прикрутим чтобы снять ограничения



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 29.10.2013, 14:40
 
Ответить
СообщениеPoltava, спасибо за совет и попытку помочь.
А со вставкой после подождём, может быть кто-нибудь из более продвинутых в Ворде чем мы откликнется.
А то, глядишь, и сумму прописью от МСН прикрутим чтобы снять ограничения

Автор - Alex_ST
Дата добавления - 28.10.2013 в 21:04
RAN Дата: Вторник, 29.10.2013, 05:15 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Леш, может я что не так понял?
[vba]
Код
Sub SumPropWord()
    Dim aa#
     With Selection
         aa = CDbl(Replace(Replace(.Range.Text, Chr(160), ""), " ", ""))
         .Range.Text = .Range.Text & " " & MSumProp(aa)
     End With
End Sub
Function MSumProp$(chislo#) 'Автор MCH (Михаил Ч.), май 2012
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
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЛеш, может я что не так понял?
[vba]
Код
Sub SumPropWord()
    Dim aa#
     With Selection
         aa = CDbl(Replace(Replace(.Range.Text, Chr(160), ""), " ", ""))
         .Range.Text = .Range.Text & " " & MSumProp(aa)
     End With
End Sub
Function MSumProp$(chislo#) 'Автор MCH (Михаил Ч.), май 2012
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
[/vba]

Автор - RAN
Дата добавления - 29.10.2013 в 05:15
anvg Дата: Вторник, 29.10.2013, 05:52 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Видимо хочется средствами Word осуществить перевод числа в сумму прописью.
[vba]
Код

Public Sub test3()
      Dim pReg As Object
      Dim numField As Field
      Dim numText As String
        
      If Selection.Characters.Count > 1 Then
          Set pReg = CreateObject("VBScript.RegExp")
          pReg.Global = True: pReg.Pattern = "[^\d]+"
          numText = pReg.Replace(Selection.Text, "")
          If Len(numText) > 0 Then
              Selection.MoveRight Count:=1
              Selection.TypeText " "
              Set numField = Selection.Fields.Add(Selection.Range, wdFieldEmpty, "=" & numText & "\*CardText", False)
              numField.Update
          End If
      End If
End Sub
[/vba]


Сообщение отредактировал anvg - Вторник, 29.10.2013, 05:53
 
Ответить
СообщениеВидимо хочется средствами Word осуществить перевод числа в сумму прописью.
[vba]
Код

Public Sub test3()
      Dim pReg As Object
      Dim numField As Field
      Dim numText As String
        
      If Selection.Characters.Count > 1 Then
          Set pReg = CreateObject("VBScript.RegExp")
          pReg.Global = True: pReg.Pattern = "[^\d]+"
          numText = pReg.Replace(Selection.Text, "")
          If Len(numText) > 0 Then
              Selection.MoveRight Count:=1
              Selection.TypeText " "
              Set numField = Selection.Fields.Add(Selection.Range, wdFieldEmpty, "=" & numText & "\*CardText", False)
              numField.Update
          End If
      End If
End Sub
[/vba]

Автор - anvg
Дата добавления - 29.10.2013 в 05:52
AndreTM Дата: Вторник, 29.10.2013, 06:25 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Ну, понятное дело, что средствами Word. Можно и чистыми:
[vba]
Код
With Selection
     .MoveStartWhile "0123456789 " & Chr(160), wdBackward
     .MoveEndWhile "0123456789 " & Chr(160), wdForward
     nValue1 = Val(Replace(Replace(.Text, " ", ""), Chr(160), ""))
      
     nShift = .MoveEndWhile("0123456789.,-=", wdForward)
     nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift - 1)), 0)
     .Start = .End
     .TypeText " ("
     .Fields.Add .Range, wdFieldEmpty, "=" & nValue1 & " \* CardText \* FirstCap", True
     .TypeText " руб. " & Format(nValue2, "00") & " коп.)"
End With
[/vba] :D


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНу, понятное дело, что средствами Word. Можно и чистыми:
[vba]
Код
With Selection
     .MoveStartWhile "0123456789 " & Chr(160), wdBackward
     .MoveEndWhile "0123456789 " & Chr(160), wdForward
     nValue1 = Val(Replace(Replace(.Text, " ", ""), Chr(160), ""))
      
     nShift = .MoveEndWhile("0123456789.,-=", wdForward)
     nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift - 1)), 0)
     .Start = .End
     .TypeText " ("
     .Fields.Add .Range, wdFieldEmpty, "=" & nValue1 & " \* CardText \* FirstCap", True
     .TypeText " руб. " & Format(nValue2, "00") & " коп.)"
End With
[/vba] :D

Автор - AndreTM
Дата добавления - 29.10.2013 в 06:25
Fairuza Дата: Вторник, 29.10.2013, 10:46 | Сообщение № 7
Группа: Проверенные
Ранг: Участник
Сообщений: 57
Репутация: 13 ±
Замечаний: 0% ±

А если пробел заменить на неразрывный пробел, тогда код поля \*CardText работает
 
Ответить
СообщениеА если пробел заменить на неразрывный пробел, тогда код поля \*CardText работает

Автор - Fairuza
Дата добавления - 29.10.2013 в 10:46
Alex_ST Дата: Вторник, 29.10.2013, 13:26 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Народ, спасибо за отзывы.
К сожалению, уже опять меня настиг завал на работе и разбираться совершенно некогда.
А внутренние средства Ворда я для того применил, т.к. была задумка чтобы сумма прописью вводилась макросом как поле, вычисляемое по сумме цифрами, которую можно было бы потом спокойно изменять в ручную (ну как у нас, нормальных :) в Excel'e формула, использующая UDF).

Хотя всё-таки не удержался и проверил вариант от RAN
Андрей! Спасибо большое. Отлично работает!



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНарод, спасибо за отзывы.
К сожалению, уже опять меня настиг завал на работе и разбираться совершенно некогда.
А внутренние средства Ворда я для того применил, т.к. была задумка чтобы сумма прописью вводилась макросом как поле, вычисляемое по сумме цифрами, которую можно было бы потом спокойно изменять в ручную (ну как у нас, нормальных :) в Excel'e формула, использующая UDF).

Хотя всё-таки не удержался и проверил вариант от RAN
Андрей! Спасибо большое. Отлично работает!

Автор - Alex_ST
Дата добавления - 29.10.2013 в 13:26
Alex_ST Дата: Вторник, 29.10.2013, 13:36 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
AndreTM,
на строке [vba]
Код
nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift - 1)), 0)
[/vba]даёт инвалид-аргумент при выделенном 123456 на листе :(
[offtop]А объектную модель-то Ворда, оказывается кто-то всё-таки знает...
Столько абсолютно ничего не говорящих мне свойств, методов и параметров в коде![/offtop]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 29.10.2013, 13:36
 
Ответить
СообщениеAndreTM,
на строке [vba]
Код
nValue2 = IIf(nShift > 0, Val(Right(.Text, nShift - 1)), 0)
[/vba]даёт инвалид-аргумент при выделенном 123456 на листе :(
[offtop]А объектную модель-то Ворда, оказывается кто-то всё-таки знает...
Столько абсолютно ничего не говорящих мне свойств, методов и параметров в коде![/offtop]

Автор - Alex_ST
Дата добавления - 29.10.2013 в 13:36
Alex_ST Дата: Вторник, 29.10.2013, 16:28 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Выдалась минутка поковыряться с вариантом, предложенным RAN
Решил, что число прописью лучше вставлять в буфер обмена, а уж пользователь сам потом будет решать, рубли там или юани и куда их вставлять.
Вот что получилось:



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 29.10.2013, 16:29
 
Ответить
СообщениеВыдалась минутка поковыряться с вариантом, предложенным RAN
Решил, что число прописью лучше вставлять в буфер обмена, а уж пользователь сам потом будет решать, рубли там или юани и куда их вставлять.
Вот что получилось:

Автор - Alex_ST
Дата добавления - 29.10.2013 в 16:28
Alex_ST Дата: Вторник, 29.10.2013, 17:04 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Хотя, с буфером обмена - это, пожалуй, лишнее.
Лучше будет в скобочках после выделения выводить так:
[vba]
Код
Sub Прописью()   'цифры из выделенного текста перевести в число прописью
     Dim NNN
     With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\D": NNN = .Replace(Selection.Range.Text, ""): End With
     If Len(NNN) Then Selection.MoveRight Unit:=wdWord: Selection.Range.Text = " (" & СУМ_ПРОП(NNN) & ") "
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 29.10.2013, 17:19
 
Ответить
СообщениеХотя, с буфером обмена - это, пожалуй, лишнее.
Лучше будет в скобочках после выделения выводить так:
[vba]
Код
Sub Прописью()   'цифры из выделенного текста перевести в число прописью
     Dim NNN
     With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\D": NNN = .Replace(Selection.Range.Text, ""): End With
     If Len(NNN) Then Selection.MoveRight Unit:=wdWord: Selection.Range.Text = " (" & СУМ_ПРОП(NNN) & ") "
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 29.10.2013 в 17:04
RAN Дата: Вторник, 29.10.2013, 21:36 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Економный ты наш!
Я понимаю, что тут все преобразуется
[vba]
Код
NNN = CDbl(...
[/vba]
Но что, сразу написать
[vba]
Код
Dim NNN#
[/vba]
так сильно влом?

Из опыта - долго искал (в большом макросе), почему не работает. Оказалось - преобразовывает не правильно.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Вторник, 29.10.2013, 21:38
 
Ответить
СообщениеЕкономный ты наш!
Я понимаю, что тут все преобразуется
[vba]
Код
NNN = CDbl(...
[/vba]
Но что, сразу написать
[vba]
Код
Dim NNN#
[/vba]
так сильно влом?

Из опыта - долго искал (в большом макросе), почему не работает. Оказалось - преобразовывает не правильно.

Автор - RAN
Дата добавления - 29.10.2013 в 21:36
AndreTM Дата: Вторник, 29.10.2013, 22:18 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
инвалид-аргумент при выделенном 123456 на листе
А если не выделять ничего? Просто курсор поставить "посреди" числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число (и ещё обычно при ручном выделении дефолтный Expand срабатывает, расширяя область выделения по своему разумению).

По ошибке - это Word VBA, гад, всё равно считает в Left(,-1) в IIF() ... можно сделать
[vba]
Код
     nValue2 = 0
      If nShift > 1 Then nValue2 = Val(Right(.Text, nShift - 1))
[/vba]

Что касается "сумма вводилась как поле" - она и так вводится в поле. Поэтому, кстати, исходный вариант и предполагал замену текста полем, чтобы число оставалось единственным. А чтобы можно было "менять сумму", не заходя в поле - надо либо текст преобразовать в поле с меткой (закладкой), на которую потом будет ссылаться сумма прописью, либо отслеживать изменение текста и перезаписывать/пересоздавать поле с прописью.
Ещё хочу заметить - .MoveRight Unit:=wdWord сдвинет точку ввода хоть и на конец цифр - но там может стоять разделитель :) Например, сумма записана (как это любят бухи) "123456=00" - тогда что? Да и число может быть "Ноль" (например, остаток суммы оплаты)...


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Вторник, 29.10.2013, 22:24
 
Ответить
Сообщение
инвалид-аргумент при выделенном 123456 на листе
А если не выделять ничего? Просто курсор поставить "посреди" числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число (и ещё обычно при ручном выделении дефолтный Expand срабатывает, расширяя область выделения по своему разумению).

По ошибке - это Word VBA, гад, всё равно считает в Left(,-1) в IIF() ... можно сделать
[vba]
Код
     nValue2 = 0
      If nShift > 1 Then nValue2 = Val(Right(.Text, nShift - 1))
[/vba]

Что касается "сумма вводилась как поле" - она и так вводится в поле. Поэтому, кстати, исходный вариант и предполагал замену текста полем, чтобы число оставалось единственным. А чтобы можно было "менять сумму", не заходя в поле - надо либо текст преобразовать в поле с меткой (закладкой), на которую потом будет ссылаться сумма прописью, либо отслеживать изменение текста и перезаписывать/пересоздавать поле с прописью.
Ещё хочу заметить - .MoveRight Unit:=wdWord сдвинет точку ввода хоть и на конец цифр - но там может стоять разделитель :) Например, сумма записана (как это любят бухи) "123456=00" - тогда что? Да и число может быть "Ноль" (например, остаток суммы оплаты)...

Автор - AndreTM
Дата добавления - 29.10.2013 в 22:18
RAN Дата: Вторник, 29.10.2013, 22:33 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Интересная тема, жаль не вовремя (для меня) начатая. :(
Не забыть-бы, когда понадобиться.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИнтересная тема, жаль не вовремя (для меня) начатая. :(
Не забыть-бы, когда понадобиться.

Автор - RAN
Дата добавления - 29.10.2013 в 22:33
Alex_ST Дата: Вторник, 29.10.2013, 23:04 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Андрей,
я специально сделал NNN безразмерным чтобы потом ему же можно было присваивать и текстовые значения:[vba]
Код
NNN = IIf(Err, Err.Description, СУМ_ПРОП(NNN)
[/vba]
Да и вообще я потом по-другому сделал без обработчика ошибок.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеАндрей,
я специально сделал NNN безразмерным чтобы потом ему же можно было присваивать и текстовые значения:[vba]
Код
NNN = IIf(Err, Err.Description, СУМ_ПРОП(NNN)
[/vba]
Да и вообще я потом по-другому сделал без обработчика ошибок.

Автор - Alex_ST
Дата добавления - 29.10.2013 в 23:04
Alex_ST Дата: Вторник, 29.10.2013, 23:08 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Не забыть-бы, когда понадобиться
А ты на ус намотай (или на хвост) :)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Не забыть-бы, когда понадобиться
А ты на ус намотай (или на хвост) :)

Автор - Alex_ST
Дата добавления - 29.10.2013 в 23:08
RAN Дата: Среда, 30.10.2013, 01:00 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
На бедный хвост уже столько намотано. :D
сравни
http://www.excelworld.ru/forum/10-6664-1#64918
и
http://www.excelworld.ru/forum/5-6668-1


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНа бедный хвост уже столько намотано. :D
сравни
http://www.excelworld.ru/forum/10-6664-1#64918
и
http://www.excelworld.ru/forum/5-6668-1

Автор - RAN
Дата добавления - 30.10.2013 в 01:00
Alex_ST Дата: Среда, 30.10.2013, 09:27 | Сообщение № 18
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
А если не выделять ничего? Просто курсор поставить "посреди" числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число
Андрей, как раз этот вариант скорее всего не прокатит, т.к. бухгалтеры чаще всего цифры разделяют пробелами на триады.
Тогда в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333, в пропись будет преобразовано только 222.
Так что как раз пользователь и должен напрячь чуть-чуть извилины и выделить именно всё то, что он хочет преобразовать.
В моём крайнем примере регулярка как раз это и делает - из выделенного фрагмента удаляет все символы кроме цифр.

Ну а по поводу
Например, сумма записана (как это любят бухи) "123456=00" - тогда что?
так такое же на практике не может понадобиться никогда (ну не придёт же в голову никому переводить в пропись формулы).



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
А если не выделять ничего? Просто курсор поставить "посреди" числа?
Я больше ориентировался на то, чтобы не заставлять пользователя выделять число
Андрей, как раз этот вариант скорее всего не прокатит, т.к. бухгалтеры чаще всего цифры разделяют пробелами на триады.
Тогда в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333, в пропись будет преобразовано только 222.
Так что как раз пользователь и должен напрячь чуть-чуть извилины и выделить именно всё то, что он хочет преобразовать.
В моём крайнем примере регулярка как раз это и делает - из выделенного фрагмента удаляет все символы кроме цифр.

Ну а по поводу
Например, сумма записана (как это любят бухи) "123456=00" - тогда что?
так такое же на практике не может понадобиться никогда (ну не придёт же в голову никому переводить в пропись формулы).

Автор - Alex_ST
Дата добавления - 30.10.2013 в 09:27
AndreTM Дата: Среда, 30.10.2013, 15:48 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333
Пробовал? Что получилось? (Вернее, что не получилось? И что при этом за число оказалось в коде поля?) yes

не придёт же в голову никому переводить в пропись формулы
hands То есть? Вот передо мною лежит договор аренды:
Цитата
... всего в сумме 12489=00 (Двенадцать тысяч четыреста восемьдесят девять рублей 00 копеек) ежемесячно, включая НДС...
Это формула? Этого не существует, ибо такой текст невозможен?


Skype: andre.tm.007
Donate: Qiwi: 9517375010


Сообщение отредактировал AndreTM - Среда, 30.10.2013, 15:58
 
Ответить
Сообщение
в Вашем варианте при курсоре, стоящем между двоек в числе, например, 111 222 333
Пробовал? Что получилось? (Вернее, что не получилось? И что при этом за число оказалось в коде поля?) yes

не придёт же в голову никому переводить в пропись формулы
hands То есть? Вот передо мною лежит договор аренды:
Цитата
... всего в сумме 12489=00 (Двенадцать тысяч четыреста восемьдесят девять рублей 00 копеек) ежемесячно, включая НДС...
Это формула? Этого не существует, ибо такой текст невозможен?

Автор - AndreTM
Дата добавления - 30.10.2013 в 15:48
Alex_ST Дата: Среда, 30.10.2013, 19:22 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3197
Репутация: 606 ±
Замечаний: 0% ±

2003
Пробовал? Что получилось?
Не пробовал, т.к. выяснилось, что 999 999 всё равно мало.
А должно было получиться? Ну ты бы хоть полный текст процедуры выложил тогда, а не фрагмент чтобы его можно было просто не заморачиваясь началом и концом процедуры проверить.

…в сумме 12489=00
??? Это что, у вас в бюстгалтерии так принято: вместо запятой в качестве разделителя рублей и копеек = использовать?
Уж сколько разных договоров из разных мест видел, а такого - нет!



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 30.10.2013, 19:23
 
Ответить
Сообщение
Пробовал? Что получилось?
Не пробовал, т.к. выяснилось, что 999 999 всё равно мало.
А должно было получиться? Ну ты бы хоть полный текст процедуры выложил тогда, а не фрагмент чтобы его можно было просто не заморачиваясь началом и концом процедуры проверить.

…в сумме 12489=00
??? Это что, у вас в бюстгалтерии так принято: вместо запятой в качестве разделителя рублей и копеек = использовать?
Уж сколько разных договоров из разных мест видел, а такого - нет!

Автор - Alex_ST
Дата добавления - 30.10.2013 в 19:22
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Word » Сумма прописью в Word - Как допилить? (Word)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!