Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2019, 07:38   #1
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию Не работает Application.Evaluate

Здравствуйте,

Есть калькулятор выражений. Код работает в excel. Но в MS Word не работает так как в Word нет метода Application.evaluate.

Нужна помощь с поиском аналога данного метода в Word..


Код:
Private Sub TextBox1_Change()

    Dim strExpr As String, p As Long, ss As String, qwer As String, i As Integer, a
    On Error Resume Next
    strExpr = TextBox1.Value
    Do
        p = InStr(strExpr, ",")
        If p = 0 Then Exit Do Else strExpr = Left(strExpr, p - 1) & "." & Mid(strExpr, p + 1)
    Loop
    If strExpr = Empty Then
        Label3.Caption = "": Label1.Caption = ""
    Else
        Label3.Caption = Application.Evaluate(strExpr)
        a = Split(Label3.Caption, ",")
        qwer = StrReverse(a(0))
        For i = 1 To Len(qwer)
            If i Mod 3 = 0 Then ss = ss & Mid(qwer, i, 1) & " " _
                Else ss = ss & Mid(qwer, i, 1)
        Next
        Label1.Caption = StrReverse(ss): ss = ""
        If UBound(a) > 0 Then Label1.Caption = Label1.Caption & "," & a(1)
    End If
 
End Sub
Ругается на эту строчку:

Код:
Label3.Caption = Application.Evaluate(strExpr)
Заменил эту строчку на:

Код:
Selection=strExpr
Label3.Caption = Selection.Calculate(strExpr)
но, при этом математическое выражение написанное внутри TextBox1 пишется/копируется в документ Word...
Mint86 вне форума Ответить с цитированием
Старый 30.07.2019, 09:17   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

запустите Excel посчитайте в нем
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.07.2019, 10:57   #3
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

А без запуска экземпляра Excel есть варианты решения?
Selection.Calculate возвращает значение Single что также не подходит...
Может формулу поля вставлять?
Mint86 вне форума Ответить с цитированием
Старый 30.07.2019, 19:23   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А в чём сложность запустить в фоне невидимый Excel, и использовать его для вычислений?
на производительности практически не скажется
требует всего 2 дополнительных строк кода (создать экземляр, и уничтожить его)

не думаю, что что-то аналогичное есть в Word, - всё-таки, он для других задач создавался..
EducatedFool вне форума Ответить с цитированием
Старый 30.07.2019, 22:37   #5
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

Подскажите, можно ли сделать это (запуск экземпляра excel) без подключения в tools/references?

После создания экземпляра excel необходимо использовать конструкцию вида:
Excel.Application.Evaluate ?

Нужно ли обработать ошибку отсутствия на машине установленного Excel? Или не имеет значения установлен excel или нет..?
Mint86 вне форума Ответить с цитированием
Старый 30.07.2019, 23:18   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

до этого только Чаку Норрису удавалось выполнить приложение не установленное на компьютере

кто кроме Вас знает нужно или не нужно проверять все это на любые ошибки?
нужно - проверяйте
не нужно - забейте на проверку
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 31.07.2019, 10:46   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

ну вот как-то так я бы сделал:

Код:
Sub ToBeRunOutOfMSWord()
    
    Dim XL As Object: Set XL = CreateObject("Excel.Application")
    If XL Is Nothing Then MsgBox "Excel не установлен на этом компе": Exit Sub
    
    txt = "2+2*2"
    res = XL.Evaluate(txt)
    MsgBox txt & " = " & res
    
    XL.Quit: Set XL = Nothing
    
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 31.07.2019, 13:05   #8
Mint86
Пользователь
 
Аватар для Mint86
 
Регистрация: 17.07.2008
Сообщений: 81
По умолчанию

EducatedFool, IgorGO
Спасибо!
Mint86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с аналогом метода Application.evaluate в ms word Mint86 Microsoft Office Word 0 29.07.2019 10:25
Не работает Evaluate в VBA for MSWord aNJay Microsoft Office Word 7 24.12.2012 22:35
Не работает в MS Excel 2007 Application.FileSearch Riser28 Microsoft Office Excel 17 08.09.2011 13:28
Evaluate как обойти лимит в 255 символов ? bdfy Microsoft Office Word 0 02.04.2011 18:17
Windows Application not responding, когда долго работает цикл serres Общие вопросы .NET 5 18.02.2010 13:45