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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2012, 00:20   #1
aNJay
 
Регистрация: 22.12.2012
Сообщений: 7
По умолчанию Не работает Evaluate в VBA for MSWord

Даже банальный
Код:
Private Sub CommandButton1_Click()
    TextBox1.Text = Evaluate("1+2")
End Sub
приводит к ошибке "sub or function not defined".
В Excel етот же код работает без проблем. Не пойму что не так.
aNJay вне форума Ответить с цитированием
Старый 23.12.2012, 11:18   #2
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Все очень просто.
Evaluate - это процедура типа, которая находится только в приложении Excel.
Она относится как его объекту Application, так и к некоторым объектам, подчиненным Application. В объектной модели Word процедуры Evaluate нет, поэтому выдается ошибка. Но есть несколько вариантов решения проблемы.
Пименов Александр вне форума Ответить с цитированием
Старый 23.12.2012, 12:35   #3
aNJay
 
Регистрация: 22.12.2012
Сообщений: 7
По умолчанию

Спасибо за ответ. Я так и подозревал.
Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
Но есть несколько вариантов решения проблемы.
А можно в етом месте поподробнее.
aNJay вне форума Ответить с цитированием
Старый 23.12.2012, 14:04   #4
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

1. Подключите к Вашему проекту объект Excel, для этого:
  • Выделите в редакторе VBA Ваш проект.
  • Откройте в редакторе VBA диалоговое окно Tools-->References.
  • Поставьте галочку на объекте Microsoft Excel.
2. В модуле кода формы создайте функцию Evaluate:
Код:
Public Function Evaluate(Text As String)
Dim xlApp As Excel.Application
    Set xlApp = New Excel.Application ' Создаем новый обект Excel.Application
        xlApp.Visible = False ' Делаем Excel.Application невидимым
        Evaluate = xlApp.Evaluate(Text) ' Присваиваем функции Evaluate значение xlApp.Evaluate(Text)
        '  где Text текстовое выражение
        xlApp.Quit ' Закрываем обект Excel.Application
End Function
Тогда Ваш код:
Код:
Private Sub CommandButton1_Click()
    TextBox1.Text = Evaluate("1+2")
End Sub
будет работать.
3. Если Вы хотите чтобы функция Evaluate работа и в других модулях проекта, разместите ее в отдельном модуле, например в модуле Module1, тогда код для кнопки CommandButton1 будет выглядеть так:
Код:
Private Sub CommandButton1_Click()
    TextBox1.Text = Module1.Evaluate("1+2")
End Sub
Пименов Александр вне форума Ответить с цитированием
Старый 24.12.2012, 16:50   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
Сообщение от Пименов Александр Посмотреть сообщение
Evaluate - это процедура типа, которая находится только в приложении Excel.
В VBA нет понятия "тип", есть понятие "класс".

Последний раз редактировалось Скрипт; 24.12.2012 в 16:52.
Скрипт вне форума Ответить с цитированием
Старый 24.12.2012, 16:55   #6
Пименов Александр
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 222
По умолчанию

Цитата:
Сообщение от Скрипт Посмотреть сообщение
В VBA нет понятия "тип", есть понятие "класс".
Зато работает.
Пименов Александр вне форума Ответить с цитированием
Старый 24.12.2012, 16:58   #7
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пименов Александр, просто терминологию лучше использовать обычную, а то информацию тяжело воспринимать.
Скрипт вне форума Ответить с цитированием
Старый 24.12.2012, 22:35   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Если использовать общепринятую терминологию, то Evaluate - метод объекта Excel.Application. У объекта Word.Application такого метода нет.

Тема раскрыта тут: http://programmersforum.ru/showthread.php?t=222988
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает пример из Хелпа по VBA CaptainNemo Microsoft Office Excel 2 08.02.2013 20:49
Не работает связка access + ADO + VBA kksav Microsoft Office Access 3 19.05.2011 09:23
Долго работает код VBA Nasten'ka7 Microsoft Office Excel 5 05.05.2011 10:18
Evaluate как обойти лимит в 255 символов ? bdfy Microsoft Office Word 0 02.04.2011 18:17
VBA, не работает скрипт Domain Microsoft Office Excel 2 04.10.2010 11:07