All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как вызвать диалог выбора файла?
Author Previous Topic Topic Next 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  Visit Digitall's Homepage
quote:
Originally posted by lantari

Как из программы на VBA (макросе) в Visio 2000 вызвать окно диалога выбора (открытия) файла?


Application.DoCmd (visCmdFileOpen)
Go to Top of Page

lantari

Russia
20 Posts

Posted - 11/18/2003 :  12:50:29
Это немного не то. Не нужно открывать документ Visio, нужно получить имя ЛЮБОГО файла (txt, xls) для далнейшей работы с именем и самим файлом.
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 11/18/2003 :  12:57:18  Visit Digitall's Homepage
quote:
Originally posted by lantari

Это немного не то. Не нужно открывать документ Visio, нужно получить имя ЛЮБОГО файла (txt, xls) для далнейшей работы с именем и самим файлом.


Тогда вот.
http://www.mvps.org/visio/VBA.htm
Первый пример сверху.
Выбор директории, файла и т.д.
Go to Top of Page

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 вылетает.
Go to Top of Page

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

Если делать все, как положено, вроде вылетать не должно.
Go to Top of Page

lantari

Russia
20 Posts

Posted - 11/19/2003 :  10:53:03
Спасибо. Всё заработало так как надо. В своих эксперементах я добился, что бы ошибка не возникала, но и окно диалога у меня не показывалось, а функция возвращала всё время 0. Наверно с начальными параметрами переборщил.
Ещё раз спасибо.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)