powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диалог открытия файла, выбора папки
20 сообщений из 20, страница 1 из 1
Диалог открытия файла, выбора папки
    #39107130
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех!
Давно и успешно использую код, основанный на примере отсюда: 2867129 .
В качестве значения strInitialDir всегда указывал имя конкретного диска или конкретной папки. Но появилась потребность указать в качестве начальной области поиска "Мой компьютер". Облазил весь форум, но так и не нашел как задать в этом случае strInitialDir?

Сильно не пинайте, сделайте скидку на возраст. :)
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107151
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xax_nv,
зависит от операционки , например в Win 7 это - C:\Users\Имя пользователя\Desktop , проделай такой трюк - жмешь Пуск-Компьютер, жмакаешь на кпопку мыши и тащишь Компьютер на рабочий стол, на рабочем столе создается при этом ярлык Компьютер , жмешь на нем правой кнопкой мыши и лезешь в свойства, на вкладке "Общие" указано "Расположение", это и есть путь к папке "Мой компьютер" :)
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107163
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за отклик!
К сожалению, на вкладке "Общие" указано расположение Ярлыка, а не самой папки. Да и путь этот для конкретного компьютера. Путь именно к папке Мой компьютер есть на вкладке Ярлык под кнопкой Расположение файла, но опять же на конкретном компьютере.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107197
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xax_nv,
если интересует диалог выбора папки, то тогда может использовать вариант, предложенный Joss-ом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Public Function fnGetFolder() As String

 Dim WSHShell As Object, objFolder As Object
 Dim P1, P2
 'Некоторые значения констант:
 ' P1=0 - отображаются Рабочий стол, Мой компьютер, Сеть и "Корзина"
 ' P1=1 - "Корзина" не отображается
' P1=2 - "Корзина" отображается, в "Моем компьютере" выводится дополнительно "Панель Управления"
 ' P2 определяет верхний уровень отображения. Его можно задать как строку символов
' Пример - "C:\". Или числом. Проверено для ХР
' Р2=0 - Рабочий стол P2=10 - Корзина
' P2=1 - Интернет Explorer (недопустимо) P2=11 - Главное меню
' P2=2 - Программы Р2=12 - Рабочий стол
' P2=3 - Панель управления (недопустимо) Р2=13 - Моя музыка
' P2=4 - Принтеры и факсы (недопустимо) Р2=14 - Мои видеозаписи
' P2=5 - Мои Документы Р2=15 - Рабочий стол
' P2=6 - Избранное Р2=16 - Рабочий стол
' P2=7 - Автозагрузка Р2=17 - Мой Компьютер
' P2=8 - недавние Документы Р2=18 - Сетевой окружение
' P2=9 - SendTo Р2=19 - NetHood
 ' Р2=20 - Fonts Р2=21 - Templates
 ' Более подробную информацию об объекте можно найти в документации (EN)

 On Error GoTo fnGetFolder_Error

 P1 = 0
 P2 = 17

 Set WSHShell = CreateObject("Shell.application")
 Set objFolder = WSHShell.BrowseForFolder(0, "Выбор папки", P1, P2)
 fnGetFolder = objFolder.self.Path
 ' имя папки содержится в objFolders.Title
 Set WSHShell = Nothing
 Set objFolder = Nothing

 On Error GoTo 0
Exit_fnGetFolder:
 Exit Function

fnGetFolder_Error:

 Set WSHShell = Nothing
 Set objFolder = Nothing
 Select Case Err.Number
 Case 91
 fnGetFolder = ""
 Resume Exit_fnGetFolder
 Case Else
 MsgBox "Ошибка " & Err.Number & " (" & Err.Description & ") в процедуре fnGetFolder"
 Resume Exit_fnGetFolder
 End Select

 End Function
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107214
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, попробую.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107519
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как диалог выбора папки применить можно. Но мне нужен еще и диалог выбора файла, и в нем тоже желательно начальной папкой задать Мой компьютер.
Пытался задать путь через поиск специальных папок, все ищет, кроме Мой компьютер и Сетевое окружение.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107768
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xax_nv,
В левом окне "Мой компьютер, а в правом Вы определяете что.(Вашу хотелку полностью не осуществил-только так)
В модуле:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                (ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1

Function StartOfFile(strNameFile As String)
Dim intResult As Integer
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
If intResult = 31 Then
    MsgBox "незарегистрированный тип"
End If
End Function

на событии:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim fd As FileDialog
Dim vrtSelectedItem As Variant, myPath
Set fd = Application.FileDialog(3)
   With fd
       .InitialFileName = "d:\excel\" 'по этому пути правое окно
       If .Show = -1 Then
          For Each vrtSelectedItem In .SelectedItems
                myPath = vrtSelectedItem 'путь к выбранному файлу
            Next vrtSelectedItem
        End If
      End With
 Set fd = Nothing
 StartOfFile (myPath)
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39107779
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диалог выбора папки и диалог выбора файла - это разные операции. Вариантов вызова диалога выбора файла - множество. Вот один из них
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  Dim dlgOpenFile As Object ' FileDialog
  Set dlgOpenFile = Application.FileDialog(4) 'msoFileDialogFolderPicker
  With dlgOpenFile
    .Filters.Clear
    .InitialFileName = CurrentProject.Path
    .AllowMultiSelect = False
    .Title = "ляляля"
    If (.Show = -1) And (.SelectedItems.Count > 0) Then
      МаёПоле.Value = .SelectedItems(1)
    End If
  End With
  Set dlgOpenFile = Nothing

А можно так Диалог выбора файла Вариант 2 ( by АлексейЕ )
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub test_dialog2()  
Dim strFile As String, strFilter As String  
strFilter = "MS Access Database (*.mdb)|*.mdb|Add-ins (*.mda)|*.mda|MDE-Files (*.mde)|*.mde|All Files (*.*)|*.*||"  
WizHook.Key = 51488399  
WizHook.GetFileName 0, "AppName", "DlgTitle", "", strFile, "c:\", strFilter, 0, 0, 0, True  
MsgBox strFile  
End Sub  


Хотя лично я предпочитаю Вариант 3 (WinApi)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
'--- модуль api_filedialog ------------------------  
Option Compare Database  
Option Explicit  
'Немножко адаптированный способ кедзо  
'оригинал: http://www.sql.ru/forum/actualthread.aspx?tid=113776&hl=declare+filedialog#874185  
' Вызов диалога:  
' strFile = InputFile("Загрузка документа", "Текстовые файлы (*.txt)" & vbNullChar & "*.txt" & vbNullChar & vbNullChar , "\\server\c")  
' If strFile <> "" Then ЗАГРУЖАЙСЯ (strFile)  
 
 
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 Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenFilename As OPENFILENAME) As Long  
 
 
'Ввод имени файла  
Public Function InputFile(ByVal strTitle As String, ByVal strFilter As String, Optional strInitialDir As String) As String  
Dim lngReturn As Long  
Dim intLocNull As Integer  
Dim strTemp As String  
Dim ofnFileInfo As OPENFILENAME  
Dim strFileName As String  
 
strFileName = String(256, 0)  
 
With ofnFileInfo  
.lStructSize = Len(ofnFileInfo)  
.lpstrFile = strFileName  
.lpstrFileTitle = String(256, 0)  
.lpstrInitialDir = strInitialDir  
.hwndOwner = Application.hWndAccessApp  
.lpstrFilter = strFilter  
.nFilterIndex = 1  
.nMaxFile = Len(strFileName)  
.nMaxFileTitle = ofnFileInfo.nMaxFile  
.lpstrTitle = strTitle  
.flags = &H1000 Or &H800  
.hInstance = 0  
.lpstrCustomFilter = String(255, 0)  
.nMaxCustFilter = 255  
.lpfnHook = 0  
End With  
 
lngReturn = GetOpenFileName(ofnFileInfo)  
If lngReturn = 0 Then  
strFileName = ""  
Else  
strTemp = Trim(ofnFileInfo.lpstrFile)  
intLocNull = InStr(strTemp, Chr(0))  
If intLocNull Then  
strTemp = Left(strTemp, intLocNull - 1)  
End If  
strFileName = strTemp  
End If  
InputFile = strFileName  
End Function  
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39108188
Фотография xax_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, спасибо за советы и примеры!
Создать окно выбора не проблема, проблема задать strInitialDir, т.е. сделать начальной папку Компьютер (или Мой компьютер).
Видимо придется оставить выбор за юзером, на панели слева.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39108462
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xax_nvДрузья, спасибо за советы и примеры!
Создать окно выбора не проблема, проблема задать strInitialDir, т.е. сделать начальной папку Компьютер (или Мой компьютер).
Видимо придется оставить выбор за юзером, на панели слева.
вот здесь было решение
http://stackoverflow.com/questions/19927852/vba-get-excel-filedialogopen-to-point-to-my-computer-by-default
не знаю насколько оно вам понравиться
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Диалог открытия файла, выбора папки
    #39706519
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил поднять старую ветку, чтоб не создавать новую.
Проблема: диалог выбора для открытия файла при помощи WinAPI. Вот текст чисто для 64-х битной версии офиса
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Option Compare Database
Option Explicit

Type OPENFILENAME
        lStructSize As Long
        hwndOwner As LongPtr
        hInstance As LongPtr
        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 LongPtr
        lpfnHook As LongPtr
        lpTemplateName As String
'#if (_WIN32_WINNT >= 0x0500)
        pvReserved As LongPtr
        dwReserved As Long
        FlagsEx As Long
'#endif // (_WIN32_WINNT >= 0x0500)
End Type

Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long


'---------------------------------------------------------------------------------------
' Procedure : GetDBFileNameDlg
' DateTime  : 19.01.2007 10:25
' Author      : DSonnyh
' Purpose    : Диалог задания пути к подключаемой базе MDB
'---------------------------------------------------------------------------------------
'
Public Function GetDBFileNameDlg64(hWn As Long, fName As String) As Integer

On Error GoTo Err_

Dim l As Long
Dim pOpenfilename As OPENFILENAME
Dim strPatchFi As String
Dim strFolderName As String
   
GetDBFileNameDlg64 = False
   
pOpenfilename.lStructSize = Len(pOpenfilename)
pOpenfilename.lpstrFilter = "*.mdb" + Chr(0) + "*.mdb" + Chr(0) + "*.*" + Chr(0) + "*.*" + Chr(0) + Chr(0)
pOpenfilename.lpstrFile = String(255, Chr(0))
pOpenfilename.nMaxFile = 255
pOpenfilename.lpstrTitle = "Выберите файл с таблицами базы данных"
pOpenfilename.hwndOwner = hWn
pOpenfilename.lpstrInitialDir = fName

l = GetOpenFileName(pOpenfilename)

If l <> 0 Then
   fName = pOpenfilename.lpstrFile
   GetDBFileNameDlg64 = True
End If

Exit_:
   Exit Function

Err_:
    MsgBox Err.Description
    Resume Exit_

End Function

' =======================================================
Public Sub testfo()
Dim strPath As String
Dim i As Long
        strPath = "C:\"
        i = GetDBFileNameDlg64(0, strPath)
End Sub

Запускаешь testfo() и смотришь под отладчиком. В строке
Код: vbnet
1.
   l = GetOpenFileName(pOpenfilename)

просто не происходит вызов диалога выбора файла. Программа просто проскакивает дальше без всяких сообщений.
А вот вариант АлексеяЕ работает прекрасно
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public Sub test_dialog2()  
Dim strFile As String, strFilter As String  
strFilter = "MS Access Database (*.mdb)|*.mdb|Add-ins (*.mda)|*.mda|MDE-Files (*.mde)|*.mde|All Files (*.*)|*.*||"  
WizHook.Key = 51488399  
WizHook.GetFileName 0, "AppName", "DlgTitle", "", strFile, "c:\", strFilter, 0, 0, 0, True  
MsgBox strFile  
End Sub  

Да и вариант
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public Sub dialog1()
  Dim dlgOpenFile As Object ' FileDialog
  Dim strFile As String
  Set dlgOpenFile = Application.FileDialog(1) 
  With dlgOpenFile
    .Filters.Clear
    .InitialFileName = CurrentProject.Path
    .AllowMultiSelect = False
    .Title = "&#235;&#255;&#235;&#255;&#235;&#255;"
    If (.Show = -1) And (.SelectedItems.Count > 0) Then
      strFile = .SelectedItems(1)
    End If
  End With
  Set dlgOpenFile = Nothing

End Sub

работает нормально.
А вот WinAPI в 64-х битной версии Access запускаться не хочет. Кто знает, в чём дело?
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706531
Игортан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss,

у меня была проблема, когда код не отрабатывал в "чужом" для системы/офиса файле. Это вин 7 и выше
Скачанный или переданный человеку от меня...
Как раз на FileDialog и перешел, что бы не "болеть"...
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706559
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss
Код: vbnet
1.
Public Function GetDBFileNameDlg64(hWn As Long, fName As String) As Integer

Выделенное не того типа. Вообще-то должна быть ошибка времени исполнения связанная с неявным преобразованием типа.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706561
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сайте Leadersoft.ru есть пример Диалог открытия файлов Microsoft Office Он использует ту же библиотеку

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
'Функция открытия файла
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" ( _
         FILENAME As OPENFILENAME) As Boolean

'Функция сохранения файла
Declare Function apiGetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" ( _
         FILENAME As OPENFILENAME) As Boolean

и он работает но как-то кривовато. Пока не разобрался в чём дело
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706562
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joss, вот же, ты сам приводил
Joss LongLong — тип данных LongLong — это 64-разрядные целые числа со знаком, которые доступны только в 64-разрядных версиях пакета Office. Используйте тип LongLong для 64-разрядных целых чисел. Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявное преобразование типа LongLong в целочисленные данные меньшего размера не допускается.
Access. Переход с 32-х разрядной системы на 64-х разрядную. (Примерное реководство)
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706565
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургJoss
Код: vbnet
1.
Public Function GetDBFileNameDlg64(hWn As Long, fName As String) As Integer

Выделенное не того типа. Вообще-то должна быть ошибка времени исполнения связанная с неявным преобразованием типа. Поменял тип. Пробовал LongPtr. Ничего не изменилось. Диалог не вызывается
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706566
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургJoss, вот же, ты сам приводил
Joss LongLong — тип данных LongLong — это 64-разрядные целые числа со знаком, которые доступны только в 64-разрядных версиях пакета Office. Используйте тип LongLong для 64-разрядных целых чисел. Для явного присвоения значений типа LongLong (включая тип LongPtr на 64-разрядных платформах) целочисленным типам данных меньшего размера должны использоваться функции преобразования. Неявное преобразование типа LongLong в целочисленные данные меньшего размера не допускается.
Access. Переход с 32-х разрядной системы на 64-х разрядную. (Примерное реководство) Проморгал. Правил по живому.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706568
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никаких ошибок компилятор не Выдаёт, но окно выбора файлов не выводит...
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39706581
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JossНикаких ошибок компилятор не Выдаёт, но окно выбора файлов не выводит...Увы больше предложений нет, т.к. не на чем тестировать.
...
Рейтинг: 0 / 0
Диалог открытия файла, выбора папки
    #39758620
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь 21780464 даётся ссылка на сайт, где эта проблема решена. А вот здесь - 19479482 код с этого сайта.
Проверено пол Access 2010 + 64 bit
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Диалог открытия файла, выбора папки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]