Имя: Пароль:
1C
 
Помогите с VBA
0 Vacoola
 
04.12.07
12:14
Как создать ком объект Word.Aplication и открыть в нем файл. Сложность в том что файл находится не на диске а в объекте 1с типа ДвоичныеДанные, а также в том что отурытий файл должен быть новый (не сохранен на диске)

Вот код. его надо изменить таким образом чтобы открытиф файл был новый а не уже сохраненный:
   БинареныйФайл = Шаблон.Получить();
   
   ПутьКВременномуФайлу = КаталогВременныхФайлов()+"ТемпДок.doc";
   БинареныйФайл.Записать(ПутьКВременномуФайлу);
   
   Попытка
       Word = новый COMОбъект("Word.Application");
       
       Doc = Word.Documents;
       Doc.Open(ПутьКВременномуФайлу);
       Word.Application.Visible=Истина;
   Исключение    
       Сообщить("Проблемы с Microsoft Office "+ОписаниеОшибки());
       Возврат;
   КонецПопытки;
1 dk
 
04.12.07
12:23
1) Копируй усе
2) Закрывай старый файл
3) Создавай новый
4) Вставляй из буфера
2 San1
 
04.12.07
12:23
Открой существующий документ, включи запись макроса, создай новый и скопируй все в него. Получится пимерно такой код.
   Range("A1:D4").Select
   Range("D4").Activate
   Selection.Copy
   Workbooks.Add
   ActiveSheet.Paste
Ссылку на книгу, кт добавили (Workbooks.Add) можно будет использовать для своих замыслов, мне кажется.
3 Vacoola
 
04.12.07
12:29
а такой вопросик. В общем случае.
Вот я записал макрос , получил код, но синтаксис его отличается от того которій можно использовать в ком объекте. подскажите оптимальный способ найти синтаксис ф- ий пригодный для использования. было б класно сслыку на справочник ф-ий, где есть оба варианта синтаксиса
4 Рэйв
 
04.12.07
12:36
(3)Часто спасает просто простановка двух скобок для функций.
т.е.
Selection.Copy
записать как
Selection.Copy();
5 Vacoola
 
04.12.07
12:46
Doc.Selection.WholeStory
       Doc.Selection.Copy
       Doc.ActiveWindow.Close
       Doc.Documents.Add DocumentType:=wdNewBlankDocument
       Selection.PasteAndFormat (wdPasteDefault)
а как быть с этим ?
особенно

Doc.Documents.Add DocumentType:=wdNewBlankDocument
6 Рэйв
 
04.12.07
12:50
(5)Я так думаю, что wdNewBlankDocument это что-то вроде константы, определенной через
#define
Так что оно вполне может иметь числовой эквивалент.
7 dk
 
04.12.07
12:55
Doc.Selection.WholeStory();
Doc.Selection.Copy();
Doc.ActiveWindow.Close(); // Хотя тут как-то не очень
МойДок = Doc.Documents.Add();
МойДок.Selection.Paste();  // ИЛИ Doc.Selection.Paste();
--
Как-то так
8 Vacoola
 
04.12.07
13:02
метод проб и ошибок наш метод
Doc.Selection.WholeStory(); ругается:
Поле объекта не обнаружено (Selection)
9 Рэйв
 
04.12.07
13:06
попробуй
Doc.Selection().WholeStory();
10 dk
 
04.12.07
13:09
я тормоз вместо Doc пиши Word
11 Vacoola
 
04.12.07
13:20
МойДок = Doc.Documents.Add(); -> Метод объекта не обнаружен (Add)
12 Vacoola
 
04.12.07
13:23
Word.ActiveWindow.Close(); // Хотя тут как-то не очень
вот , после этой команды  ком объект очищается
13 dk
 
04.12.07
13:50
Word = новый COMОбъект("Word.Application");
Док = Word.Documents.Open(ПутьКВременномуФайлу);
Word.Visible = Истина;
Селек = Word.Selection;
Селек.WholeStory();
Селек.Copy();
Док.Close();
Док = Word.Documents.Add();
Селек.Paste();
14 dk
 
04.12.07
13:52
Док.Close(Ложь); // Можно попробовать если будет вопросы задавать
15 Vacoola
 
04.12.07
14:35
работает только заменил строку Селек.Paste();
на        
Word.Selection.Paste();


Остается проблема,
файл может быть открыт только для чтения
Док.Close(Ложь);  не помагает.
16 Vacoola
 
04.12.07
14:51
(15) проблему ридонли файла решил, оказывается. 3 ий параметр ф-и open
Док = Word.Documents.Open(ПутьКВременномуФайлу,,истина);

Окончательный вариант выглядит так:
       Word = новый COMОбъект("Word.Application");
       Док = Word.Documents.Open(ПутьКВременномуФайлу,,истина);
       Селект = Word.Selection;
       Селект.WholeStory();
       Селект.Copy();
       Док.Close();
       Док = Word.Documents.Add();
       Word.Selection.Paste();

       Word.Application.Visible=Истина;
17 kla2005
 
04.12.07
15:36
На VBA код выглядит так:
 Documents.Add "C:\1.doc", , , True
Добавляет документ на основании шаблона, в качестве шаблона можна использовать не только документы dot а также документы doc
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший