09. november 2007 - 10:18
Der er
1 kommentar
Søk etter del av filnavn
Ønsker å lage en dialog boks hvor jeg kan søke etter en del av et fil navn. Ønsker også at jeg kan legge inn default søkemappe. Når filen er funnet skal jeg kunne åpne den direkte fra søkeresultatet.
10. november 2007 - 19:00
#1
Du kan bruge den klassiske "File Open" dialog. Her kan du jo skrive en del af filnavnet i feltet Filename/Filnavn. Søgemappen kan du fastlægge i kaldet:
Option Compare Database
Option Explicit
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
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Function SimpleGetOpenFileName(Title As String, InitDir As String, FilterList As String) As String
Dim msaof As OPENFILENAME
Dim intRet As Integer
Dim strRet As String
Dim StrFilter As String
Dim S1 As String
Dim FCount As Integer
Dim i As Integer
Dim p As Integer, p2 As Integer
FCount = 0
For i = 1 To Len(FilterList)
If Mid(FilterList, i, 1) = "#" Then FCount = FCount + 1
Next i
StrFilter = ""
For i = 1 To FCount
p = InStr(1, FilterList, "#")
S1 = Left(FilterList, p - 1)
StrFilter = StrFilter & S1 & vbNullChar
p2 = InStr(1, S1, "(")
StrFilter = StrFilter & Mid(S1, p2 + 1, Len(S1) - p2 - 1) & vbNullChar
FilterList = Right(FilterList, Len(FilterList) - p)
Next i
StrFilter = StrFilter & vbNullChar
With msaof
.lStructSize = Len(msaof)
.lpstrTitle = Title
.lpstrInitialDir = InitDir
.lpstrFilter = StrFilter
.nFilterIndex = 1
.lpstrFile = String$(255, 0)
.nMaxFile = 255
End With
intRet = GetOpenFileName(msaof)
If intRet Then
strRet = msaof.lpstrFile
p = InStr(1, strRet, vbNullChar)
strRet = Left(strRet, p - 1)
End If
SimpleGetOpenFileName = strRet
End Function
Sub Test_SimpleGetOpenFileName()
Dim FilterList As String
Dim FileName As String
FilterList = "All files (*.*)#Excel sheets (*.xls)#Word docs (*.doc)#"
FileName = SimpleGetOpenFileName("Open", "C:\", FilterList)
If FileName = "" Then
MsgBox "Abort"
Else
MsgBox "<" & FileName & ">"
End If
End Sub