Добрый день, коллеги!
Есть строка вида: dlin="=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")"
если записываю ее в ячейку: Range("txtDl").FormulaLocal = dlin
то ячейка возвращает результат: 741.
А вот как этот результат получит в коде, без записи в ячейку?
Всем кто откликнется - спасибо!!!
Здравствуйте,
dlin = "=99+N(""Т"")+113+N(""А"")+100+N(""Р"")+113+N(""А"")+44+N("" "")+91+N(""6"")+90+N(""9"")+91+N(""8"")"
Debug.Print Evaluate(dlin)
' или
msgbox Evaluate(dlin)
Огромное спасибо, уважаемый boa!
Не зря говорят: Учи матчасть!
Я попробовал решить вот так:
arrNbr = Split(lngStr, "+", , vbTextCompare)
lngS = 0
j = 0
For j = LBound(arrNbr) To UBound(arrNbr)
If IsNumeric(arrNbr(j)) = True Then
lngS = lngS + arrNbr(j)
End If
Next j
Erase arrNbr
тоже работает, но у вас крсивее!! Да и правильнее!
Да, учить матчасть полезно :)
Ч("текст") = 0
Зачем в формуле эти фрагменты?
Sub SuperFormula()
MsgBox 99 + 113 + 100 + 113 + 44 + 91 + 90 + 91
End Sub
Еще проще MsgBox 741 :)
Цитата: vikttur от 04.06.2019, 09:00
Ч("текст") = 0
Зачем в формуле эти фрагменты?
они нужны для информирования пользователя о составе полученной строки информации. Под Ч("текст") объясняется для какой литеры какое значение размера литерной площадки было взято. Это важно.
Но, вот засада: для конструкции
lngS = Evaluate(lngStr)
выдает ошибку Error 2029 :'(
Цитироватьдля информирования пользователя
Но ведь макрос не покажет этой информации!
MsgBox покажет результат.
Цитироватьдля конструкции...выдает ошибку
Что Вы хотите получить в итоге?
Цитата: vikttur от 04.06.2019, 09:37
Цитироватьдля информирования пользователя
Но ведь макрос не покажет этой информации! MsgBox покажет результат.
Сценарий таков:
Есть несколько строк текста, вводимых в именованный интервал ячеек.
Для каждой строки текста определяем длину по литерным площадкам. Эта информация и содержится в переменной dlin.
Затем нужно вычислить длину dlin = lngS.
Значения dlin и lngS заносим в двумерный массив.
Дальше анализируем массив на наидлиннейшую строку ...
Так вот lngS и не высчитывается. Хотя я ее считаю циклом, выше уже показывал. Но, хотелось бы красиво ;)
Не первый день на форумах... Надо показать пример в файле.
И тема уже поменялась.
Цитата: vikttur от 04.06.2019, 09:55
Не первый день на форумах... Надо показать пример в файле.
И тема уже поменялась.
Еще раз перечел ... Где я про дни на форуме говорил :-\
Тема прежней остается: есть строка: "=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")", ее нужно "посчитать".
Предложенный вариант:
lngStr = "=99+Ч("Т")+113+Ч("А")+100+Ч("Р")+113+Ч("А")+44+Ч(" ")+91+Ч("6")+90+Ч("9")+91+Ч("8")"
lngS = Evaluate(lngStr)
выдает ошибку.
Цитата: GWolf от 04.06.2019, 09:20
выдает ошибку Error 2029 :'(
а не надо использовать русские функции в VBA.
Я же написал вам строку
Цитата: boa от 04.06.2019, 08:28
dlin = "=99+N(""Т"")+113+N(""А"")+100+N(""Р"")+113+N(""А"")+44+N("" "")+91+N(""6"")+90+N(""9"")+91+N(""8"")"
Предложенный вариант работает без ошибок. А Вы двойные кавычки заменили на одинарные.
О днях на форуме. И помощь получите быстрее, и у помогающих меньше времени отнимете, если не будете лениться и пркреплять пример.
Цитата: boa от 04.06.2019, 10:22
а не надо использовать русские функции в VBA.
Спасибо, boa!
Второй раз наступаю на эти грабли!
И уважаемому vikttur всего наилучшего! Тема исследована полностью!