Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Word некачественно продуманная программа

Word некачественно продуманная программа

Ответ
Поиск в этой теме
Непрочитано 04.05.2011, 18:26 #1
Word некачественно продуманная программа
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Ещё раз убедился что Word некачественно продуманная программа!
Почему существует метод для ввода текста:
ApplicationWord.Selection.Range.Text="Текст пользователя"
а метода для текущего документа нет:
WordDocument.Selection.Range.Text="Текст пользователя"???
В итоге когда у меня в Word открыто несколько вариантов отчётов: (старая версия и новая) то при выводе из Excel с помощью VBA нового отчёта я не могу привязать его к определённому (например текущему) документу и отчёт начинает выводиться во все открытые документы в беспорядочном виде. В итоге если открыто сразу несколько файлов то все файлы с отчётами портятся! Это очень непродуманно со стороны программистов Word что они не дали привязать выводимый текст к определённому документу. Приходится по их задумке привязывать выводимый текст не к документу а к приложению Word, который когда ему вздумается начинает переключаться между файлами по непонятным причинам. Это просто ужас! Допустить такую глупость, о чём они думали наверное о том как бы побыстрее получить прибыль? И почему нельзя из VBA создавать качественные формулы, такие как в программе MathType? Не пожелали сотрудничать? Пожалели денег и вместо MathType сделали свой свой "квадратный", коряво нарисованный в Painte редактор формул? Когда в Word можно ожидать полноценную поддержку язка создания формул TEX на котором получаются очень красивые формулы в MathType?
Просмотров: 3929
 
Непрочитано 04.05.2011, 18:47
#2
SergeyAB


 
Сообщений: n/a


А получить коллекцию открытых документов нельзя? Найти там нужный...
Или мелкомягкие должны интуитивно знать чего вы там колдуете?

Более чем уверен что область решения с вашей стороны.
 
 
Автор темы   Непрочитано 04.05.2011, 20:11
#3
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


С помощью вот этой функции я получаю доступ из Excel к приложению Word и к документу в который мне надо выводить отчёт:
Код:
[Выделить все]
Public Sub ИнициализироватьWord(appWD As Object, objDoc As Word.Document)
'Функция обеспечивает доступ к приложению Word и текущему документу в Word
On Error Resume Next
   Set appWD = GetObject(, "Word.Application")
   If appWD Is Nothing Then
      Set appWD = CreateObject("Word.Application")
      appWD.Visible = True
      Set objDoc = appWD.Documents.Add
      objDoc.Range.WholeStory
      objDoc.Selection.Delete
   Else
      Set objDoc = appWD.ActiveDocument
   End If
End Sub
Но использовать переменную objDoc дальше я нигде не могу потому что для переменной документа нет метода позволяющего выводить текст в строго назначенное место в документе. Более того я даже не нашёл метода дающего текущие координаты курсора в документе Word.
Можно только с помощью свойства Selection которое есть у переменной дающей доступ к приложению appWD выводить текст в Word с помощью следующей функции:
Код:
[Выделить все]
Public Function ТекстВWord(appWD As Word.Application, strТекст As String, strНазвСтиляАбзаца As String, _
Optional dblРазмер As Double = 0, Optional blnЖирный As Boolean = False, _
Optional blnКурсив As Boolean = False, Optional blnПодчёркивание As Boolean = False, Optional blnВыравнПоЦентру As Boolean = False, _
Optional blnВводАбзаца As Boolean = True, Optional blnПризнОбъедСПредАбзацем As Boolean = False)
Dim objRange As Word.Range
On Error GoTo ОбработкаОшибок
   Set objRange = appWD.Selection.Range
   objRange.Text = strТекст
   objRange.Style = strНазвСтиляАбзаца
'Если необходимо зададим дополнительное форматирование
   If dblРазмер <> 0 Then objRange.Font.Size = dblРазмер
   If blnЖирный Then objRange.Font.Bold = wdToggle
   If blnКурсив Then objRange.Font.Italic = wdToggle
   If blnПодчёркивание Then objRange.Font.Underline = wdUnderlineSingle
   If blnВыравнПоЦентру Then objRange.Paragraphs.Alignment = wdAlignParagraphCenter
'Если необходимо выведем символ абзаца
   If blnВводАбзаца Then
      objRange.InsertParagraphAfter
      objRange.Move Unit:=wdParagraph, Count:=1
      objRange.Select
      appWD.Selection.Paragraphs(1).Alignment = wdAlignParagraphLeft
   Else
      appWD.Selection.MoveRight Unit:=wdCharacter, Count:=Len(strТекст)
   End If
'Если необходимо объединим с предыдущим абзацем
   If blnПризнОбъедСПредАбзацем Then
      Call ОбъединитьСПредыдущимАбзацем(appWD)
   End If
   Exit Function
ОбработкаОшибок:
   MsgBox "При выводе текста в Word произошла ОШИБКА!" & vbLf & vbLf & _
         "Номер ошибки = " & Err.Number & "," & vbLf & vbLf & _
         "Описание ошибки: """ & Err.Description & """.", vbInformation, gstrНазваниеПрограммы
    Resume Next
End Function
SergeyAB попробуй заменить переменную appWD на objDoc, функция перестанет работать. Потому что у переменной документа objDoc нет свойства Selection. Поэтому текст можно выводить только в приложение которое переключается между документами когда ему захочется и вносит тем самым путаницу в процесс вывода текста. Это очень большой недочёт программистов что они не сделали свойства Selection у переменной документа objDoc.
МишаИнженер вне форума  
 
Непрочитано 04.05.2011, 20:30
1 | #4
SergeyAB


 
Сообщений: n/a


Кагбе...вникать лениво,

но вот что кажется:

нафига: Set appWD = CreateObject("Word.Application") ?

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


Не знаю как в VBA, в любой IDE есть такая штука как "неотображение"(по разным причинам) некоторых свойств/методов классов.
Если в твоем случае это так, то попробуй написать .Selection там где тебе это требуется и нажми компиляцию - если этого свойства действ. нет получишь сам знаешь что.

Вот это погляди - http://yandex.ru/yandsearch?text=VBA...d=133920&lr=46
(ну и вообще начинай с анализа дел в отрасли прежде чем свое паять и орать что MS гады) -
http://www.clarionlife.net/content/view/70/

Последний раз редактировалось SergeyAB, 04.05.2011 в 20:36.
 
 
Автор темы   Непрочитано 05.05.2011, 16:37
#5
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


SergeyAB, на странице http://www.clarionlife.net/content/view/70/
написаны слова подтверждающие мою теорию:
Цитата:
MS Word добавляет в систему несколько объектов, такие как Word.Basic, Word.Document, Word.Picture и т.п. Я рекомендую использовать объект Word.Application, так как этот объект позволяет использовать все методы VBA.
А почему невыгодно использовать объект Word.Application вместо Word.Document читайте в предыдущих сообщениях.
Кстати может кто знает как определить "координаты" текущего положения курсора в открытом документе Word?
МишаИнженер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Word некачественно продуманная программа

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фундамент с динамическими нагрузками в Scad Tlelaxu SCAD 9 31.08.2007 10:44