Страница: 1 |
Страница: 1 |
Вопрос: Word-ChangeFileOpenDirectory
Добавлено: 12.09.04 12:02
Автор вопроса: Дмитрий С. | Web-сайт:
Делаю макрос, который должен при закрытии документа сохранять копию в указанную папку. Застопорился вот на чем. Когда создаётся новый документ,а затем изменяется, то при закрытии его без предварительного сохранения вылетает сообщение об сохранении. А если я его перед закрытием сохранил в макросе, то сообщения не будет, документ просто закроется, и пользователь не поймет где документ (хотя я то знаю). Сделал ActiveDocument.Saved = False. Диалог о сохранении вылетает, но диалог выбора имени и места сохранения файла не вылетает. То есть он сохраняется опять по моему пути. Как вызвать диалог сохранения файла?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 12.09.04 22:20
Используй API, в модуле:
Option Explicit
Public Enum EOpenFile
OFN_ALLOWMULTISELECT = &H200
OFN_CREATEPROMPT = &H2000
OFN_ENABLEHOOK = &H20
OFN_ENABLETEMPLATE = &H40
OFN_ENABLETEMPLATEHANDLE = &H80
OFN_EXPLORER = &H80000
OFN_EXTENSIONDIFFERENT = &H400
OFN_FILEMUSTEXIST = &H1000
OFN_HIDEREADONLY = &H4
OFN_LONGNAMES = &H200000
OFN_NOCHANGEDIR = &H8
OFN_NODEREFERENCELINKS = &H100000
OFN_NOLONGNAMES = &H40000
OFN_NONETWORKBUTTON = &H20000
OFN_NOREADONLYRETURN = &H8000
OFN_NOTESTFILECREATE = &H10000
OFN_NOVALIDATE = &H100
OFN_OVERWRITEPROMPT = &H2
OFN_PATHMUSTEXIST = &H800
OFN_READONLY = &H1
OFN_SHAREAWARE = &H4000
OFN_SHOWHELP = &H10
End Enum
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
'-----------------------------------------------
В месте, где надо вызвать диалог сохранения:
Private Sub cmdShowOpen()
 im OFN As OPENFILENAME
With OFN
.lStructSize = Len(OFN)
.hInstance = App.hInstance
.lpstrFilter = "Файлы Excel (*.xls)" & vbNullChar & "*.xls" & String$(2, 0)
.nFilterIndex = 1
.lpstrFile = String$(255, 0)
.nMaxFile = 255
.lpstrFileTitle = String$(255, 0)
.nMaxFileTitle = 255
.lpstrInitialDir = App.Path
.lpstrTitle = "Сохранение отчета"
.flags = OFN_EXPLORER
End With
If GetSaveFileName(OFN) <> 0 Then
'Делаешь здесь сохранение, OFN.lpstrFile
'- это полный путь и имя файла
MsgBox OFN.lpstrFile
End If
End Sub
Номер ответа: 2
Автор ответа:
Stas2k
Вопросов: 6
Ответов: 16
Профиль | | #2
Добавлено: 13.09.04 05:37
Попробуй следующее:
dlgAnswer = Dialogs(wdDialogFileSaveAs).Show
Если dlgAnswer = -1, то пользователь сохранил файл, и сам будет знать где,
Если dlgAnswer = 0, то пользователь либо закрыл диалог, либо нажал Отмена.
Номер ответа: 3
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #3
Добавлено: 13.09.04 13:00
Если этот документ не был ранее открыт, т.е. он был создан "с нуля" и ещё не сохранялся, то просто вызови
ActiveDocument.Save
Я не проверял, не по идее обязательно должно сработать.
Номер ответа: 4
Автор ответа:
Дмитрий С.
ICQ: 315-160-504
Вопросов: 5
Ответов: 7
Web-сайт:
Профиль | | #4
Добавлено: 13.09.04 14:06
Всем спасибо,все варианты подходят.
Поэксперементирую...