Войти

Показать полную графическую версию : VB, закрытие открытого файла


meateron
21-02-2013, 17:56
Мучаемся часть 2 :)

Имеем открытие файла шаблона .dotx с заполнением bookmark'ов в нем заполненными в форме данными:


Dim wApp As Object = CreateObject("Word.Application")
Dim wdocpath As String = IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "data\pattern_01.dotx")
FileCopy(wdocpath, Environ("temp") & "\pattern_temp.dotx")
Dim wDoc As Object = wApp.Documents.Open(Environ("temp") & "\pattern_temp.dotx")
wDoc.Bookmarks("company").Range.Text = CompanyBox.Text
wApp.Visible = True
wApp.ActiveDocument.SaveAs(Environ("userprofile") & "\Documents\" & CompanyBox.Text & " Документ.docx")


Имена файлов присваиваются в зависимости от внесенного имени фирмы. Так вот, сгенерив на основе шаблона файл, лицезрим его, и ежели опять жамкнуть "ок" (запустить суб создания того же самого файла), то оно понятное дело не сохранит его с этим же самым именем, т.к. такой файл в данный момент открыт и занят. Закрывать файл по окончании нельзя - должен быть открыт.
Вопрос: как закрыть файл при попытке сохранить его (если имена будут совпадать?)

wApp.ActiveDocument.Close не спасает, ещё раз доказывая кривизну рук =(

Iska
21-02-2013, 19:09
meateron, очень непонятно изложено.

meateron
21-02-2013, 23:05
ну.....окей, попроще:

1. имеется textbox, в него вносим значение "кошка", жамкаем на кнопку "ок"
2. создается(открывается из шаблона) файл ворда, сохраняется он "кошка.docx", файл кошка.dotx должен быть в конце открыт перед юзером для его печати/ознакомления
3. если ещё раз запустить создание документа не изменяя значение textbox'a, то откроется вордовский шаблон, не сохранив файл, т.к. он открыт в данный момент.

4(?) как закрыть документ, имя которого задано, учитывая значения в textbox, чтобы внести изменения (по факту в форме много полей для заполнения, имя присваивается пусть по одному полю) и сохранить его с таким же именем?

Iska
21-02-2013, 23:31
1. имеется textbox, »
Где имеется? На форме в каком-то другом документе?

открывается из шаблона »
Из далее упомянутого шаблона «кошка.dotx»?

файл кошка.dotx должен быть в конце открыт перед юзером для его печати/ознакомления »
Зачем? И откуда взялся открытый шаблон?

Или здесь описка и речь про документ «кошка.docx»?

если ещё раз запустить создание документа не изменяя значение textbox'a, то откроется вордовский шаблон, не сохранив файл, т.к. он открыт в данный момент. »
Запретите создание нового документа до закрытия созданного (например, сделав недоступной кнопку для запуска процесса создания). Привяжитесь для этого к событию Quit созданного объекта Application.

meateron
22-02-2013, 08:07
имеется на форме,
шаблон не кошка, шаблон пусть шаблон.dotx,
речь всё же уже про кошка.docx, описался %)

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

VB умеет понимать имена открытых файлов? в autoit'e это всё решилось бы проверкой: а открыт ли файл с именем "$texbox1", если да, то завершить процесс и выполнить действие.

Iska
22-02-2013, 15:34
иногда нужно меняя лишь один из textbox(который участвует в формировании имени файла), сделать несколько разных документов, что выполняется без закрытия получившихся файлов, открывая по новому экземпляру ворда. »
Используйте коллекцию, следите за создаваемыми документами.

P.S. Создавать новые экземпляры Word'а необязательно.




© OSzone.net 2001-2012