Discussione:
Visualizzare in una listbox i file presenti in una directory predefinita e aprirli
(troppo vecchio per rispondere)
r4gtl
2006-10-04 06:17:40 UTC
Permalink
Ciao a tutti.
Volevo sapere se è possibile (e come si fa) visualizzare in una listbox o
con altri controlli, i file presenti in una cartelle che ho predefinito io.
Grazie
Ciao
Stefano
Alessandro Baraldi
2006-10-04 06:32:46 UTC
Permalink
Post by r4gtl
Ciao a tutti.
Volevo sapere se è possibile (e come si fa) visualizzare in una listbox o
con altri controlli, i file presenti in una cartelle che ho predefinito io.
Grazie
Ciao
Stefano
Public Function FillListFiles(ctl As Access.ListBox, Startpath As
string)
Dim MyPath As String
Dim MyName As String
ctl .RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
With ctl
.RowSource = .RowSource & MyName & ";"
End With
MyName = Dir
Loop
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function

Per lanciarli su Evento DBL_CLICK:

Chiama la funzione sotto passando il contenuto della ListBox.


Public Sub ExecuteFile(FilePath As String)
'Esegue file
On Error GoTo error
Dim ret As Integer
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " &
(FilePath))
Exit Sub
error:
MsgBox Err.Description, vbExclamation, "Error"
End Sub


@Alex
r4gtl
2006-10-04 06:38:28 UTC
Permalink
Post by r4gtl
Ciao a tutti.
Volevo sapere se è possibile (e come si fa) visualizzare in una listbox o
con altri controlli, i file presenti in una cartelle che ho predefinito io.
Grazie
Ciao
Stefano
Public Function FillListFiles(ctl As Access.ListBox, Startpath As
string)
Dim MyPath As String
Dim MyName As String
ctl .RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
With ctl
.RowSource = .RowSource & MyName & ";"
End With
MyName = Dir
Loop
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function

Per lanciarli su Evento DBL_CLICK:

Chiama la funzione sotto passando il contenuto della ListBox.


Public Sub ExecuteFile(FilePath As String)
'Esegue file
On Error GoTo error
Dim ret As Integer
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " &
(FilePath))
Exit Sub
error:
MsgBox Err.Description, vbExclamation, "Error"
End Sub


@Alex


Caspita che velocità.
Adesso, continuando la ricerca ho trovato anche una faq sul sitocomune che
forse può essere utile. Adesso le provo tutte poi ti faccio sapere.
Grazie mille.
Stefano
r4gtl
2006-10-04 07:24:55 UTC
Permalink
Post by Alessandro Baraldi
Post by r4gtl
Ciao a tutti.
Volevo sapere se è possibile (e come si fa) visualizzare in una listbox o
con altri controlli, i file presenti in una cartelle che ho predefinito
io.
Post by r4gtl
Grazie
Ciao
Stefano
Public Function FillListFiles(ctl As Access.ListBox, Startpath As
string)
Dim MyPath As String
Dim MyName As String
ctl .RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
With ctl
.RowSource = .RowSource & MyName & ";"
End With
MyName = Dir
Loop
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function
Chiama la funzione sotto passando il contenuto della ListBox.
Public Sub ExecuteFile(FilePath As String)
'Esegue file
On Error GoTo error
Dim ret As Integer
ret = Shell("rundll32.exe url.dll,FileProtocolHandler " &
(FilePath))
Exit Sub
MsgBox Err.Description, vbExclamation, "Error"
End Sub
@Alex
Caspita che velocità.
Adesso, continuando la ricerca ho trovato anche una faq sul sitocomune che
forse può essere utile. Adesso le provo tutte poi ti faccio sapere.
Grazie mille.
Stefano
Ciao Alex!
Scusa ma non riesco a farlo funzionare.
Ho messo la funzione in un modulo e l'ho richiamata sull'Origine Controllo
della listbox ma non funziona. Dobe devo preimpostare StartPath? E la
Funzione?
Scusa l'ignoranza
Ciao
Stefano
Alessandro Baraldi
2006-10-04 08:01:31 UTC
Permalink
r4gtl ha scritto:

[CUT]
Post by r4gtl
Ciao Alex!
Scusa ma non riesco a farlo funzionare.
Ho messo la funzione in un modulo e l'ho richiamata sull'Origine Controllo
della listbox ma non funziona. Dobe devo preimpostare StartPath? E la
Funzione?
Scusa l'ignoranza
Ciao
Stefano
Non devi richiamarla sull'origine controllo.... ma su evento Load della
Maschera..!

