Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

Аналог OpenDialog в VBA   Найти похожие ветки 

 
ilya39 ©   (2005-11-10 12:29) [0]

Понадобилось быстро состряпать макрос на VBA, с коим не особо знаком. Подскажите есть может какая функция или свойство какого - либо объекта для вызова диалога открытия файла в VBA?


 
TUser ©   (2005-11-10 13:03) [1]

Если FileSystemObject не дает такой возможности, то придется проэкспортировать WinApi функцию CreateDialog и иже с ней.


 
КаПиБаРа ©   (2005-11-10 13:12) [2]

Function ExtractFilePath(FileName As String) As String
Dim fs, f
 ExtractFilePath = ""
 Set fs = CreateObject("Scripting.FileSystemObject")
 If fs.FileExists(FileName) Then
   Set f = fs.GetFile(FileName)
   ExtractFilePath = f.ParentFolder
 End If
 Set fs = Nothing
 Set f = Nothing
End Function

Function OpenDialog(ATitle As String, AInitFolger As String) As String
Dim fs, f
 OpenDialog = ""
 Set fs = CreateObject("Scripting.FileSystemObject")
 If fs.FolderExists(AInitFolger) Then
   Set f = fs.GetFolder(AInitFolger)
   ChDrive (f.Drive)
   ChDir (AInitFolger)
 End If
   OpenDialog = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "Подскажите куда спрятали файл?") "получимфайл в который згрузим
   If Not fs.FileExists(OpenDialog) Then
   OpenDialog = ""
   End If
 Set fs = Nothing
 Set f = Nothing
End Function

Function ExistsCustomProperty(AName As String) As Boolean
 ExistsCustomProperty = False
 For Each p In ActiveWorkbook.CustomDocumentProperties
   If p.Name = AName Then
     ExistsCustomProperty = True
   End If
 Next
End Function

Function OpenDialogExecute(ATitle As String) As String
Const LASTDIR As String = "LastDir"

 If Not ExistsCustomProperty(LASTDIR) Then
   ActiveWorkbook.CustomDocumentProperties.Add _
     Name:=LASTDIR, _
     LinkToContent:=False, _
     Type:=msoPropertyTypeString, _
     Value:=ActiveWorkbook.Path
 End If
   
 OpenDialogExecute = OpenDialog(ATitle, ActiveWorkbook.CustomDocumentProperties(LASTDIR).Value)
 If OpenDialogExecute <> "" Then
   ActiveWorkbook.CustomDocumentProperties("LastDir").Value = ExtractFilePath(OpenDialogExecute)
 End If
 
End Function

Private Sub CommandButton2_Click()
Dim Myfile1 As String " файл в котором работаем
Dim Mypath1 As String " путь к этому файлу
Dim Myfile As String " файл в который скачиваем
Dim Mypath As String " путь к этому файлу
Dim Mylist As String " наименование листа в который переносим информацию
Dim Mylist1 As String " наименование листа
Dim den As Integer
Dim i, j As Integer "переменная цикла
Dim bob
i = MsgBox("Вы проверили данные?", vbYesNo)
If i = 7 Then
   Exit Sub
End If
"убераем обновление экрана
Application.ScreenUpdating = False

Myfile1 = ActiveWorkbook.Name
Mypath1 = ActiveWorkbook.Path
Mylist1 = ActiveWorkbook.ActiveSheet.Name
Myfile = OpenDialogExecute("Подскажите куда спрятали файл?") "получимфайл в который згрузим
...


 
vertal ©   (2005-11-10 20:25) [3]

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

Private Type CHOOSECOLOR
  lStructSize As Long
  hwndOwner As Long
  hInstance As Long
  rgbResult As Long
  lpCustColors As Long
  Flags As Long
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Private Declare Function GetSaveFileNameA Lib "comdlg32.dll" (pOpenfilename As OpenfileName) As Long
Private Declare Function GetOpenFileNameA Lib "comdlg32.dll" (pOpenfilename As OpenfileName) As Long
Private Declare Function ChooseColorA Lib "comdlg32.dll" (pChoosecolor As CHOOSECOLOR) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long

Public Function OpenFileDialog(Optional ByVal Types As String, Optional Title As String, Optional InitialDir As String, Optional DefaultExt As String) As String
"Подпрограмма:     OpenFileDialog
"Что делает:       Показывает стандартный диалог открытия файла с заданными
   "параметрами
