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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2011, 12:06   #1
teem0n
 
Регистрация: 25.06.2011
Сообщений: 4
По умолчанию Вычисления в Word

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

Требуется автоматически вычислять значение atan в Word. Реализовал полиномом, но точность недостаточная, Excel лучше считает...

Хотелось бы сделать на основе полей (чтобы просто "Выделить все" -> "Обновить" и все посчиталось ).

Есть еще мысль по макросу открывать эксель, считать там и полученные значения вытаскивать в Word. Можно ли привязать макрос к команде "обновить поле"?
teem0n вне форума Ответить с цитированием
Старый 06.07.2011, 13:36   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Цитата:
Сообщение от teem0n Посмотреть сообщение
Можно ли привязать макрос к команде "обновить поле"?
Включил Вид→Макросы→Запись макроса, нажал F9. Получил
Код:
Sub Макрос4()
'    Selection.Fields.Update
    ActiveDocument.Fields.Update
End Sub
Который затем модифицировал для всех полей документа Word.

Арктангенс, по точности, при углах, близких к 90°, не надёжен (ибо tg→∞).

Я бы ряд не использовал; есть же прямая формула, не искали?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 06.07.2011, 16:19   #3
teem0n
 
Регистрация: 25.06.2011
Сообщений: 4
По умолчанию

Я хотел наоборот Чтобы при обновлении поля вызывался макрос.
Так-то я умею. А какая есть прямая формула? Я написал 15 членов ряда, стало сильно лучше
teem0n вне форума Ответить с цитированием
Старый 06.07.2011, 17:47   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

>Чтобы при обновлении поля вызывался макрос
Насколько я помню можно при входе в поле, при выходе из него, но в режиме который бог знает кому нужен, как он называется не помню, там надо на замочек нажать
и потом такая нервотрёпка
Ципихович Эндрю вне форума Ответить с цитированием
Старый 06.07.2011, 20:48   #5
teem0n
 
Регистрация: 25.06.2011
Сообщений: 4
По умолчанию

Особых режимов работы не надо, пользователи будут волноваться
teem0n вне форума Ответить с цитированием
Старый 06.07.2011, 21:09   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

В самом простом варианте вставляете в модуль кода
Код:
Public Sub UpdateFields()
   Dim f As Field
   Dim s As String
   For Each f In ActiveDocument.Fields
      s = Trim$(f.Code.Text)
      If Left$(s, 1) = "!" Then
          f.Result.Text = EvalMyFields(Mid$(s, 2))
      End If
   Next f
End Sub
Function EvalMyFields(s As String) As String
     Dim sArg As String
     Dim sFunc As String
     Dim i As Long
     i = InStr(s, "(")
     If i > 1 Then
         sFunc = Left$(s, i - 1)
     Else
         sFunc = s
     End If
     If i > 1 Then
         sArg = Mid$(s, i + 1)
         If Right$(sArg, 1) = ")" Then
            sArg = Left$(sArg, Len(sArg) - 1)
         End If
     End If
     Select Case sFunc
         Case "ATAN"
             EvalMyFields = Atn(CDbl(sArg))
         Case Else
             EvalMyFields = "????"
     End Select
End Function
и в Поле {!ATAN(1)}
Это пример реализации пользовательских полей.

Последний раз редактировалось Aent; 06.07.2011 в 21:11.
Aent вне форума Ответить с цитированием
Старый 08.07.2011, 18:06   #7
teem0n
 
Регистрация: 25.06.2011
Сообщений: 4
По умолчанию

Спасибо, буду пробовать!
teem0n вне форума Ответить с цитированием
Старый 09.07.2011, 07:57   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Арктангенс на раз-два-три

Цитата:
Сообщение от teem0n Посмотреть сообщение
А какая есть прямая формула? Я написал 15 членов ряда... стало сильно лучше
Ещё лучше (и точнее) так.
Код:
Const pi = 3.14159265358979
y = Atn(x) ' y - угол в радианах
y = Atn(x) / pi * 180 ' если y нужен в градусах
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления AcidBurst Помощь студентам 14 22.09.2010 15:09
Работать в Word, не открывая документы (работа с закрытыми документами Word) Георгиевич Microsoft Office Word 10 07.09.2009 11:19
Вычисления alex2212 Помощь студентам 0 09.04.2009 21:11
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17
вычисления Александр8585 Microsoft Office Excel 8 16.09.2008 15:22