|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
[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..... |
|
|
|
|
|
#2 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
per esempio:
Codice:
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
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
pensavo utilizzassi una chiamata ricorsiva
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
infatti è ricorsiva.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
pardon, hai ragione
intendevo senza creare una sorta di stringa separata da , beh, poi ognuno ha i suoi metodi |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
comunque è a piacere. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
ma te lo sei inventato tu ? io stavo lavorando su questo esempio che è compreso nell'help in linea di excel Codice:
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
Ultima modifica di misterx : 20-07-2004 alle 15:11. |
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
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 Codice:
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
Ultima modifica di misterx : 21-07-2004 alle 08:50. |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
copiato ?
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
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 |
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
ok ok (cioè no), nun te incazzà !
comunque l'ambiente di sviluppo perfetto è il foglio di carta (bianca). |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
ma è possibile che per avere un valore di ritorno da una funzione devo scrivere quello che vedete sotto in bold ?
Codice:
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
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Codice:
Function NumeroDiA(stringaAs String)
For i = 1 To Len(stringa)
NumeroDiA = NumeroDiA - (Mid$(stringa, i, 1) = "a")
Next i
End Function
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
mi interessa conoscere come VBA ritorna un valore tra funzioni |
|
|
|
|
|
|
#16 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
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. |
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
ma questi misterx sono dettagli di piccolo conto.
|
|
|
|
|
|
#18 | ||
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
io ero rimasto che nel BASIC il return servisse solo per ritornare da una sub-routine, il malefico GOSUB Quote:
|
||
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
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ì. |
|
|
|
|
|
|
#20 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
e hai mai restituito un variant array, magari su un range di celle ?
Codice:
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 ={f_fff(A17)} ......... ={f_fff(A17)} ......... ={f_fff(A17)} ......... ={f_fff(A17)} immessi sotto forma di matrice con Ctrl+Shift+Enter Ultima modifica di a2000 : 27-07-2004 alle 13:50. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:20.



