"Параметры:
"[Types] — строка фильтров, где каждому фильтру соответствует пара строк
   "описание-маска, разделённых символом с кодом 0 — vbNullChar.
   "Сами эти пары, в свою очередь, также отделены vbNullChar,
   "в конце идёт два vbNullChar подряд.
   "Фильтр — это выбранная строка в combobox под основным полем
   "диалога («Все файлы (*.*)», «Файлы рисунков (*.BMP)» и пр.)
   "Если параметр не задан или равен 0, используется фильтр «Все файлы (*.*)».
"[Title] — заголовок диалога. Если не задан, используется «Открытие файла».
"[InitialDir] — каталог, открывающийся при появлении диалога. Не задан — текущий.
"[DefaultExt] — расширение, присоединяемое к файлу, если пользователь
   "набирал имя файла в поле ввода «Имя файла» и не указал расширение.
   "Рекомендуется указать — опыт показал, что при указанном параметре
   "и установленном фильтре, отличном от «Все файлы», набор
   "имени файла приводит к установке расширения, определяемого фильтром,
   "даже когда он (фильтр) не совпадает с DefaultExt. Это наиболее
   "разумное поведение диалога по отношению к пользователю.
"Возвращает:       полное имя (с путём) выбранного файла
"Программист:      Каньковски Пётр
"Комментарии:      ф-ция даёт доступ далеко не ко всем возможностям
   "диалога Windows, но её вполне достаточно для большинства задач.
   "Не поддерживаются: пользовательские фильтры (используются
   "крайне редко), выделение нескольких файлов, внедрение своих
   "элементов управления в стандартные диалоги.
   "Если пользователь нажал «Отмена», функция возвратит пустую строку.
"Связи:            AllTypes, OpenfileName, GetOpenFileNameA, GetActiveWindow
"Примеры:
"OpenFileDialog("Файлы рисунков (*.BMP)" + vbNullChar + "*.bmp" + vbNullChar+ _
"    "Все файлы (*.*)" + vbNullChar + "*.*" + vbNullChar + vbNullChar, _
"    "Выберите рисунок для вставки", "C:\", "bmp")
Dim OFN As OpenfileName
On Error GoTo 1
  If Len(Types) = 0 Then Types = ConstructType("*", "All files")
  With OFN
     .lpstrFilter = Types ": OFN.nFilterIndex = 2 — чтобы установить не первый фильтр при открытии диалога
     .lpstrFile = String$(500, vbNullChar)
     .nMaxFile = 500
     .Flags = &H1804 "Файл и путь должны существовать, спрятать флажок ReadOnly
     .lpstrTitle = Title
     .lpstrInitialDir = InitialDir
     .lpstrDefExt = DefaultExt
     .hwndOwner = GetActiveWindow
     .lStructSize = LenB(OFN)
     If GetOpenFileNameA(OFN) Then OpenFileDialog = IIf(InStr(.lpstrFile, vbNullChar), Left(.lpstrFile, InStr(.lpstrFile, vbNullChar) - 1), .lpstrFile)
  End With
  Exit Function
1: MsgBox Err.Description, vbCritical, "OpenFileDialog: unexpected error!"
End Function


 
ilya39 ©   (2005-11-11 12:29) [4]

Всем спасибо конечно, но мне больше понравилось использовать Microsoft Common Dialog Control...


 
КаПиБаРа ©   (2005-11-11 12:35) [5]

ilya39 ©   (11.11.05 12:29) [4]
Microsoft Common Dialog Control.

Это хто такая?

Опубликуй в каких позах ты ее использовал :)


 
ilya39 ©   (2005-11-11 13:29) [6]

Это в Additional Controls. Живет она в comdlg32.ocx Использовал по назначению :)



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.042 c
8-1120592290
ronyn
2005-07-05 23:38
2005.12.04
Где чтоможно узнать по DVD,MPEG-2?


6-1125063265
Русланка
2005-08-26 17:34
2005.12.04
А как загрузить в Memo содержимое текстового файла в интернете


1-1131520720
Piero
2005-11-09 10:18
2005.12.04
Обмен данными между приложениями


2-1131904644
on-lite
2005-11-13 20:57
2005.12.04
Фильтр отображения TDBGrid


2-1132248926
Юра Войтюк
2005-11-17 20:35
2005.12.04
ПОМОГИТЕ ЧАЙНИКУ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский