View Full Version : [vba] come fate se volete ricercare un file su tutto il disco ?
ci vorrebbe una bella ricorsione usando abilmente ed opportunamente il comando.....
Dir() di VB
Siccome penso che qualcuno lo ha già implementato vi ringrazio da subito se..... :)
per esempio:
Sub aMain()
NomePath = "c:\"
NomeFile = "pippo.xls"
Call TrovaFile(NomePath, NomeFile, ElencoFile)
MsgBox ElencoFile
End Sub
Sub TrovaFile(NomePath, NomeFile, ElencoFile)
If Dir(NomePath & NomeFile) <> "" Then
ElencoFile = ElencoFile & NomePath & NomeFile & Chr$(10)
End If
NomeDir = Dir(NomePath, vbDirectory)
Do While NomeDir <> ""
If (GetAttr(NomePath & NomeDir) And vbDirectory) = vbDirectory Then
If NomeDir <> "." And NomeDir <> ".." Then ElencoDir = ElencoDir & NomeDir & ","
End If
NomeDir = Dir
Loop
ipos1 = 1
Do
ipos2 = InStr(ipos1, ElencoDir, ","): If ipos2 = 0 Then Exit Do
Call TrovaFile(NomePath & Mid$(ElencoDir, ipos1, ipos2 - ipos1) & "\", NomeFile, ElencoFile)
ipos1 = ipos2 + 1
Loop
End Sub
pensavo utilizzassi una chiamata ricorsiva
pardon, hai ragione
intendevo senza creare una sorta di stringa separata da ,
beh, poi ognuno ha i suoi metodi :)
Originariamente inviato da misterx
...
intendevo senza creare una sorta di stringa separata da ,
...
è dovuto per il corretto richiamo reiterato di Dir
comunque è a piacere.
Originariamente inviato da a2000
è dovuto per il corretto richiamo reiterato di Dir
comunque è a piacere.
ma te lo sei inventato tu ?
io stavo lavorando su questo esempio che è compreso nell'help in linea di excel
Sub Prova()
Range("a1:a500").Clear
' Visualizza i nomi in c:\ che rappresentano directory.
MyPath = "c:\windows\" ' Imposta il percorso.
MyName = Dir(MyPath, vbDirectory) ' Recupera la prima voce.
Do While MyName <> "" ' Avvia il ciclo.
' Ignora la directory corrente e quella di livello superiore.
If MyName <> "." And MyName <> ".." Then
' Usa il confronto bit per bit per verificare se MyName è una directory.
If (GetAttr(MyPath & MyName) And vbDirectory) <> vbDirectory Then
Cells(i + 1, 1) = MyName: i = i + 1 ' Visualizza la voce solo
End If ' se rappresenta una directory.
End If
MyName = Dir ' Legge la voce successiva.
Loop
End Sub
Originariamente inviato da misterx
ma te lo sei inventato tu ?
ca va sans dire. :)
così se vi dovesse servire non ammattite per niente
A che mi serve ?
a trova tutti i file di un particolare tipo, esempio: BitMap "*.bmp" in tutto il disco partendo dalla cartella da voi fornita e ve li mostra incolonnati nella colonna "A1:An" di Excel
Option Explicit
Dim gFiles() As String
Dim g As Integer
Sub SearchFolder(FolderName As String, FilePattern As String)
Dim FileNames() As String
Dim FolderNames() As String
Dim FileName As String
Dim i As Integer
Dim j As Integer
FileName = Dir$(FolderName & "\" & FilePattern)
Do Until FileName = ""
ReDim Preserve gFiles(g)
gFiles(g) = FolderName & "\" & FileName
g = g + 1
FileName = Dir$()
Loop
FileName = Dir$(FolderName & "\*.*", vbDirectory)
Do Until FileName = ""
If (GetAttr(FolderName & "\" & FileName) And vbDirectory) = vbDirectory Then
If Left$(FileName, 1) <> "." Then
ReDim Preserve FolderNames(i)
FolderNames(i) = FileName
i = i + 1
End If
End If
FileName = Dir$()
Loop
For j = 0 To i - 1
SearchFolder FolderName & "\" & FolderNames(j), FilePattern
Next j
End Sub
Sub TrovaUnTipoDiFile()
Columns("A:A").Clear
Dim i As Integer
SearchFolder "C:", "*.bmp" 'qui mettere cartella di partenza e tipo di file
For i = 0 To g - 1
Cells(i + 1, 1) = gFiles(i)
Next i
End Sub
Originariamente inviato da a2000
copiato ? :p
se esiste già che ti reinventi, l'acqua calda ?
quello sopra poi, è solo la punta dell'iceberg ;)
ma tu gli ambienti di sviluppo te li scrivi oppure usi quelli messi a disposizione da Microsoft ?
se ci pensi è la stessa cosa :D:D:D
ok ok (cioè no), nun te incazzà ! :)
comunque l'ambiente di sviluppo perfetto è il foglio di carta (bianca).
ma è possibile che per avere un valore di ritorno da una funzione devo scrivere quello che vedete sotto in bold ?
Sub test()
stringa = "vada via i ciap"
ncar = NumeroDiA(stringa)
MsgBox( ncar )
End Sub
Function NumeroDiA(stringaAs String)
For i = 1 To Len(stringa)
If Mid$(stringa, i, 1) = "a" Then sp = sp + 1
Next i
NumeroDiA= sp
End Function
Function NumeroDiA(stringaAs String)
For i = 1 To Len(stringa)
NumeroDiA = NumeroDiA - (Mid$(stringa, i, 1) = "a")
Next i
End Function
Originariamente inviato da a2000
Function NumeroDiA(stringaAs String)
For i = 1 To Len(stringa)
NumeroDiA = NumeroDiA - (Mid$(stringa, i, 1) = "a")
Next i
End Function
mi interessa conoscere come VBA ritorna un valore tra funzioni
:)
come in algebra.
senza C-ca@ate tipo return nomevar.
nelle ultime versioni puoi utilizzare nei calcoli direttamente il nome della funzione come una variabile.
nelle precedenti no ed era necessaria l'assegnazione finale.
ma questi misterx sono dettagli di piccolo conto.
:)
Originariamente inviato da a2000
come in algebra.
senza C-ca@ate tipo return nomevar.
io ero rimasto che nel BASIC il return servisse solo per ritornare da una sub-routine, il malefico GOSUB
Originariamente inviato da a2000
nelle ultime versioni puoi utilizzare nei calcoli direttamente il nome della funzione come una variabile.
nelle precedenti no ed era necessaria l'assegnazione finale.
intendi come nell'esempio che ho postato io ?
Originariamente inviato da misterx
- io ero rimasto che nel BASIC il return servisse solo per ritornare da una sub-routine, il malefico GOSUB
- intendi come nell'esempio che ho postato io ?
- esatto.
ma in pascal e C (e anche fortran last edition) c'è la possibilità di restituire il valore di una variabile con una istruzione tipo return nomevar
- sì.
e hai mai restituito un variant array, magari su un range di celle ?
Function f_fff(v) As Variant
Dim vf(1 To 1, 1 To 4) as Variant
......
vf(1, 1) = nIG - SnIG
vf(1, 2) = SyI - 1
vf(1, 3) = SxI - 1
vf(1, 4) = TI
f_fff = vf
End Function
e sul foglio:
={f_fff(A17)} ......... ={f_fff(A17)} ......... ={f_fff(A17)} ......... ={f_fff(A17)}
immessi sotto forma di matrice con Ctrl+Shift+Enter
misterx per le interfacce dobbiamo passare a Visio ... :)
sto cacchio di VBA :mad:
come faccio a settare come directory di lavoro la medesima nella quale si trova il mio file (foglio di lavoro) di Excel ?
chdir (Appilication.path) non funziona e quindi ?
ma passiamo a Visio o no ?
è la GUI input-output dati personalizzabile pronta all'uso.
basta con ListBox ComboBox e ButtonMinchia ! :D
praticamente è la morte di tutti i linguaggi VisualMinchia. :eek:
no matter ovviamente per VBA ;)
domanda
ho un foglio di Excel che contiene una macro; tale foglio sarà il destinatario della mia applicazione
apro un secondo foglio di Excel (sorgente) che contiene dei dati da copiare nel foglio di destinazione
se ora scrivo:
Set sorgente = WorkBooks("sorgente.xls")
Set destinazione = WorkBooks("destinazione.xls")
dovrei anche poter scrivere ad esempio:
for i = 1 to 10
destinazione.Cells(i,1) = sorgente.Cells(i,1)
next i
ma non funziona perchè vuola anche il riferimento al foglio ??
Sub asd()
Set sorgente = Workbooks("sorgente.xls")
Set destinazione = Workbooks("destinazione.xls")
For i = 1 To 10
destinazione.Worksheets(1).Cells(i, 1) = sorgente.Worksheets(1).Cells(i, 1)
Next i
End Sub
un bel link
http://www.vba-programmer.com/
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.