Author |
Topic |
|
lantari
Russia
20 Posts |
Posted - 11/18/2003 : 11:30:58
|
Как из программы на VBA (макросе) в Visio 2000 вызвать окно диалога выбора (открытия) файла? |
|
Digitall
Russia
389 Posts |
Posted - 11/18/2003 : 12:34:58
|
quote: Originally posted by lantari
Как из программы на VBA (макросе) в Visio 2000 вызвать окно диалога выбора (открытия) файла?
Application.DoCmd (visCmdFileOpen) |
|
|
lantari
Russia
20 Posts |
Posted - 11/18/2003 : 12:50:29
|
Это немного не то. Не нужно открывать документ Visio, нужно получить имя ЛЮБОГО файла (txt, xls) для далнейшей работы с именем и самим файлом. |
|
|
Digitall
Russia
389 Posts |
Posted - 11/18/2003 : 12:57:18
|
quote: Originally posted by lantari
Это немного не то. Не нужно открывать документ Visio, нужно получить имя ЛЮБОГО файла (txt, xls) для далнейшей работы с именем и самим файлом.
Тогда вот. http://www.mvps.org/visio/VBA.htm Первый пример сверху. Выбор директории, файла и т.д. |
|
|
lantari
Russia
20 Posts |
Posted - 11/19/2003 : 08:26:14
|
quote: Originally posted by Digitall
Тогда вот. http://www.mvps.org/visio/VBA.htm Первый пример сверху. Выбор директории, файла и т.д.
Используя эту информацию можно самостоятельно написать функцию окна диалога для выбора файла, только это будет долго и громоздко. Нельзя ли как нибудь вызвать стандартное окно диалога выбора файла? Пробую использовать функцию API GetOpenFileName, но постоянно возникает ошибка и Visio вылетает. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 11/19/2003 : 09:46:30
|
В статье из MSDN Enhance Your Apps with Common Dialogs: Part I Mastering the Basics of the Windows Open and Save As Dialog Boxes By Romke Soldaat
вроде неплохо все описывается. В частности, объявление функции
Private Declare Function GetOpenFileName _ Lib "COMDLG32.DLL" Alias "GetOpenFileNameA" _ (pOpenfilename As OPENFILENAME) As Long Private Declare Function GetSaveFileName _ Lib "COMDLG32.DLL" Alias "GetSaveFileNameA" _ (pOpenfilename As OPENFILENAME) As Long
Объявление структур
Private 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
И собственно использование
Sub GetFileFromAPI () Dim OFN As OPENFILENAME With OFN .lStructSize = Len(OFN) ' Size of structure. .nMaxFile = 260 ' Size of buffer. ' Create buffer. .lpstrFile = String(.nMaxFile - 1, 0) Ret = GetOpenFileName(OFN) ' Call function. If Ret <> 0 Then ' Non-zero is success. ' Find first null char. n = InStr(.lpstrFile, VbNullChar) ' Return what's before it. MsgBox Left(.lpstrFile, n - 1) End If End With End Sub
Если делать все, как положено, вроде вылетать не должно.
|
|
|
lantari
Russia
20 Posts |
Posted - 11/19/2003 : 10:53:03
|
Спасибо. Всё заработало так как надо. В своих эксперементах я добился, что бы ошибка не возникала, но и окно диалога у меня не показывалось, а функция возвращала всё время 0. Наверно с начальными параметрами переборщил. Ещё раз спасибо. |
|
|
|
Topic |
|