Avatar billede ole-ii Nybegynder
07. november 2001 - 09:18 Der er 10 kommentarer og
1 løsning

Hvordan finder jeg path+filnavn ?

Jeg ønsker at gemme sti+filnavn på en af brugeren valgt fil i et felt i min en tabel. Det skal være en .lnk fil.
Man kan naturligvis bare taste det ind, ex. \"C:\\MyFiles\\ThisFile.lnk\". men det ville være rart at kunne klikke på en Browse knap, og så kunne benytte Windows browse funktion til at fræse rundt i diverse mapper og vise alle *.lnk filer.
Avatar billede know_it Nybegynder
07. november 2001 - 09:25 #1
Jeg forstår ikke helt hvad du mener????
Avatar billede nih Novice
07. november 2001 - 09:33 #2
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 SelectFile() As String
\' Opens the Open dialog with default values.

    Dim msaof As OPENFILENAME
    Dim intRet As Integer
    Dim strRet As String
      \'initialize sensible fields of OPENFILENAME
  With msaof
      .lpstrInitialDir = \"C:\\\"
      .lStructSize = Len(msaof)
      .lpstrTitle = \"Select Excel File\"
      .lpstrFilter = \"*.lnk filer\" & vbNullChar & \"*.lnk\" & vbNullChar & vbNullChar
      .lpstrFile = String$(255, 0)
      .nMaxFile = 255
  End With
 
    intRet = GetOpenFileName(msaof)
    If intRet Then
        strRet = Mid(msaof.lpstrFile, 1, InStr(msaof.lpstrFile, Chr(0)) - 1)
    End If
   
    SelectFile = strRet
End Function

Kopier ovenstående ind i et modul.

Niels
Avatar billede nih Novice
07. november 2001 - 09:59 #3
Jeg er ikke vb specialist, og efter at have tjekket koden viser det sig at koden retunerer filnavnet som genvejen henviser til.....

Håber der en anden der kan hjælpe med det problem..

Niels
Avatar billede ole-ii Nybegynder
07. november 2001 - 11:17 #4
\"know_it\" vidste ikke helt hvad jeg mente, så jeg prøver på en anden måde:
Forestil dig, at du har en form med et input felt, format String. Heri skal indtastes navnet på en .lnk fil incl. stinavn, fx \"C:\\MyFiles\\ThisFile.lnk\". Det kan man naturligvis taste ind, men så er der jo for det første ingen garanti for at filen rent faktisk findes i stien, desuden er det møjbesværligt. Derfor bør der være en Browse knap som man kan klikke på og herved får en pop-up, lissom når man i Word vil åbne en fil. Da får man jo en Open-pop-up, hvor den viser alle *.doc filer. Min pop-up skal bare vise *.lnk filer, men ellers er princippet det samme.
Resultatet skal dog ikke være en Handle til den fundne fil, men derimod, som sagt før, NAVNET på den fundne fil, incl. stinavnet.
Håber dette forklarer problemet bedre.
Avatar billede nih Novice
07. november 2001 - 12:14 #5
ole-ii ->  Det har garanteret taget Mikrosoft laaaang tid at få deres .lnk filer til at referere til den oprindelige fil, men du vil have det modsat.....  OK ;)

With blokken fra mit afviste svar skal se sådan ud:
With msaof
      .Flags = &H100000
      .lpstrInitialDir = \"C:\\\"
      .lStructSize = Len(msaof)
      .lpstrTitle = \"Find File\"
      .lpstrFilter = \"*.lnk filer\" & vbNullChar & \"*.lnk\" & vbNullChar & vbNullChar
      .lpstrFile = String$(255, 0)
      .nMaxFile = 255
  End With

Det er linjen \'.Flags = &H100000\' der gør hele forskellen.

Niels
Avatar billede macjensen Nybegynder
07. november 2001 - 12:17 #6
Sti og fil navn har du i nih\'s eksempel, nemlig strRet. Filteret til din .lnk fil har du også :
.lpstrFilter = \"*.lnk filer\" & vbNullChar & \"*.lnk\" & vbNullChar & vbNullChar.
Hvor det er *.lnk filer der bestemmer hvilken filtype du skal vælge.
Hvis du bruger      .lpstrFilter = \"*.*\" & vbNullChar & \"*.*\" & vbNullChar & vbNullChar, så får du alle filer af alle typer.

Avatar billede nih Novice
07. november 2001 - 12:50 #7
Du skal bare kopiere hele skidtet ind i dit formular-modul.
herefter opretter du en eks. en textbox med en dobbeltklik event

Private Sub txtNavn_DblClick(Cancel As Integer)
On Error Resume Next
    txtNavn.Value = SelectFiler
End Sub

Niels
Avatar billede ole-ii Nybegynder
07. november 2001 - 17:23 #8
Hej Niels. Det ser lovende ud. Det virker bare ikke helt.

Jeg har en form der hedder Form1
I den har jeg et felt der hedder txtProgramLink. Det er det der skal indeholde sti+navn.
Jeg har også en knap der hedder cmdLinkBrowse. Det er den man skal klikke på for at starte pop-up\'en og derved få fyldt txtProgramLink.Value.

I toppen af kodedelen i Form1 har jeg lagt den kode du gav mig. Nu ser den sådan ud:

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

Herefter kommer alle mine Private Sub\'s for diverse kontroller. Bla. knappen;

Private Sub cmdLinkBrowse_Click()
On Error Resume Next
    txtProgramLink.Value = SelectFile
End Sub


Til allersidst har jeg lagt selve Function SelectFile:

Function SelectFile() As String
\' Opens the Open dialog with default values.

    Dim msaof As OPENFILENAME
    Dim intRet As Integer
    Dim strRet As String
     
    \'initialize sensible fields of OPENFILENAME
    With msaof
        .Flags = &H100000
        .lpstrInitialDir = \"C:\\\"
        .lStructSize = Len(msaof)
        .lpstrTitle = \"Find File\"
        .lpstrFilter = \"*.lnk filer\" & vbNullChar & \"*.lnk\" & vbNullChar & vbNullChar
        .lpstrFile = String$(255, 0)
        .nMaxFile = 255
    End With
 
    intRet = GetOpenFileName(msaof)
    If intRet Then
        strRet = Mid(msaof.lpstrFile, 1, InStr(msaof.lpstrFile, Chr(0)) - 1)
    End If
   
    SelectFile = strRet
End Function

Det virker bare ikke. Når jeg klikker på knappen får jeg følgende fejl:

\"Udtrykket VedKlik, du indtastede som indstilling af hændelsesegenskaben, gav en fejl; Private Enum and user defined types cannot be used as parameters or return types for public procedures, public data members, or fields of public user defined types.\"

Måske du kunne sende en Access fil til mig der kun indeholder lige det jeg skal bruge. Min mail er ole-ii@talent.dk

Ole
Avatar billede ole-ii Nybegynder
07. november 2001 - 17:36 #9
Evt. send mig en mail, så skal jeg sende dig en access fil med de felter vi taler om.
Bruger du Access-98 eller -2000 ?
Avatar billede nih Novice
07. november 2001 - 22:12 #10
Er sendt Access 2000

Koden skal indsættes i et seperat modul !!!!

Så blev jeg igen lidt klogere ;o)

Niels
Avatar billede ole-ii Nybegynder
08. november 2001 - 09:30 #11
Nu virker det!
Tak for hjælpen.

Ole
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