Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116

Понимание формул в VBA Word

02.04.2018, 16:31. Показов 3820. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, какие-нибудь способы распознавания формулы в Word. Например VBA в Word не понимает свои же формулы, он заменяет символ, к примеру интеграла на "?". Кто знает решение?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2018, 16:31
Ответы с готовыми решениями:

Поиск формул в Word
Не могу осуществить поиск формул в Word. Могу перейти только к одной формуле и не более, не могу найти определенных команд. В итоге нужно:...

Текст после формул Word
Не могу сообразить, как ПОСЛЕ формулы в Word написать текст. к формуле обращаюсь через OMaths. Подскажите, пожалуйста.

Макрос для удаления формул в word
Здравствуйте! Такая вот запара на работе, начальство хочет прогресса)) Нужен макрос для удаления формул во всем документе, и наоборот...

10
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2018, 17:17
Возможно ты пишешь на том языке который не распознает оболочка vba
0
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116
02.04.2018, 17:20  [ТС]
Цитата Сообщение от fever brain Посмотреть сообщение
Возможно ты пишешь на том языке который не распознает оболочка vba
Формулу вывожу через MsgBox(...OMaths.Range.Text)
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2018, 17:22
как ты выводишь это только тебе известно
и больше никому.
ты ничего не показал, еще одно такое упоминание и я уйду из этой дискусии
0
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116
02.04.2018, 17:27  [ТС]
Цитата Сообщение от fever brain Посмотреть сообщение
как ты выводишь это только тебе известно
и больше никому.
ты ничего не показал, еще одно такое упоминание и я уйду из этой дискусии
Visual Basic
1
2
3
4
Dim M As OMath
For Each M In ActiveDocument.OMaths
      MsgBox(M.Range.Text)
Next
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2018, 17:34
Добавлено через 1 минуту
Выведи в документ, если ошибка повторится напиши
0
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116
02.04.2018, 17:40  [ТС]
Цитата Сообщение от fever brain Посмотреть сообщение
Выведи в документ, если ошибка повторится напиши
В документ он вывел нормально. Но мне нужно поработать с этой формулой, а он вместо интеграла пишет "? 12dx"
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
02.04.2018, 17:45
Это из за того что в msgbox текст можно вывести только в кодировке ANSI
возможно у тебя в твоих ироглифах используется юникод, конечно можно это поправить но это не для
тебя, ты явно не справишься, выводи в документ на лист
0
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116
02.04.2018, 18:23  [ТС]
Цитата Сообщение от fever brain Посмотреть сообщение
Это из за того что в msgbox текст можно вывести только в кодировке ANSI
возможно у тебя в твоих ироглифах используется юникод, конечно можно это поправить но это не для
тебя, ты явно не справишься, выводи в документ на лист
Я пробовал переводить интеграл в код, но он выдавал код "?" - 63. Подскажи способ корректной обработки формулы, если знаешь
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
03.04.2018, 00:03
Лучший ответ Сообщение было отмечено alex2131 как решение

Решение

Цитата Сообщение от alex2131 Посмотреть сообщение
Подскажи способ корректной обработки формулы
Здравствуйте,

Почитал справочник и пришел к следующим выводам:

Математические выражения в Word версии 2007 и выше представляются объектами OMath.

Каждый объект OMath состоит из одной или нескольких различных функций OMathFunction, имеющих определенный тип.

Если функция имеет тип wdOMathFunctionText, то она представляет собой строковой литерал, с которым можно работать точно так же, как вы привыкли работать с текстом. А вот функции остальных типов содержат вложенные объекты OMath, которые в свою очередь состоят из одной или нескольких функций и так далее.

На основе этих знаний предполагаю, что обработка формулы выглядит примерно так:
  1. получаем объект OMath, который надо обработать.
  2. получаем список функций OMathFunction, из которых состоит этот объект.
  3. для тех функций, которые имеют тип wdOMathFunctionText, выводим текст в MsgBox (или что вы там хотите с текстом сделать).
  4. для функций остальных типов получаем вложенные объекты OMath, и процесс повторяется с пункта 1.
Но это еще не все. Оказывается, у объекта OMath есть способ перевода в линейную форму с помощью метода Linearize, после чего можно обрабатывать формулу как простой текст, что гораздо удобнее и проще. Например, формула вида x2 после применения метода Linearize превратится в текст x^2, и при ее обработке как текста понятно, что это не переменная x2, а икс в степени 2.

Надеюсь, мое исследование вам поможет, и вы сможете корректно обработать свою формулу.

С уважением,
Аксима
1
3 / 3 / 1
Регистрация: 09.09.2013
Сообщений: 116
03.04.2018, 22:09  [ТС]
Цитата Сообщение от Аксима Посмотреть сообщение
Здравствуйте,
Почитал справочник и пришел к следующим выводам:
Математические выражения в Word версии 2007 и выше представляются объектами OMath.
Каждый объект OMath состоит из одной или нескольких различных функций OMathFunction, имеющих определенный тип.
Если функция имеет тип wdOMathFunctionText, то она представляет собой строковой литерал, с которым можно работать точно так же, как вы привыкли работать с текстом. А вот функции остальных типов содержат вложенные объекты OMath, которые в свою очередь состоят из одной или нескольких функций и так далее.
На основе этих знаний предполагаю, что обработка формулы выглядит примерно так:
получаем объект OMath, который надо обработать.
получаем список функций OMathFunction, из которых состоит этот объект.
для тех функций, которые имеют тип wdOMathFunctionText, выводим текст в MsgBox (или что вы там хотите с текстом сделать).
для функций остальных типов получаем вложенные объекты OMath, и процесс повторяется с пункта 1.
Но это еще не все. Оказывается, у объекта OMath есть способ перевода в линейную форму с помощью метода Linearize, после чего можно обрабатывать формулу как простой текст, что гораздо удобнее и проще. Например, формула вида x2 после применения метода Linearize превратится в текст x^2, и при ее обработке как текста понятно, что это не переменная x2, а икс в степени 2.
Надеюсь, мое исследование вам поможет, и вы сможете корректно обработать свою формулу.
С уважением,
Аксима
Спасибо за Ваше сообщение. Нашёл оптимальное для себя решение. OMaths.Linearize.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2018, 22:09
Помогаю со студенческими работами здесь

Дополнение формул в ячейках с появляющихся листов VBA Excel
Существует файл с фиксированным количеством постоянно присутствующих в нем листов, на одном из них собирается сводная информация в виде...

VBA В WORD
Здравствуйте. Нужно написать макрос, который "причесывает" текст по правилам оформления, но при написании столкнулся с проблемой: при...

WORD VBA
WORD VBA - добавление данных Ребята срочно помогите, почему эта штука не добавляет данные с "пол" ? Сделано через попу, через...

MultiPage в VBA Word
Доброго времени суток. Существует ли способ программно сделать недоступной одну из страниц мультипейдж в ВБА ВОРД?

массив vba word
Добрый день. Давно перешел на vb.net и забыл навыки vba. что то я гуглю и туплю, не понимаю как можно легко создать массив из тхт файла?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru