Открытие Wordовского файла

  • Автор темы rm2005
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

rm2005

Добрый день!

Задача по кнопки открыть вордовский файл, находящийся в форме, прикреплённый в поле типа Rich Text.

Код:
Dim neo As NotesEmbeddedObject
Set neo = Doc.EmbeddedObjects(0)
Set odject= neo.Activate(False)
Set word = neo.Object 
Set x = word.Application
x.Visible = True
Запускается только ворд, а нужный файл нет.
 
R

rm2005

Для: Morpheus

Вот странная фигня получается, если Activate(True) пишу, открывается нужный вордовский док, моментально закрывается, и остаётся просто ворд висеть.
 
M

morpheus

как вариант вкиуть документ в папку и открыть докумет shell
 
K

K-Fire

Для: Morpheus

Вот странная фигня получается, если Activate(True) пишу, открывается нужный вордовский док, моментально закрывается, и остаётся просто ворд висеть.

Закрывается, потому что объекты уничтожаются, когда код на кнопке завершается. Нужно просто определение переменных перенести в Globals Declarations формы - всё должно заработать.
 
S

serEJa Shabalin

Закрывается, потому что объекты уничтожаются, когда код на кнопке завершается. Нужно просто определение переменных перенести в Globals Declarations формы - всё должно заработать.

Огромное спасибо. Год назад в порядке экспериментов столкнулся с этим вопросом. Тогда вопрос закрылся за недостатком времени, но сейчас приятно узнать на него ответ.

Репутация +1 (Поднял бы на больше. Если не забуду добавлю +1 через неделю)
 
V

Verm

Для: rm2005

можно привести полный код кнопки?
 
G

Guest

Для: Verm
Код:
Dim neo As NotesEmbeddedObject
Set neo = Doc.EmbeddedObjects(0)
Set object= neo.Activate(True)
Set word = neo.Object
Set x = word.Application
x.Visible = True

Соответственно как было сказано ранее, переменные neo, object, x, word определить в Globals Declarations
 
A

amigolinx

В этом плане любопытно знать, как из этого полученного из ворда Variant'а (Object'а) вытащить инфу. В большинстве случаев это удается, а вот как, например, достать количество символов в доке, например, после выполнения такого кода?
[codebox]Set ch_count = aDoc.BuiltInDocumentProperties(16)
' ch_count as variant;
' 16 - вордовская константа, именованная в ворде как wdPropertyCharacters;
' aDoc - уровень word.activedocument[/codebox]
В дебаггере видно, что объект возвращается успешно, но при попытке преобразовать его к какому-нибудь родному типу лотуса вылетает type missmatch.
Есть у кого-нибудь идеи?
 
A

amigolinx

у word.activedocument есть Characters у которого есть свойство Count
на данный момент так и вышел из положения для подсчета символов с пробелами + удаление всех пробельных символов и снова characters.count для подсчета количества символов без пробелов, но быстрее было бы забрать эту инфу через BuiltInDocumentProperties(16) и BuiltInDocumentProperties(30), а при попытке вывести в messagebox полученный variant выдается ошибка и приведение к CStr не спасает почему-то
 
A

amigolinx

Неа, пока не удалось добиться результата - теперь сам automation object выдает собственную внутреннюю ошибку насчет несоответствия типов в параметрах. Ведется дальнейшая работа - что ж за параметр он хочет...
 

Kizarek86

Green Team
20.07.2007
875
8
BIT
117
А в поток считать данные и там посчитать символы?)

Погорячился, там проблемы с кодировкой начинают вылезать(
 
M

morpheus

Вот рабочий код

Код:
Sub Click(Source As Button)
Dim v ,f , wordApp, wordDoc	
Set wordApp = CreateObject ("Word.Application") ' приложение
Set wordDoc = wordApp.Documents.Open("C:\1.doc") ' открываем документ
Let wordApp.Visible = False ' Не показывать
Let f = wordDoc.BuiltInDocumentProperties("Number of characters").Value ' получаем значение встроенного свойства
MsgBox "Chr Count = " Cstr(f) ' - без пробелов
Call wordApp.Quit(True) ' благополучно всё закрываем
End Sub

А в поток считать данные и там посчитать символы?)
жесть, прокатить навероне тока с txt файлами
 
A

amigolinx

Morpheus, спасибо огроменное, респект и уважуха :) (вот наберу веса, обязательно в репутацию +16 добавлю :))). Не до конца я все таки хелп в VBA почитал, пропустил, что к всяким обжектам доступ через value делается. Идею принял, под себя чуток доработал, может кому интересно:
Код:
Let withSpaces = word.ActiveDocument.BuiltInDocumentProperties(30).Value
Let withoutSpaces = word.ActiveDocument.BuiltInDocumentProperties(16).Value
работает как часы

А стрим писать/читать была мысля, но просто в стрим пишется как есть, а у меня rti-поле с html-тэгами и текстом вперемешку, вот через открытие в ворде выкрутился (может и коряво, можно было и "просто" конвертер прикрутить, но времени в обрез) - он по <html><body> в заголовке узнает, что файл хтмельный и преобразует его по-честному. Оставалось только количество символов забрать и дело в шляпе. К тому же может потом пригодиться при сборе инфы по вордовым файлам в директории, например.
 
M

morpheus

Не до конца я все таки хелп в VBA почитал, пропустил, что к всяким обжектам доступ через value делается.
не только через value. В хэлпе по VBa неплохо все properies расписаннны. Правда индексы (16/30) я не нашёл , потому и написал "Number of characters"
 
A

amigolinx

Правда индексы (16/30) я не нашёл , потому и написал "Number of characters"
а я, наоборот, числовое значение соответствующих констант надыбал - в object browser'e (полезная штука, чтоб параметры или мемберов посмотреть при надобности), куда попасть можно, например, вызвав контекстное меню на интересующем слове в vba-редакторе - команда меню Definition, а там уже внизу над статус баром вся инфа приведена
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!