Private Sub Form_Load()
Call FillListFiles (me!NomeListBox, "C:\Program File\")
End Sub

Ciao
@Alex
r4gtl
2006-10-04 08:01:33 UTC
Permalink
Post by Alessandro Baraldi
[CUT]
Post by r4gtl
Ciao Alex!
Scusa ma non riesco a farlo funzionare.
Ho messo la funzione in un modulo e l'ho richiamata sull'Origine Controllo
della listbox ma non funziona. Dobe devo preimpostare StartPath? E la
Funzione?
Scusa l'ignoranza
Ciao
Stefano
Non devi richiamarla sull'origine controllo.... ma su evento Load della
Maschera..!
Private Sub Form_Load()
Call FillListFiles (me!NomeListBox, "C:\Program File\")
End Sub
Ciao
@Alex
Ah!
r4gtl
2006-10-04 08:39:17 UTC
Permalink
Post by r4gtl
Post by Alessandro Baraldi
[CUT]
Post by r4gtl
Ciao Alex!
Scusa ma non riesco a farlo funzionare.
Ho messo la funzione in un modulo e l'ho richiamata sull'Origine
Controllo
Post by Alessandro Baraldi
Post by r4gtl
della listbox ma non funziona. Dobe devo preimpostare StartPath? E la
Funzione?
Scusa l'ignoranza
Ciao
Stefano
Non devi richiamarla sull'origine controllo.... ma su evento Load della
Maschera..!
Private Sub Form_Load()
Call FillListFiles (me!NomeListBox, "C:\Program File\")
End Sub
Ciao
@Alex
Ah!
Scusami ancora! Sono un pò tordo.
Ho provato ma mi dà questo errore
Errore di runtime '5'
chiamata di routine o argomento non validi.

Questo è tutto il codice.

Option Compare Database


Private Sub Form_Load()
Call FillListFiles(Me!Elenco0, "C:\Documenti\")

End Sub


Public Function FillListFiles(ctl As Access.ListBox, Startpath As String)
Dim MyPath As String
Dim MyName As String
ctl.RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
With ctl
.RowSource = .RowSource & MyName & ";"
End With
MyName = Dir
Loop
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function


Se entro in debug dopo l'errore mi evidenzia

ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)

se mi posiziono sopra rowsource mi esce un "tip" (si chiama così?):
ctl.rowsource=""

Come mai?
Ancora grazie
Stefano
r4gtl
2006-10-04 12:42:06 UTC
Permalink
Post by r4gtl
Post by r4gtl
Post by Alessandro Baraldi
[CUT]
Post by r4gtl
Ciao Alex!
Scusa ma non riesco a farlo funzionare.
Ho messo la funzione in un modulo e l'ho richiamata sull'Origine
Controllo
Post by Alessandro Baraldi
Post by r4gtl
della listbox ma non funziona. Dobe devo preimpostare StartPath? E la
Funzione?
Scusa l'ignoranza
Ciao
Stefano
Non devi richiamarla sull'origine controllo.... ma su evento Load della
Maschera..!
Private Sub Form_Load()
Call FillListFiles (me!NomeListBox, "C:\Program File\")
End Sub
Ciao
@Alex
Ah!
Scusami ancora! Sono un pò tordo.
Ho provato ma mi dà questo errore
Errore di runtime '5'
chiamata di routine o argomento non validi.
Questo è tutto il codice.
Option Compare Database
Private Sub Form_Load()
Call FillListFiles(Me!Elenco0, "C:\Documenti\")
End Sub
Public Function FillListFiles(ctl As Access.ListBox, Startpath As String)
Dim MyPath As String
Dim MyName As String
ctl.RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
With ctl
.RowSource = .RowSource & MyName & ";"
End With
MyName = Dir
Loop
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End Function
Se entro in debug dopo l'errore mi evidenzia
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
ctl.rowsource=""
Come mai?
Ancora grazie
Stefano
Niente da fare! Ho provato a cercare anche istruzioni sulla funzione Dir ma
non è che ci ho capito molto. Oltretutto se mi posiziono su ctl esce un tip
che dice ctl=null.
Bo!?!
Alessandro Baraldi
2006-10-04 13:13:30 UTC
Permalink
r4gtl ha scritto:

[CUT]
Post by r4gtl
Niente da fare! Ho provato a cercare anche istruzioni sulla funzione Dir ma
non è che ci ho capito molto. Oltretutto se mi posiziono su ctl esce un tip
che dice ctl=null.
Bo!?!
Ho provato questa che è GEMELLA di quella di prima e funziona:

Private Sub Form_Load()
Call FillListFiles(Me.Elenco2, "D:\Schemi\")
End Sub

Public Function FillListFiles(ctl As Access.ListBox, Startpath As
String)
Dim MyPath As String
Dim MyName As String
Dim strRow As String
ctl.RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
strRow = strRow & MyPath & MyName & ";"
MyName = Dir
Loop
ctl.RowSource = Left(strRow, Len(strRow) - 1)
End Function

Hai impostato ad "Elenco Valori" la proprietà "Tipo Origine Riga"....?

Mi auguro di si....

@Alex
r4gtl
2006-10-04 13:16:03 UTC
Permalink
"Alessandro Baraldi" <***@libero.it> ha scritto nel messaggio news:***@m73g2000cwd.googlegroups.com...

r4gtl ha scritto:

[CUT]
Post by r4gtl
Niente da fare! Ho provato a cercare anche istruzioni sulla funzione Dir ma
non è che ci ho capito molto. Oltretutto se mi posiziono su ctl esce un tip
che dice ctl=null.
Bo!?!
Ho provato questa che è GEMELLA di quella di prima e funziona:

Private Sub Form_Load()
Call FillListFiles(Me.Elenco2, "D:\Schemi\")
End Sub

Public Function FillListFiles(ctl As Access.ListBox, Startpath As
String)
Dim MyPath As String
Dim MyName As String
Dim strRow As String
ctl.RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath)
Do While MyName <> ""
strRow = strRow & MyPath & MyName & ";"
MyName = Dir
Loop
ctl.RowSource = Left(strRow, Len(strRow) - 1)
End Function

Hai impostato ad "Elenco Valori" la proprietà "Tipo Origine Riga"....?

Mi auguro di si....

@Alex



Niente da fare.
Mi segna sempre lo stesso problema. Se mi posiziono su MyName mi
dice:MyName=""
Avevo già impostato (pur non sapendolo) su Elenco Valori.
Come mai mi dà Me.elenco==Nullo?
Scusa se sono un pò duro ma non riesco a capire.
Alessandro Baraldi
2006-10-04 14:08:24 UTC
Permalink
Post by r4gtl
[CUT]
Niente da fare.
Mi segna sempre lo stesso problema. Se mi posiziono su MyName mi
dice:MyName=""
Avevo già impostato (pur non sapendolo) su Elenco Valori.
Come mai mi dà Me.elenco==Nullo?
Scusa se sono un pò duro ma non riesco a capire.
Sei sicuro di avere tutti i riferimenti VBA correttamente impostati...?

@Alex
r4gtl
2006-10-04 14:15:06 UTC
Permalink
Post by r4gtl
[CUT]
Niente da fare.
Mi segna sempre lo stesso problema. Se mi posiziono su MyName mi
dice:MyName=""
Avevo già impostato (pur non sapendolo) su Elenco Valori.
Come mai mi dà Me.elenco==Nullo?
Scusa se sono un pò duro ma non riesco a capire.
Sei sicuro di avere tutti i riferimenti VBA correttamente impostati...?

@Alex


Ti dico quali sono quelli selezionati:
Visual Basic For Applications
Microsoft Access 11.0 Object Library
OLE Automation
Microsoft DAO 3.6 Object Library
Microsoft Activex Data Objects 2.1 Library

Spero che ne manchi qualcuno così so che dipende da questo.
Alessandro Baraldi
2006-10-04 14:42:36 UTC
Permalink
Post by r4gtl
[CUT]
Visual Basic For Applications
Microsoft Access 11.0 Object Library
OLE Automation
Microsoft DAO 3.6 Object Library
Microsoft Activex Data Objects 2.1 Library
Spero che ne manchi qualcuno così so che dipende da questo.
Se non hai nessun MANCA:nomerif... direi che è tutto OK.

Mandami una mail che in serata di mando il demo che da me funziona
altrimenti credo che
non si risolva nulla.

@Alex
sv
2006-10-04 14:49:09 UTC
Permalink
Post by Alessandro Baraldi
Post by r4gtl
[CUT]
Niente da fare.
Mi segna sempre lo stesso problema. Se mi posiziono su MyName mi
dice:MyName=""
Avevo già impostato (pur non sapendolo) su Elenco Valori.
Come mai mi dà Me.elenco==Nullo?
Scusa se sono un pò duro ma non riesco a capire.
Sei sicuro di avere tutti i riferimenti VBA correttamente impostati...?
@Alex
Visual Basic For Applications
Microsoft Access 11.0 Object Library
OLE Automation
Microsoft DAO 3.6 Object Library
Microsoft Activex Data Objects 2.1 Library
Spero che ne manchi qualcuno così so che dipende da questo.
Hai controllato bene il percorso della cartella di cui vuoi l'elenco dei
file?
Se non sbaglio avevi indicato "C:\Documenti\"... forse "C:\Document and
Settings\MioNome\Documenti\"

L'errore di cui tu parli è dovuta o alla dimenticanza dello slash finale..
Errore 5 .. oppure ad una cartella inesistente .. MyName=""

--
sv
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad ***@newsland.it
r4gtl
2006-10-04 15:30:57 UTC
Permalink
Post by sv
Post by Alessandro Baraldi
Post by r4gtl
[CUT]
Niente da fare.
Mi segna sempre lo stesso problema. Se mi posiziono su MyName mi
dice:MyName=""
Avevo già impostato (pur non sapendolo) su Elenco Valori.
Come mai mi dà Me.elenco==Nullo?
Scusa se sono un pò duro ma non riesco a capire.
Sei sicuro di avere tutti i riferimenti VBA correttamente impostati...?
@Alex
Visual Basic For Applications
Microsoft Access 11.0 Object Library
OLE Automation
Microsoft DAO 3.6 Object Library
Microsoft Activex Data Objects 2.1 Library
Spero che ne manchi qualcuno così so che dipende da questo.
Hai controllato bene il percorso della cartella di cui vuoi l'elenco dei
file?
Se non sbaglio avevi indicato "C:\Documenti\"... forse "C:\Document and
Settings\MioNome\Documenti\"
L'errore di cui tu parli è dovuta o alla dimenticanza dello slash finale..
Errore 5 .. oppure ad una cartella inesistente .. MyName=""
--
sv
--
questo articolo e` stato inviato via web dal servizio gratuito
Risolto! Intanto è giusto quello che dice sv e cioè che l'errore era dovuto
alla mancanza dello slash finale.
Poi io gli faceco leggere in una directory dove non c'erano files ma solo
altre cartelle e queste non me le fa vedere.
Anzi, si arrabbia! E' possibile vedere anche le cartelle?

Devo comunque fare i miei complimenti e porgere i miei ringraziamenti per la
pazienza che dimostrate nel seguire utenti che (a volte) non sanno neanche
di cosa si parla.
Alessandro Baraldi
2006-10-04 18:12:30 UTC
Permalink
r4gtl ha scritto:

[CUT]
Post by r4gtl
Risolto! Intanto è giusto quello che dice sv e cioè che l'errore era dovuto
alla mancanza dello slash finale.
Ma chi lo ha mancato...?
Nel mio esempio c'è....!!!
Post by r4gtl
Poi io gli faceco leggere in una directory dove non c'erano files ma solo
altre cartelle e queste non me le fa vedere.
Anzi, si arrabbia! E' possibile vedere anche le cartelle?
Devi farlo in 2 passaggi con quel sistema, prima esegui la funzione
inserendo il vbDirectory nella chiamata Dir nel ciclo, poi quella che
hai usato adesso.

Personalmente io userei 2 ListBox, la prima per le Dir e la seconda per
i Files...!
Post by r4gtl
Devo comunque fare i miei complimenti e porgere i miei ringraziamenti per la
pazienza che dimostrate nel seguire utenti che (a volte) non sanno neanche
di cosa si parla.
Ciao
@Alex
r4gtl
2006-10-05 11:49:21 UTC
Permalink
"Alessandro Baraldi" <***@libero.it> ha scritto nel messaggio news:***@h48g2000cwc.googlegroups.com...

r4gtl ha scritto:

[CUT]
Post by r4gtl
Risolto! Intanto è giusto quello che dice sv e cioè che l'errore era dovuto
alla mancanza dello slash finale.
Ma chi lo ha mancato...?
Nel mio esempio c'è....!!!
Post by r4gtl
Poi io gli faceco leggere in una directory dove non c'erano files ma solo
altre cartelle e queste non me le fa vedere.
Anzi, si arrabbia! E' possibile vedere anche le cartelle?
Devi farlo in 2 passaggi con quel sistema, prima esegui la funzione
inserendo il vbDirectory nella chiamata Dir nel ciclo, poi quella che
hai usato adesso.

Personalmente io userei 2 ListBox, la prima per le Dir e la seconda per
i Files...!
Post by r4gtl
Devo comunque fare i miei complimenti e porgere i miei ringraziamenti per la
pazienza che dimostrate nel seguire utenti che (a volte) non sanno neanche
di cosa si parla.
Ciao
@Alex


Non mi permetterei mai di dire che il tuo esempio era sbagliato. Sono stato
io che a forza di tentativi alla fine ho cominciato a metterlo senza.
Comunque, approfittando spudoratamente della vostra pazienza, ho aggiunto un
livello di difficoltà al gioco.

Siccome nella casella di testo deve uscire l'elenco dei files di cartelle
diverse in base a cosa c'è in una combobox, ho impostato una tabella con i
percorsi in base a questa condizione.

Così, ho pensato, carico una variabile con un dlookup che va a vedere quello
che c'è in corrispondenza nella tabella.

Ho aggiunto il vbDirectory. il problema è che adesso visualizza tutto e non
solo le directory. In effetti andrei benissimo a fare come hai detto cioè
con due listbox.

Questo è il codice:


Private Sub CasellaCombinata0_AfterUpdate()
Dim MioPercorso As String

MioPercorso = DLookup("DescrizionePercorso", "Percorso", "Tipo='" &
CasellaCombinata0.Text & "'")

Call FillListFilesDir(Me.Elenco2, MioPercorso)

End Sub




Public Function FillListFilesDir(ctl As Access.ListBox, Startpath As String)
Dim MyPath As String
Dim MyName As String
Dim strRow As String
ctl.RowSource = ""
MyPath = Startpath
MyName = Dir(MyPath, vbDirectory)
Do While MyName <> ""
strRow = strRow & MyPath & MyName & ";"
MyName = Dir
Loop
ctl.RowSource = Left(strRow, Len(strRow) - 1)
End Function

Come si fa a vedere solo le directori?
Sempre grazie mille
Stefano
Alessandro Baraldi
2006-10-05 13:53:54 UTC
Permalink
Post by r4gtl
[CUT]
Come si fa a vedere solo le directori?
Sempre grazie mille
Stefano
Guarda Stefano porta pazienza ma questa settimana avete fatto la stessa
domanda in 3, ed ho risposto a tutti la stessa cosa....!

E' possibile che non riusciate a leggere l'Help o il visualizzatore
Oggetti....???

Il centro di tutto è la funzione DIR:

Dall'Help vedo che:
Function Dir([PathName], [Attributes As VbFileAttribute =
vbNormal]) As String

Come hai notato c'è un Attributo che può assumere valori diversi,
sempre usando il visualizzatore oggetti trovi le varie costanti
Enumerate:

vbDirectory mi pare possa essere interessante....!

Fai qualche prova, se non funziona si deve usare un'altro metodo, con
FileSearch(sempre documentato nell'Help e nel visualizzatore) oppure
FSO.

Saluti
@Alex
r4gtl
2006-10-05 15:43:38 UTC
Permalink
Post by r4gtl
[CUT]
Come si fa a vedere solo le directori?
Sempre grazie mille
Stefano
Guarda Stefano porta pazienza ma questa settimana avete fatto la stessa
domanda in 3, ed ho risposto a tutti la stessa cosa....!

E' possibile che non riusciate a leggere l'Help o il visualizzatore
Oggetti....???

Il centro di tutto è la funzione DIR:

Dall'Help vedo che:
Function Dir([PathName], [Attributes As VbFileAttribute =
vbNormal]) As String

Come hai notato c'è un Attributo che può assumere valori diversi,
sempre usando il visualizzatore oggetti trovi le varie costanti
Enumerate:

vbDirectory mi pare possa essere interessante....!

Fai qualche prova, se non funziona si deve usare un'altro metodo, con
FileSearch(sempre documentato nell'Help e nel visualizzatore) oppure
FSO.

Saluti
@Alex

Hai pienamente ragione. Ti assicuro comunque che ho guardato sulla guida ma
vederle applicate è un'altra cosa. Ringrazio quindi tutto l'NG per
l'assistenza che continua a dare.
Grazie
Stefano

Loading...