Newsgroup: it.comp.appl.access
Titolo: pulsante su maschera  per cercare file e inserire il percorso relativo in un campo di una tabella

Buongiorno,
è possibile con un comando poter avere la finestra di apertura file e 
dopo avere individuato un file (tipo una scansione di una fattura) 
memorizzare il relativo percorso in un campo di una tabella?
Grazie
Gianni


Ciao Gianni....
crea un modulo nuovo e incolla il seguente codice:
 
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_PATHMUSTEXIST = &H800
 
Public Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustomFilter 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
 
Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
        Alias "GetOpenFileNameA" (lpofn As OPENFILENAME) As Long
 
Public Sub ShowFile(frm As Form, fb As OPENFILENAME)
    Dim fName As String
    Dim result As Long
    Dim path As String
    path = "C:\"
    With fb
        .lStructSize = Len(fb) 'Size of the structure
        .hwndOwner = frm.Hwnd  'Handle to window opening the dialog
        .hInstance = 0         'Handle to calling instance (not
needed)
        .lpstrFilter = "Tutti i file (*.*)" & vbNullChar & "*.*" &
vbNullChar _
 
        '.lpstrCustomFilter is ignored -- unused string
        .nMaxCustomFilter = 0
        .nFilterIndex = 1                           'Default filter is
the first one (Text Files, in this case)
        .lpstrFile = Space(256) & vbNullChar        'No default
filename. Also make room for received path and _
                                                     filename of the
user's selection.
        .nMaxFile = Len(.lpstrFile)
        .lpstrFileTitle = Space(256) & vbNullChar   'Make room for
filename of the user's selection
        .nMaxFileTitle = Len(.lpstrFileTitle)
        .lpstrInitialDir = path & vbNullChar        'Initial directory
is C:\
        .lpstrTitle = "Scelta File" & vbNullChar    'Title of file
dialog
        .flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or
OFN_HIDEREADONLY
        .nFileOffset = 0                            'The rest of the
options aren't needed.
        .nFileExtension = 0
        '.lpstrDefExt is ignored -- unused string
        .lCustData = 0
        .lpfnHook = 0
        '.lpTemplateName is ignored -- unused string
    End With
    result = GetOpenFileName(fb)
    If result <> 0 Then
        fName = Left(fb.lpstrFile, InStr(fb.lpstrFile, vbNullChar) -
1)
    End If
End Sub
 
Ora all'inizio del codice (subito dopo Option Compare Database) della
maschera che contiene il pulsante incolla:
Dim fb As OPENFILENAME
Dim RetVal As Long
 
Adesso incolla questo codice sull'evento "clic" del pulsante della
maschera che ti aprirà la finestra di ricerca file:
 
Call ShowFile(Me, fb)
fName = Left(fb.lpstrFile, InStr(fb.lpstrFile, vbNullChar) - 1)
Me.tuocampo = fName
 
Saluti
M7a1x

 Me.tuocampo = fName
 
Ciao Max,
dunque ho provato a fare quello che mi hai indicato e per un po' ha 
anche funzionato tanto che sono riuscito a cercare un file.
Adesso stranamente, perchè non mi pare di aver toccato nulla, invece mi 
dice "variabile non definita" evidenziando fname.
Il problema potrebbe essere per come ho scritto il modulo non essendo io 
un esperto.
Ho creato un nuovo modulo (non so se dovesse essere di classe o no) ed 
ho incollato il codice che mi hai dato ed ho chiamato il modulo 
"modulofattureclienti".
Poi nel codice della maschera che contiene il comando ho messo
 
Dim fb As OPENFILENAME
Dim RetVal As Long
dopo Option Compare Database
 
ed infine nel codice del comando (evento su click) ho messo
 
Call ShowFile(Me, fb)
fName = Left(fb.lpstrFile, InStr(fb.lpstrFile, vbNullChar) - 1)
Me.FileFattura = fName
 
Dove ho sbagliato?
 
Grazie
Gianni
 
 

 Dim RetVal As Long
e il problema dovrebbe risolversi.
Saluti
M7a1x

 > Salve Gianni.....
 > prova a eliminare "Option Explicit" che dovrebbe trovarsi in cima al
 > codice della maschera subito dopo (la riga sotto) a dove hai
 > incollato
 >> Dim fb As OPENFILENAME
 >> Dim RetVal As Long
 > e il problema dovrebbe risolversi.
 > Saluti
 > M7a1x
 
Grazie Max, adesso funziona. Sei esperto e gentile. Ti ringrazio.
Gianni
 

 ha scritto:

per completezza affinche' tu sappia...
 
Option Explicit
 
potevi anche lasciarlo... ma lasciandolo, l'interprete del sistema si aspetta
che tu gli abbia Dichiarato tutte le variabili che usi, cosa che non hai fatto
ad es. con "fName"...
 
avessi scritto :
Dim fName as String
 
tutto sarebbe stato giusto (sempre che solo questa non fosse stata dichiarata) ;)
 
-- 
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.
 
TheSpaceCowboy : 
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12
 

 ha scritto:

Ciao Pabli
Come si suol dire.... il fine giustifica i mezzi.
Distinti Saluti
M7a1x