Avatar billede norway Nybegynder
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.
Avatar billede fdata Forsker
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester