Newsgroup: it.comp.lang.visual-basic
Titolo: Leggere file di testo (in VBA)

Salve a tutti!
Sto tentando di scrivere una metodo che mi legga un file di testo, ma
continuo ad avere errori di Type Mismatch dal compilatore VBA, e non
riesco a venirne fuori.
Ecco un estratto del codice:
Public Function ReadFromFile(ByVal NomeFile As String) As Boolean
Dim FSo
Dim aFile As File
Dim aTStream As TextStream
ReadFromFile = False
Set FSo = CreateObject("Scripting.FileSystemObject")
If Not FSo.FileExists(NomeFile) Then
    Exit Function
End If
Set aFile = FSo.GetFile(NomeFile)
Set aTStream = aFile.OpenAsTextStream("ForReading")
Do While aTStream.AtEndOfStream <> True
    Add aTStream.ReadLine 'Add e' un metodo che aggiunge la riga del
file ad una Collection di String
Loop
aTStream.Close
ReadFromFile = True
End Function
Se eseguo questo codice, mi va in errore (Type Mismatch) alla riga
"Set aFile = FSo.GetFile(NomeFile)".
Se cambio la definizione "Dim aFile As File" in "Dim aFile", mi va in
errore (sempre Type Mismatch) alla riga "Set aTStream =
aFile.OpenAsTextStream("ForReading")".
Se a questo punto cambio anche "Dim aTStream As TextStream" in "Dim
aTStream", mi da comunque lo stesso errore!
Come al solito (non conosco bene VBA, ho sempre programmato in Delphi)
sbaglio qualcosa di banale, ma non riesco ad uscirne...
Grazie in anticipo a tutti!
PS: Sto usando VBA all'interno di CATIA (programma di CAD 3D), non in
Excel, ammesso che questocambi qualcosa...




Dim MyFile As Object
Dim aTStream As Object
Set MyFile = CreateObject("Scripting.FileSystemObject")
Set aTStream = MyFile.OpenTextFile(NomeFile)
If Not MyFile.FileExists(NomeFile) Then
    Exit Function
End If
Do While aTStream.AtEndOfStream <> True
   Add aTStream.ReadLine
   'Debug.Print aTStream.ReadLine
Loop
ReadFromFile = True
aTStream.Close
Set MyFile = Nothing
Set aTStream = Nothing
End Function
PS: Quando si tratta di files, � consigliabile adottare una gestione
errori pi� raffinata..
HTH

 errori più raffinata..
Si, beh, questo e' solo un abbozzo, poi aggiungero' una gestione degli
errorri decente :-)
Grazie di nuovo!

Azz, sono incappato in un altro problemino...
Io uso questo metodo all'interno di una mia classe chiamata TStrList,
che 'incapsula' una "Collection" ma permette di aggiungere soltanto
stringhe (piu' una serie di altri metodi per gestirle come serve a
me).
Il problema e' che (a quanto ho visto) il numero massimo di oggetti
che puo' contenere una Collection e' 256, ma io devo maneggiare file
che spesso superano le 256 righe...
Come posso fare?
Esiste qualcosa di analogo alle Collection ma che non abbia un limite
di elementi (o abbia un limite decisamente piu' alto)?
Grazie!



Dim myColl As Collection
Set myColl = New Collection
Dim j As Long
For j = 1 To 2600
   myColl.Add CStr(j)
Next
Debug.Print myColl.Count '-> 2600
Debug.Print myColl(1521) '-> 1521
Debug.Print myColl(2312) '-> 2312
Dov'� che hai visto il limite di cui parli?
Ciao

Maledetto IDE del VBA!
Se faccio un Watch di una collection, mi elenca al max 256 item, anche
se effettivamente ne sta contenendo di piu'! :-)
Meno male, un problema in meno eh eh!

Grazie! Cosi' funziona! :-)
S�...solo se il file esiste... :-P
Ovviamente il controllo dell'esistenza va messo prima di:
Set aTStream = MyFile.OpenTextFile(NomeFile)
ciao