Как определить параметры файла DOC ?

Программирование на Visual Basic for Applications
Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Как определить параметры файла DOC ?

Сообщение Konst37 » 13.10.2005 (Чт) 14:13

Пишу код на событие при открытии файла.
Хочется узнать как получить те параметры с которыми был открыт WORDовский документ.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.10.2005 (Чт) 14:26

А они открываются с параметрами?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 13.10.2005 (Чт) 15:36

Пока еще нет :).
Но я думаю пройдет вариант из ком. строки Документ.doc 1,2

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.10.2005 (Чт) 15:42

Фиг тебе, эксель перехватит :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 13.10.2005 (Чт) 16:06

Так открываю же *.doc!!??
Но мне важно обработать в normal.dot параметры с которыми открылся файл...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.10.2005 (Чт) 16:12

Не сможешь.
Все параметры, с которыми ты будешь открывать документ, будут адресованы самому Word, а не твоему документу.
Используй текстовый файл.
Lasciate ogni speranza, voi ch'entrate.

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 13.10.2005 (Чт) 16:20

Хорошо. Пусть ворду.
У меня такая ситуация: Запускается ворд и открывает файл.
Так мне надо так при этом передать параметы, чтоб понять что с этим файлом делать:
печатать или сохранять под другим именем

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.10.2005 (Чт) 17:04

А не проще будет написать прогу на VB вместо макроса?
Изображение

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 13.10.2005 (Чт) 17:48

Поясняю. Есть шаблон rtf , который заполняется из под Delphi а потом открывается файлик в Worde. Он потом должен либо распечататься, либо сохраниться под другим именем.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.10.2005 (Чт) 17:59

Для сохранения под другим именем файл просто переименуй.
Для печати есть ключ командной строки Ворда.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 14.10.2005 (Пт) 7:17

Для печати есть ключ командной строки Ворда.

Повторяю. Печатать(а потом закрыться) или не печатать (и не закрываться) зависит от имени файла, коротое определяется в обработчике Document_Open() в normal.dot. Пример: Если открылся файл Счет*.doc-то его печатать и сохранить в папке (имя котрой совпадает с тек. месяцем) с именем, которое будет выглядеть так Счет_14.10.2005.doc. Если открываются любые другие файлы(не содержащие в имени "Счет")-то просто открыть документ и ничего не делать [/quote]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2005 (Пт) 11:20

Тогда зачем параметры, раз всё зависит от имени файла?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 14.10.2005 (Пт) 11:37

Тогда зачем параметры, раз всё зависит от имени файла?

А если мне надо в передаваемых параметрах указывать составляющую имени будущего файла? Пример: Открывается файл Счет*.doc с параметром 123 типа Счет*.doc 123
А мне потом надо сохранить этот Счет*.doc с именем Счет_14.10.2005_123.doc

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 14.10.2005 (Пт) 11:57

Так и не вижу ни одной причины, почему вся эта логика реализована в виде макроса.
Имхо это всё равно, что всю серверную логику в БД писать на триггерах
Изображение

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 14.10.2005 (Пт) 13:12

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

А давайте абстрагируемся от всей вышеприведенной дискуссии.
И по существу-МОЖНО ЛИ МНЕ В МАКРОСЕ ПОСМОТРЕТЬ С КАКИМИ ПАРАМЕТРАМИ ОТКРЫЛСЯ WORD?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2005 (Пт) 13:21

Нет, потому что фактически параметры передаются не командной строкой, а через DDE.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2005 (Пт) 14:03

А те, что командной, тоже обрубаются...

Поиграйся, если хочешь.
Код: Выделить всё
Option Explicit

Private Declare Function GetCommandLine Lib "kernel32.dll" Alias "GetCommandLineA" () As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long

Private Sub Document_Open()
  Dim t As Long, s As String
 
  t = GetCommandLine
  s = String$(lstrlen(t), 0)
  CopyMemory ByVal StrPtr(s), ByVal t, Len(s)
  s = StrConv(s, vbUnicode)
 
  MsgBox s
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 17.10.2005 (Пн) 11:56

Значения он выдает, но явно не те, или я не понимаю....
пишу tax_000532A20.doc 9, а мне сообщение 1384360 (и это с разными вариантами передачи параметров) :?

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 17.10.2005 (Пн) 14:08

Продвинулся чуть дальше, но радости не добавило....
После строки CopyMemory ByVal StrPtr(s), ByVal t, Len(s)
Word молча вылетает....
А потом при повторном открытии уже предлагает сохранить востановленные документы...

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 17.10.2005 (Пн) 14:37

А если так.
Макрос в Normal.dot определяет имя открытого (активного) файла. Если имя удовлетворяет условию, то распечатывает его и сохраняет под именем ИМЯ_ДАТА_XXX.doc. Причем ДАТА - текущая дата, а XXX -некоторое число, которое задается по результатам анализа сотава папки в которую планируется сохранять файл. Например, количество файлов + 1.

Для передачи параметров иногда используют текстовые файлы, например, ini. Параметр записывают в ini, а программа считывает его отуда.

Для передачи параметров можно использовать и буфер обмена. Помещаете в буфер обмена текст, а макрос в шаблоне его считвает и принимает решение о дальнейших действиях.
brigval

Konst37
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 27.12.2004 (Пн) 15:58

Сообщение Konst37 » 17.10.2005 (Пн) 17:54

brigval

Спасибо 2 и 3 варианты попробую, а 1 отпадает однозначно[/quote]


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList