Здравствуйте, Slider, Вы писали:
S>Есть проблемка такого рода. Есть такая штука в access DoCmd.TransferText acExportDelim,"Имя спецификации","Имя таблицы", "Имя файла",
S>которая экспортирует таблицу в txt или csv файлик. В "В имя файла" вводится путь и имя файла. Это должно забиваться железно. Как можно задать путь сохранения интерфейсно.
S> Проблема состоит в том что мне нужно создать условия для того чтобы пользхователь смог выбрать куда он будет сохранять этот файлик. Самый простой способ который я смог гы реализовать это заставить пользователя вбивать путь ручками в текстовое поле на форме:) но это не устраивает. Нужно чтобы появлялось окно Save as.
В MSDN есть
пример на C++. На VB/VBA он буит примерно так выглядеть.
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (ByRef 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
Private Const OFN_PATHMUSTEXIST As Long = &H800
Private Const OFN_FILEMUSTEXIST As Long = &H1000
Sub GetOpenFileNameTest()
Dim ofn As OPENFILENAME ' common dialog box structure
Dim szFile As String ' buffer for file name
Dim hf As Long ' file handle
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = 0&
ofn.lpstrFile = vbNullChar & Space(259)
ofn.nMaxFile = Len(ofn.lpstrFile)
ofn.lpstrFilter = "All" & vbNullChar & "*.*" & vbNullChar & "Text" & vbNullChar & "*.TXT" & vbNullChar & vbNullChar
ofn.nFilterIndex = 1
ofn.flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST
If GetOpenFileName(ofn) <> 0& Then
szFile = Left$(ofn.lpstrFile, InStr(1, ofn.lpstrFile, vbNullChar) - 1)
MsgBox "Выбран файл: " & Mid$(szFile, ofn.nFileOffset + 1) & _
", находящийся в папке: " & Left$(szFile, ofn.nFileOffset)
End If
End Sub
Этот пример, показывает окно для открытия файла, чтоб показать окно для сохранения, нужно использовать функцию GetSaveFileName, объявление и использование которой такое же как и у GetOpenFileName (но пример там сложный дюже). Можешь поменять название функции в примере,
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (ByRef 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
Private Const OFN_PATHMUSTEXIST As Long = &H800
Private Const OFN_FILEMUSTEXIST As Long = &H1000
Sub GetSaveFileNameTest()
Dim ofn As OPENFILENAME ' common dialog box structure
Dim szFile As String ' buffer for file name
Dim hf As Long ' file handle
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = 0&
ofn.lpstrFile = vbNullChar & Space(259)
ofn.nMaxFile = Len(ofn.lpstrFile)
ofn.lpstrFilter = "All" & vbNullChar & "*.*" & vbNullChar & "Text" & vbNullChar & "*.TXT" & vbNullChar & vbNullChar
ofn.nFilterIndex = 1
ofn.flags = OFN_PATHMUSTEXIST 'Чтоб пользователь мог ввести имя с клавиатуры убираем OFN_FILEMUSTEXIST
If GetSaveFileName(ofn) <> 0& Then
szFile = Left$(ofn.lpstrFile, InStr(1, ofn.lpstrFile, vbNullChar) - 1)
MsgBox "Выбран файл: " & Mid$(szFile, ofn.nFileOffset + 1) & _
", находящийся в папке: " & Left$(szFile, ofn.nFileOffset)
End If
End Sub
и всё будет работать.
Excel'е есть Application.GetSaveFileName, который инкапсулирует работу оной функции, но в Access я такой не нашёл. Есть ещё Control "Microsoft Windows Common Dialog Control", но если у тебя формы нет, то лучше пользовать приведённый пример.
S> Но это еще пол беды:) Дело в том что когда пользователь выбрал в этом окне скажем "Рабочий стол" для примера на нем должна появиться папочка ну скажем test и вот в нее должен уже попасть наш файлик. Как это можно реализовать ? Помогитте плиз ....Я уже голову сломал не знаю как сделать......
Ну тут совсем просто, создать папку MkDir, а полный путь можно получить присоединив к пути открытого файла, имя папки, которую ты хочешь создать.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков