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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 23:28   #1
CaptainNemo
Пользователь
 
Аватар для CaptainNemo
 
Регистрация: 02.06.2009
Сообщений: 49
По умолчанию Данные из таблицы в поле EQ

Всем привет
Возник такой вопрос….
Таблицу заполняю случайными числами:
Код:
Dim k As Integer
    With ActiveDocument.Tables(1).Range
        For k = 1 To .Cells.Count
            .Cells(k).Range = Format(Rnd() * 100, "#")
        Next k
    End With
Затем данные из ячеек применяю как переменные кода поля EQ

Код:
    With ActiveDocument.Tables(1).Range
    var1 = Left(.Cells(1).Range, 2): var2 = Left(.Cells(2).Range, 2)
    var3 = Left(.Cells(3).Range, 2): var4 = Left(.Cells(4).Range, 2)
    var5 = Left(.Cells(5).Range, 2): var6 = Left(.Cells(6).Range, 2)
    End With
With Selection
    .Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, PreserveFormatting:=False
    .TypeText "EQ \a \co3 \al ( " & var1 & "; " & var2 & "; " & var3 & _
    ";" & var4 & "; " & var5 & "; " & var6 & "; " & ")"
    Selection.Fields.Update
End With
Но заметил, что если рандомизировать данные, то при определённом их сочетании код не работает. Ни как не могу понять, что такое. Файл прилагаю…
Вложения
Тип файла: doc Test.doc (49.5 Кб, 31 просмотров)
Android & Linux

Последний раз редактировалось CaptainNemo; 04.06.2009 в 23:34.
CaptainNemo вне форума Ответить с цитированием
Старый 05.06.2009, 00:15   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Лишний абзац внутри скобок в параметрах ключа \al.

Но если его убрать — всё равно не вижу матрицы. Может, лишняя ; после последнего элемента?.. Попробуйте, включив непечатаемые знаки, сравнить поле с каким-нибудь образцовым (которое работает нормально).
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.06.2009, 06:37   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Все сделано правильно, но когда вы берете данные из ячеек, то почему-то уверены, что там всегда двузначное число. Это не так.

Ошибка возникает, если в таблице появляется однозначное число. Тогда в вашу переменную попадает кроме числа еще и знак абзаца, что и дает ошибку. Используйте вместо функции Left функцию Val, которая вам даст числовое значение из ячейки. Либо попробуйте объявить переменные var1-var6 как Integer, может быть Word сам справится с конвертированием из типа в тип. Первый вариант я попробовал, работает. Второй попробуйте сами.

И еще. При формировании кода поля уберите последнюю точку с запятой (перед закрывающей круглой скобко). Тогда ваша матрица будет выглядеть симметрично.

Хотелось бы увидеть универсальный макрос, который формировал бы матрицу вне зависимости от количества ячеек в таблице.

Добавлено позже

Попробовал я сделать вне зависимости от количества ячеек. Почему-то не получается сделать матрицу больше чем 5 строк на 7 столбцов. Код формирует, но поле выдает ошибку.

И уберите пробелы между цифрами. Пользуйтесь ключем \hs для задания расстояния между столбцами. Читаем здесь
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 05.06.2009 в 07:06.
viter.alex вне форума Ответить с цитированием
Старый 05.06.2009, 10:00   #4
CaptainNemo
Пользователь
 
Аватар для CaptainNemo
 
Регистрация: 02.06.2009
Сообщений: 49
По умолчанию

Да действительно, val помогает. Ещё немного подправил пробелы и выравнивание. Получилось довольно прилично. Но я вот для чего это всё пытался сделать… В конечном итоге хочу конвертировать эту матрицу в MS Equation3. И хочу сделать это в коде…
В версиях MS Word до 2007* (в 2007-ом у меня выскакивает ошибка «формула слишком велика для преобразования») двойным кликом по полю EQ формула конвертировалась в MS Equation. Сколько вчера с макрорекодером не экспериментировал, так и не понял, как это можно в коде сделать. Единственное, что пришло в голову, написать что-нибудь вроде этого:
Код:
Sub ConvertToEquation3()
    With ActiveDocument.Fields(1).OLEFormat
        .ActivateAs ClassType:="Equation.3"
        .Activate
    End With
End Sub
Хотя этот вариант тоже не рабочий… Эх.
Android & Linux
CaptainNemo вне форума Ответить с цитированием
Старый 05.06.2009, 10:06   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

А зачем? Поле прочитается и отредактируется на любом компе. MS Equation — не обязательно.
Я тоже пробовал, увидев ваш пример. Тоже не получилось.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 05.06.2009, 10:15   #6
CaptainNemo
Пользователь
 
Аватар для CaptainNemo
 
Регистрация: 02.06.2009
Сообщений: 49
По умолчанию

Всё дело в том, что на многих форумах по VBA-программированию проскальзывали вопросы, как сгенерировать в коде формулу MS Equation на основе каких либо данных, например, полученных в Excel. Причём эти вопросы так и остались без ответа.

Тут матрицу я только для примера взял, можно интеграл сделать, или любую другую формулу в виде поля EQ. Интересно, возможно ли сделать не только поле, но и Equation?
Android & Linux
CaptainNemo вне форума Ответить с цитированием
Старый 05.06.2009, 10:47   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

могу предложить использовать для этой цели MathType. Насколько я помню, он поддерживает VBA
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 05.06.2009, 13:55   #8
CaptainNemo
Пользователь
 
Аватар для CaptainNemo
 
Регистрация: 02.06.2009
Сообщений: 49
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
могу предложить использовать для этой цели MathType. Насколько я помню, он поддерживает VBA
=============================
Много лет уже приходится оформлять публикации с использованием редактора формул. Горький опыт научил, что MathType – самая проблемная программа в этом плане. Искажает кириллические символы на разных машинах. А если версии этой программы на разных машинах отличаются – не открывается для редактирования. Поэтому всегда использую MS Equation. Как показывает практика, он почти всегда корректно работает на разных машинах и вне зависимости от того, какая версия Office установлена.
Но на счёт применения VBA в MathType услышал впервые. Вроде бы даже искал раньше в инете что-либо на подобные темы, но не нашёл… Может подскажете, где это можно почитать…
Android & Linux
CaptainNemo вне форума Ответить с цитированием
Старый 15.06.2009, 15:58   #9
CaptainNemo
Пользователь
 
Аватар для CaptainNemo
 
Регистрация: 02.06.2009
Сообщений: 49
По умолчанию

Может кому-нибудь пригодиться. Попробовал в Equation.3 пересылать формулы из VBA таким вот незамысловатым кодом… Получается.
Код:
Sub eq()
Dim myObj As Object
   Set myObj = Selection.InlineShapes.AddOLEObject(ClassType:="Equation.3")
    myObj.Select
    SendKeys "sin{(}x{)}{+}cos{(}x{)}=1", True
End Sub
Android & Linux
CaptainNemo вне форума Ответить с цитированием
Старый 15.06.2009, 16:36   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Осталось заметить, что это равенство неправильное. Все-таки единице равна не сумма синуса и косинуса, а сумма их квадратов.
Теорема Пифагора, однако!

Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 15.06.2009 в 16:53.
viter.alex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылка на Excel-файл через поле таблицы megaten БД в Delphi 1 29.05.2009 01:18
Данные в "Поле (элемент ActiveX) SolexVK Microsoft Office Excel 1 07.05.2009 11:53
Добавить данные в поле (в конец) John_chek БД в Delphi 6 20.08.2007 14:23