07. november 2001 - 09:18Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
\"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.
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.
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.
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
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
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.