Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открыть Wordовский документ,внести изменения, и сохранить с другим именем 
V
    Опции темы
SlaUr
Дата 26.3.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Вот код:
Код

Private Sub T2_Click()
Dim wrd, fs As Object
Dim app As Long
Dim c As String
Set wrd = CreateObject("Word.Basic")
Set fs = CreateObject("Scripting.FileSystemObject")
    If Not fs.FileExists("Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc") Then
    wrd.fileopen ("C:\T-2.rtf")
 MsgBox "ok"
    If Not IsNull(Me.F) Then
    wrd.editbookmark Name:="F", GoTo:=True
    wrd.insert (Me.F)
    End If
    If Not IsNull(Me.I) Then
    wrd.editbookmark Name:="I", GoTo:=True
    wrd.insert (Me.I)
    End If
    If Not IsNull(Me.O) Then
    wrd.editbookmark Name:="O", GoTo:=True
    wrd.insert (Me.O)
    End If
    If Not IsNull(Me.INN) Then
    wrd.editbookmark Name:="INN", GoTo:=True
    wrd.insert (CStr(Me.INN))
    End If
    If Not IsNull(Me.st_sv) Then
    wrd.editbookmark Name:="st_sv", GoTo:=True
    wrd.insert (CStr(Me.st_sv))
    End If
    If Not IsNull(Me.POL) Then
    wrd.editbookmark Name:="pol", GoTo:=True
    wrd.insert (Me.POL)
    End If
    If Not IsNull(Me.DBORN0) Then
    wrd.editbookmark Name:="dborn", GoTo:=True
    wrd.insert (CStr(Me.DBORN0))
    End If
    If Not IsNull(Me.KOBRAZ) Then
    wrd.editbookmark Name:="kobraz", GoTo:=True
    wrd.insert (CStr(Me.KOBRAZ.Column(1)))
    End If
    If Not IsNull(Me.KSEM00) Then
    wrd.editbookmark Name:="ksem0", GoTo:=True
    wrd.insert (CStr(Me.KSEM00.Column(1)))
    End If
    If Not IsNull(Me.dadres) Then
    wrd.editbookmark Name:="dadres", GoTo:=True
    wrd.insert (Me.dadres)
    End If
    If Not IsNull(Me.adr_fact) Then
    wrd.editbookmark Name:="adr_fact", GoTo:=True
    wrd.insert (Me.adr_fact)
    End If
wrd.filesaveas ("Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc")
wrd.fileclose
End If
app = Shell("winword.exe ", vbNormalFocus)
wrd.fileopen ("Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc")
Set wrd = Nothing
Set fs = Nothing
End Sub


По идее (как я понял) этот код должен открывать rtf файл (форма ) заносить туда данные из БД и сохранять в .DOC под другим именем (потом уже открывать этот созданный файл)

Я поставил  MsgBox "ok" после fileopen , сообщение не появляется,то есть fileopen не проходит.

В реальности появляется невидимый процесс WINWORD.EXE .

Иногда rtf файл все же открывается но MsgBox все равно не срабатывает и код после него не действует.

В чем тут дело? кто что может подсказать?


p.s. в VB новичок




PM MAIL   Вверх
Akina
Дата 26.3.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(SlaUr @  26.3.2008,  14:21 Найти цитируемый пост)
В реальности появляется невидимый процесс WINWORD.EXE .

Он появляется в момент выполнения CreateObject("Word.Basic")

Цитата(SlaUr @  26.3.2008,  14:21 Найти цитируемый пост)
Я поставил  MsgBox "ok" после fileopen , сообщение не появляется,то есть fileopen не проходит.

Значит, либо файл "Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc" существует, либо возникает ошибка исполнения.

А какой текущий каталог в момент выполнения этого кода?

Цитата(SlaUr @  26.3.2008,  14:21 Найти цитируемый пост)
в VB новичок

ну так учите матчасть. Или поручите решение проблемы тому, кто разбирается.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SlaUr
Дата 26.3.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Цитата

Он появляется в момент выполнения CreateObject("Word.Basic")

Сам процесс да.Сейчас поставил MsgBox сразу после CreateObject("Word.Basic")
Сообщение выходит.
Все перестает работать после fileopen ("C:\T-2.rtf")



Цитата

Значит, либо файл "Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc" существует, либо возникает ошибка исполнения

файл Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc не существует
Цитата

А какой текущий каталог в момент выполнения этого кода?


C:\T-2.rtf имеется,задан явным образом ,какая разница где мы находимся?
Цитата

ну так учите матчасть. Или поручите решение проблемы тому, кто разбирается. 

Ну так я этим и занимаюсь,поручить некому


Это сообщение отредактировал(а) SlaUr - 26.3.2008, 16:26
PM MAIL   Вверх
SlaUr
Дата 26.3.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Поменял файл на c:\t.rtf,(может c руская была)
Выходной файл на с:\ и т.д (указал путь явным образом)
И все заработало.

Как мне считывать и сохранять файлы не указывая явным образом путь а в папке где находится база данных .
В Delphi например узнать папку откуда стартовала прога можно : ExtractFileDir(Paramstr(0));

Явным образом пути указать не могу-базой данных пользуются по сети

PM MAIL   Вверх
Akina
Дата 26.3.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



CurrentDB.Path
CurrentDB.Name


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SlaUr
Дата 26.3.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



CurrentDb.Path

CurrentDb- это что за обьект?
Пробовал имя формы , имя файла БД, имя проекта.

Извените за чайницкие вопросы.
PM MAIL   Вверх
Akina
Дата 26.3.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



А встроенную справку по VBA не пробовал? помогает...

Тупо в любом модуле набери это слово и нажми F1.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SlaUr
Дата 26.3.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



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

Set dbsCurrent = CurrentDb
MsgBox dbsCurrent.Path


И никакого сообщения не выходит
Не судите строго а лучше просто обьясните что не так.

Цитата

топ-топ,топ-топ очень не легки ,
топ-топ,топ-топ Первые шаги 


Извените за глупые вопросы ,но мне нужно быстро показать результат,а потом я все равно все переделаю под MS SQL+Delphi

Я уже справился с тем что не знаю пароль на открытие модуля(прога Advanced office pasword recovery) и стем что в форме событие OnPress не распознает русские буквы (заменил chr на chrw и все заработало) осталось это и все,можно занятся созданием новой программы.Я в форуме delphi часто отвечал на глупые вопросы,и не считаю зазорным что человек полный нуль в данном ЯП,Все знать не возможно.


вот какой сейчас код процедуры
Код

Private Sub T2_Click()
Dim wrd, fs As Object
Dim app As Long
Dim c As String
Set dbsCurrent = CurrentDb
MsgBox dbsCurrent.Path
Set wrd = CreateObject("Word.Basic")
Set fs = CreateObject("Scripting.FileSystemObject")
    If Not fs.FileExists(dbsCurrent.Path + "\Т2\" + Me.F + " " + Me.I + " " + Me.O + ".doc") Then
    wrd.fileopen (dbsCurrent.Path + "\t.rtf")
    If Not IsNull(Me.F) Then
    wrd.editbookmark Name:="F", GoTo:=True
    wrd.insert (Me.F)
    End If
    If Not IsNull(Me.I) Then
    wrd.editbookmark Name:="I", GoTo:=True
    wrd.insert (Me.I)
    End If
    If Not IsNull(Me.O) Then
    wrd.editbookmark Name:="O", GoTo:=True
    wrd.insert (Me.O)
    End If
    If Not IsNull(Me.INN) Then
    wrd.editbookmark Name:="INN", GoTo:=True
    wrd.insert (CStr(Me.INN))
    End If
    If Not IsNull(Me.st_sv) Then
    wrd.editbookmark Name:="st_sv", GoTo:=True
    wrd.insert (CStr(Me.st_sv))
    End If
    If Not IsNull(Me.POL) Then
    wrd.editbookmark Name:="pol", GoTo:=True
    wrd.insert (Me.POL)
    End If
    If Not IsNull(Me.DBORN0) Then
    wrd.editbookmark Name:="dborn", GoTo:=True
    wrd.insert (CStr(Me.DBORN0))
    End If
    If Not IsNull(Me.KOBRAZ) Then
    wrd.editbookmark Name:="kobraz", GoTo:=True
    wrd.insert (CStr(Me.KOBRAZ.Column(1)))
    End If
    If Not IsNull(Me.KSEM00) Then
    wrd.editbookmark Name:="ksem0", GoTo:=True
    wrd.insert (CStr(Me.KSEM00.Column(1)))
    End If
    If Not IsNull(Me.dadres) Then
    wrd.editbookmark Name:="dadres", GoTo:=True
    wrd.insert (Me.dadres)
    End If
    If Not IsNull(Me.adr_fact) Then
    wrd.editbookmark Name:="adr_fact", GoTo:=True
    wrd.insert (Me.adr_fact)
    End If
wrd.filesaveas (dbsCurrent.Path + "\T2\" + Me.F + " " + Me.I + " " + Me.O + ".doc")
wrd.fileclose
End If
app = Shell("winword.exe ", vbNormalFocus)
wrd.fileopen (dbsCurrent.Path + "\T2\" + Me.F + " " + Me.I + " " + Me.O + ".doc")
Set wrd = Nothing
Set fs = Nothing
End Sub

p.s.пути пробовал и без слэшов ((dbsCurrent.Path + "T2\" + Me.F ...))

Это сообщение отредактировал(а) SlaUr - 27.3.2008, 00:26
PM MAIL   Вверх
Akina
Дата 26.3.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(SlaUr @  26.3.2008,  21:02 Найти цитируемый пост)
И никакого сообщения не выходит

А точками прерывания вместо MsgBox пользоваться не пробовали? вопросов отпало бы как минимум половина.
Значит так:
Код

Private Sub Form_Load
MsgBox CurrentDB.Name
End Sub

Если сообщение увидите, то поймете, почему ничего не получается, когда
Цитата(SlaUr @  26.3.2008,  21:02 Найти цитируемый пост)
пути пробовал и без слэшов 

Надеюсь, поделить полное имя на драйв, путь и имя сможете?

Цитата(SlaUr @  26.3.2008,  21:02 Найти цитируемый пост)
Я в форуме delphi часто отвечал

И при этом не научились ПРАВИЛЬНО указывать язык, используя тег "Код"? Так что постоянно править приходится...

Цитата(SlaUr @  26.3.2008,  21:02 Найти цитируемый пост)
мне нужно быстро показать результат,а потом я все равно все переделаю под MS SQL+Delphi

И для этого Вы выбрали среду, в которой, мягко говоря ... ? почему не, например, Access DB + Jet или ADO + Delphi? чистый же натив...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SlaUr
Дата 26.3.2008, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



CurrentDB.Path такого нет (зачем надо было это писать?-ввели в заблуждение)
CurrentDB.Name действительно есть там содержится полный путь и имя файла
Цитата

Надеюсь, поделить полное имя на драйв, путь и имя сможете?

Нет не смогу ,мне нужен полный путь и все.Подскажите плиз.
Я конечно все смогу ,но времени нет нужно сделать быстро,так что жду ответа,к тому же здесь отвечают быстро.


Цитата

И для этого Вы выбрали среду, в которой, мягко говоря ... ? почему не, например, Access DB + Jet или ADO + Delphi? чистый же натив... 

Это же опять писать новую программу.Зачем?Заказчика я убедил что нужен MS SQL ,у них будет сервер и все спокойно будут работать с БД.(Раньше клиент был один,сейчас возникла потребность в многопользовательском использовании БД)
Просто пока я буду делать новую прогу ,пользователи смогут пока работать.

Цитата

И при этом не научились ПРАВИЛЬНО указывать язык, используя тег "Код"? Так что постоянно править приходится...

Не понял обьясните подробнее

Это сообщение отредактировал(а) SlaUr - 26.3.2008, 23:37
PM MAIL   Вверх
SlaUr
Дата 26.3.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 18.9.2003

Репутация: нет
Всего: 5



Нашел в инете
Неужели было трудно написать следующий код:
Код

Dim CurrentDBDir As String
Dim strDBPath As String
Dim strDBFile As String
strDBPath = CurrentDb.Name
strDBFile = Dir(strDBPath)
CurrentDBDir = Left$(strDBPath, Len(strDBPath) - Len(strDBFile))
 
CurrentDBDir- Путь

Самое смешное что Dir(strDBPath) показывает не путь а имя файла


Вопрос решен,все работает,Всем спасибо.

Akina,спасибо большое .
p.s.Спасибо что удалили прошлое "спасибо" (был под изрядным количеством пива и написал пошлость)

Это сообщение отредактировал(а) SlaUr - 28.3.2008, 07:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.