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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2017, 21:53   #1
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию Заменить часть текста на формулу Word VBA

Предположим нужно мне вставить в ворд текст
"где К_р – повышающий коэффициент, зависящий от присвоенного рабочему разряда;"
Я использую для вставки текста вот такой код
Код:
Public Function insert_textN(ByVal text As String, ByVal oRng As Object, _
Optional ByVal newparagraph As Boolean = True, Optional ByVal HEADER As Integer = 0)


  
  With oRng
    .Collapse wdCollapseEnd
    If newparagraph Then .InsertParagraphbefore
    
    If InStr(text, "_") > 0 And False Then
       Dim RegExp, myMatches, myMatch
      Set RegExp = CreateObject("VBScript.RegExp")
      RegExp.Global = True
      RegExp.Pattern = "[ ]+"
      Set myMatches = RegExp.Execute(text)
      Dim SplitArray()
      ReDim SplitArray(myMatches.Count)
      p = 0
      i = 0
      For Each myMatch In myMatches
          SplitArray(i) = Mid(text, p + 1, myMatch.FirstIndex - p)
          p = myMatch.FirstIndex + myMatch.Length
          i = i + 1
      Next
      SplitArray(i) = Mid(text, p + 1)
      Set oDoc = oRng.document

      
      For Each x In SplitArray
          Debug.Print x & " " & InStr(x, "_")
          If InStr(x, "_") > 0 Then
              Call eq_text_addN(" " & x, oDoc.Paragraphs(oDoc.Paragraphs.Count).Range, False, False)
          Else
              Call insert_textN(" " & x, oDoc.Paragraphs(oDoc.Paragraphs.Count).Range, False, False)
          End If
          
          'oDoc.Paragraphs(oDoc.Paragraphs.Count).Range
      Next
      
      Exit Function
    End If
    
        
    .InsertAfter text
    
  End With
  oRng.Collapse wdCollapseEnd
  oRng.Select
  If HEADER <> 0 Then
  oRng.Paragraphs.Style = oRng.document.Styles("Заголовок " & HEADER)
  End If
  
  
  
End Function
Но вот как корректно оформить переменные (они с нижними индексами) ? загонять текст в нижний индекс я пробовал - работает посредственно, форматирование рано или поздно может сбиваться при оформлении документа. В идеале вместо К_р нужно вставлять формулу.
Как это сделать ? Вставлять можно формулы нового редактора формул (2007 и выше) он понимает подчеркивание в принципе
bdfy вне форума Ответить с цитированием
Старый 26.10.2017, 01:15   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от bdfy Посмотреть сообщение
Код:
If InStr(text, "_") > 0 And False Then
Лихо отключили всю эту сложную обработку
Цитата:
Сообщение от bdfy Посмотреть сообщение
загонять текст в нижний индекс я пробовал - работает посредственно, форматирование рано или поздно может сбиваться при оформлении документа.
Ни разу не встречал такого, чтобы нижний индекс слетал (в отличие от формул). Это очень простое форматирование.
Можно включить нижний индекс для текста после _ и до следующего пробела при помощи поиска-замены Ворда:
Код:
Public Function insert_textN(ByVal text As String, ByVal oRng As Object, _
Optional ByVal newparagraph As Boolean = True, Optional ByVal HEADER As Integer = 0)

  With oRng
    .Collapse wdCollapseEnd
    If newparagraph Then .InsertParagraphBefore
    
    .InsertAfter text
    With .Find
      .ClearFormatting
      .Replacement.ClearFormatting
      With .Replacement.Font
        .Superscript = False
        .Subscript = True
      End With
      .text = "(_)([! ]@ )"
      .Replacement.text = "\2"
      .Forward = True
      .Wrap = wdFindStop
      .Format = True
      .MatchCase = False
      .MatchWholeWord = False
      .MatchAllWordForms = False
      .MatchSoundsLike = False
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
    End With
  End With
  oRng.Collapse wdCollapseEnd
  oRng.Select
  If HEADER <> 0 Then
  oRng.Paragraphs.Style = oRng.Document.Styles("Заголовок " & HEADER)
  End If
  
End Function

Sub test()
'вставить фразу с несколькими нижними индексами после второго слова в документе
  insert_textN "где К_р – повышающий коэффициент, зависящий от присвоенного рабочему Р_аб разряда;", _
    ActiveDocument.Words(2)
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 26.10.2017, 12:20   #3
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

А я вот видел как форматирование сбивается
+дело в том что переменная то может быть и несколько сложнее чем К_1
Например может быть нижний и верхний индекс, например К_а^1 в редакторе формул это корректно проходит, а индексами не сделать...
Как этот код заставить работать если Word документ заполняется из VBA Excel ?
.Execute Replace:=2
как будто не проходит команда

Последний раз редактировалось bdfy; 26.10.2017 в 12:43.
bdfy вне форума Ответить с цитированием
Старый 27.10.2017, 22:20   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от bdfy Посмотреть сообщение
Как этот код заставить работать если Word документ заполняется из VBA Excel ?
.Execute Replace:=2
Там в коде и другие вордовские константы есть.
Option Explicit в начале модуля помогает выявить неопределенные идентификаторы.
Можете в VBA Excel подключить библиотеку Ворда: Tools - References - Microsoft Word... , тогда константы будут определены.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 28.10.2017, 20:38   #5
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

нашел я ошибку текст вставлялся после поиска - а значит искать было не в чем) константы и т.п. тут не при чем.
bdfy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[VBA Word] Удаление замещающего текста и гиперссылок mav1984 Microsoft Office Word 10 01.10.2021 16:56
Замена текста в шаблоне Word из ячеек в Excel (VBA) fensi Помощь студентам 0 16.05.2017 19:51
VBA WORD При наборе текста, автоматическая вставка изображения fearnewstyle Microsoft Office Word 1 13.11.2011 08:05
VBA Word Перенос текста из ячеек таблицы одного файла в другой bietins Microsoft Office Word 2 13.09.2011 16:04
Word VBA как вставить разрыв принудительный в формулу ? bdfy Microsoft Office Word 13 01.12.2010 08:06