Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

errore 'OpenTextFile' come da esempio guida vba excel 2010

161 views
Skip to first unread message

teddyk

unread,
Jan 5, 2013, 2:55:05 AM1/5/13
to
buongiorno a tutti,
stato facendo delle prove circa la creazione,apertura, scrittura.. di
file di testo.
all'esecuzione di questa macro, come es file guida,

Sub OpenTextFileTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("F:\test.txt", ForAppending, tristateFalse)
f.Write "Salve"
f.Close
End Sub

ricevo il seguente errore: Errore di run-time 5
Chiamata di routine o argomento non validi.

questo errore lo ricevo dopo che il debug evidenzia *tristateFalse* e
mi segnale 'errore di compilazione, variabile non definita'

potreste darmi una mano a capire la causa di cio?

grazie infinite,

buona giornata

--
a presto teddyk


Maurizio Borrelli

unread,
Jan 5, 2013, 4:17:01 AM1/5/13
to
Il giorno sabato 5 gennaio 2013 08:55:05 UTC+1, teddyk ha scritto:
> Set f = fs.OpenTextFile("F:\test.txt", ForAppending, tristateFalse)
> ricevo il seguente errore: Errore di run-time 5
> Chiamata di routine o argomento non validi.
> questo errore lo ricevo dopo che il debug evidenzia *tristateFalse* e
> mi segnale 'errore di compilazione, variabile non definita'

Ciao teddyk,
"Variabile non definita" vuol dire che... non hai definito una variabile. Infatti hai definito ForReading, ForWriting, ForAppending, fs e f ma non hai definito "tristateFalse". Quindi o la definisci così:

Const TristateFalse = 0

-oppure- ti "accontenti" di scrivere:

Set f = fs.OpenTextFile("F:\test.txt", ForAppending, 0)

--
Ciao!
Maurizio

teddyk

unread,
Jan 5, 2013, 4:29:26 AM1/5/13
to
Ciao Maurizio,


Maurizio Borrelli ha detto questo sabato :
ok, ho dichiarato come da te suggerito *Const TristateFalse = 0*
ma, (ma) ricevo comunque questo errore:
* Errore di run-time 5
Chiamata di routine o argomento non validi.*

quindi c'è un bug nella guida !? perchè il codice l'ho copiato pari
pari all'esempio nella guida *Metodo OpenTextFile*

grazie dell'attenzione

--
a presto teddyk


Maurizio Borrelli

unread,
Jan 5, 2013, 4:43:29 AM1/5/13
to
Ciao teddyk,

ma nel tuo computer c'è un disco "F:"? E se c'è, c'è nella sua radice un file di nome "test.txt" al quale appendere "Salve"?
--
Ciao!
Maurizio

teddyk

unread,
Jan 5, 2013, 4:55:30 AM1/5/13
to
Maurizio Borrelli ha usato la sua tastiera per scrivere :
Ciao Maurizio,
dunque ... il codice è questo:
*Sub OpenTextFileTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateFalse = 0
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("F:\test.txt", ForAppending, TristateFalse)
f.Write "Salve"
f.Close
End Sub*

ed in questa directory: *F:\* ho il file *test.txt*

nel file di testo, sia che ci sia scritto "Salve" , sia che sia vuoto,
mi da sempree errore
* Errore di run-time 5
Chiamata di routine o argomento non validi.*

grazie della pazienza

--
a presto teddyk


Maurizio Borrelli

unread,
Jan 5, 2013, 5:12:22 AM1/5/13
to
Il giorno sabato 5 gennaio 2013 10:55:30 UTC+1, teddyk ha scritto:
> Maurizio Borrelli ha usato la sua tastiera per scrivere :

Ciao teddyk,

Sono andato alla pagina e... Quello è un esempio decisamente non esemplare! Anzi, diciamo proprio schifoso. :-)
Però se oltre copiare quel perfido esempio avessi letto il testo che l'accompagna avresti scoperto che i parametri della funzione non sono solo tre ma quattro e che i valori di IOMode sono diversi da qualli dell'esempio.

Prova cosi`:

Sub OpenTextFileTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateFalse = 0
Dim fs As Scripting.FileSystemObject, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("D:\percorso\test.txt", ForAppending, True, TristateFalse)
f.Write "Salve"
f.Close
End Sub
--
Ciao!
Maurizio

Maurizio Borrelli

unread,
Jan 5, 2013, 5:15:15 AM1/5/13
to
Il giorno sabato 5 gennaio 2013 11:12:22 UTC+1, Maurizio Borrelli ha scritto:
> Il giorno sabato 5 gennaio 2013 10:55:30 UTC+1, teddyk ha scritto:

Ciao teddyk,

Scusa, ho lasciato una traccia indesiderata. Il codice e` questo:

Sub OpenTextFileTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateFalse = 0
Dim fs, f

teddyk

unread,
Jan 5, 2013, 5:49:12 AM1/5/13
to
Ciao Maurizio,

Maurizio Borrelli ha spiegato il 05/01/2013 :
> Ciao teddyk,
>
>Però se oltre copiare quel perfido esempio avessi letto il testo che
>l'accompagna avresti scoperto che i parametri della funzione non sono
>solo tre ma quattro e che i valori di IOMode sono diversi da qualli
>dell'esempio.

si ora ho capito e visto

> Sub OpenTextFileTest()
> Const ForReading = 1, ForWriting = 2, ForAppending = 8
> Const TristateFalse = 0
> Dim fs, f
> Set fs = CreateObject("Scripting.FileSystemObject")
> Set f = fs.OpenTextFile("D:\percorso\test.txt", ForAppending, True,
> TristateFalse) f.Write "Salve"
> f.Close
> End Sub

quindi, se ho ben capito, nell'esempio, data per scontata la
dichiarazione delle variabili visto il* dim fs, f*, mancava il
'dimensionamento' di *TristateFalse* ed il valore dato ad *appendind* è
3 e non *8*(una svista capita).
Inoltre il parametrro relativo alla funzione *crea* era impostato a
falso, poichè mancante. Molto ovvio, ma non per me! finora!
Azz... mi si è aperto un mondo :-) !!! Piano piano spero di capire
sempre piu i codici che, fin ora, ho ricevuto e quelli che ho adattato
scopiazzando.

grazie ancora

Maurizio Borrelli

unread,
Jan 5, 2013, 5:57:39 AM1/5/13
to
Il giorno sabato 5 gennaio 2013 11:49:12 UTC+1, teddyk ha scritto:
> Azz... mi si ᅵ aperto un mondo :-) !!! Piano piano spero di capire
> sempre piu i codici che, fin ora, ho ricevuto e quelli che ho adattato
> scopiazzando.
> grazie ancora

Ciao teddyk,

e... benvenuto. :)

Riassumendo la tua esperienza:
- Leggere scrupolosamente la guida, soprattutto cio` che e` scritto fra le righe. FATTO!
- Eseguire gli esempi. FATTO!
- Non fidarti della guida. FATTO!
- Non fidarti degli esempi. FATTO!
- Domandare a mpioe. FATTO!
:-)
--
Ciao!
Maurizio

r

unread,
Jan 5, 2013, 7:49:37 AM1/5/13
to
Dopo il documento plinius ... Il pentalogo di Maurizio! Mi piace, posso pubblicarlo? :-)

Maurizio Borrelli

unread,
Jan 5, 2013, 8:50:24 AM1/5/13
to
Il giorno sabato 5 gennaio 2013 13:49:37 UTC+1, r ha scritto:
> Dopo il documento plinius ... Il pentalogo di Maurizio! Mi piace, posso pubblicarlo? :-)

Ma certo, r. :)
--
Ciao!
Maurizio

Maurizio Borrelli

unread,
Jan 5, 2013, 5:48:40 PM1/5/13
to
Il giorno sabato 5 gennaio 2013 11:49:12 UTC+1, teddyk ha scritto:
[...]
Ciao teddyk,
penso che il tuo quesito meriti un approfondimento.
1. Occorre precisare che la routine dell'esempio e` stata pensata, anche se malamente, per il linguaggio VBScript, un sottoinsieme di Visual Basic (Classic). In VBScript esiste solo il Late Binding (Associazione tardiva) mentre scrivendo codice nell'ambiente Visual Basic di Excel (volgarmente: VBA) possiamo usufruire dei vantaggi del Early Bindig (Associazione anticipata), principalmente, nel nostro caso, il completamento automatico delle istruzioni (IntelliSense: http://it.wikipedia.org/wiki/IntelliSense).
Per iniziare a approfondire vedi:
Utilizzando l'associazione anticipata e associazione tardiva nell'automazione
http://support.microsoft.com/kb/245115
(Se puoi, meglio se te lo leggi in inglese!)
2. Spesso e` opportuno, una volta scritte le istruzioni e averle testate, interrompere il collegamento con l'oggetto di automazione, usando quindi il Late Bindig, per garantirsi contro eventuali problemi di compatibilita` e differenze di versione fra l'oggetto al quale ci siamo riferiti scrivendo il codice e quello realmente esistente nel computer nel quale verra` eseguito il nostro codice. Nasce così la necessita` di alternare il tipo di Binding a seconda che si sia in fase di sviluppo (Design) o di esecuzione (Run). Io spesso la risolvo cosi`:
2.a Aggiungo alle proprieta` del progetto un argomento di compilazione condizionale:
- Strumenti
- Proprieta` di VBAProject...
- Argomenti di compilazione condizionale:
DesignMode = 1
- [OK]
2.b Aggiungo ai riferimenti del progetto l'oggetto di automazione:
- Strumenti
- Riferimenti...
- [v] Microsoft Scripting Runtime
- [OK]
2.c Scrivo le istruzioni usufruento di IntelliSense:
Option Explicit
Private Const mcMod = "Modulo1"

#If DesignMode Then
' NOTHING
#Else
Public Enum IOMode
ForAppending = 8
ForReading = 1
ForWriting = 2
End Enum
Public Enum Tristate
TristateFalse = 0
TristateMixed = &HFFFFFFFE
TristateTrue = &HFFFFFFFF
TristateUseDefault = &HFFFFFFFE
End Enum
#End If

Public Sub OpenTextFileTest()
Const cProc = "OpenTextFileTest"
On Error GoTo ErrH
#If DesignMode Then
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
#Else
Dim fso As Object
Dim ts As Object
#End If

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("D:\Percorso\Test.TXT" _
, ForAppending _
, True _
, TristateFalse)
With ts
.Write "Salve"
.Close
End With

ExitProc:
Set ts = Nothing
Set fso = Nothing
Exit Sub

ErrH:
MsgBox Err.Description, vbCritical + vbOKOnly, mcMod & "." & cProc
Resume ExitProc

End Sub
2.d Dopo essermi accertato che tutto funzioni come da me previsto e prima di "licenziare" il programma, tolgo il riferimento all'oggetto (qui Microsoft Scripting Runtime) e assegno all'argomento di compilazione condizionale il valore zero:
DesignMode = 0
2.e Ricompilo il progetto:
- Debug
- Compila VBAProject
e salvo.
2.f (Ocio che non rileggo;)
--
Ciao!
Maurizio

r

unread,
Jan 6, 2013, 4:31:15 PM1/6/13
to
a proposito, ma da excel 2007 l'editor vbscipt ce lo siamo giocati? e la guida ... pure?

Maurizio Borrelli

unread,
Jan 6, 2013, 9:37:20 PM1/6/13
to
Il giorno domenica 6 gennaio 2013 22:31:15 UTC+1, r ha scritto:
> a proposito, ma da excel 2007 l'editor vbscipt ce lo siamo giocati? e la guida ... pure?

Pare di si`. Con una installazione completa di tutti gli ammennicoli 'Microsoft Script Editor' viene installato ma non e` piu`, che io sappia, integrato in Excel.
Io il file 'MSE7.EXE' ce l'ho in:
"C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12"
E c'e` anche la guida.
--
Ciao!
Maurizio

r

unread,
Jan 9, 2013, 2:58:33 AM1/9/13
to

Maurizio Borrelli

unread,
Jan 9, 2013, 7:16:44 AM1/9/13
to
Il giorno mercoledì 9 gennaio 2013 08:58:33 UTC+1, r ha scritto:
> Fatto!
> https://sites.google.com/site/e90e50/documento-plinius/il-pentalogo-del-borrelli
> :-)

Omamma!!! Lord Dart Fener!!! Questa non l'avevo ancora vista. Tu sei pazzo. :)))
--
Ciao!
Maurizio

r

unread,
Jan 9, 2013, 8:46:16 AM1/9/13
to
Il giorno mercoledì 9 gennaio 2013 13:16:44 UTC+1, Maurizio Borrelli ha scritto:
Tu sei pazzo. :))) -- Ciao! Maurizio

grazie!
:-)
r

teddyk

unread,
Jan 9, 2013, 3:34:06 PM1/9/13
to
Maurizio Borrelli ha usato la sua tastiera per scrivere :

Ciao Maurizio,

> Il giorno sabato 5 gennaio 2013 11:49:12 UTC+1, teddyk ha scritto:
> [...]
> Ciao teddyk,
> penso che il tuo quesito meriti un approfondimento.
> 1. Occorre precisare che la routine dell'esempio e` stata pensata, anche se
> malamente, per il linguaggio VBScript, un sottoinsieme di Visual Basic
> (Classic). In VBScript esiste solo il Late Binding (Associazione tardiva)
> mentre scrivendo codice nell'ambiente Visual Basic di Excel (volgarmente:
> VBA) possiamo usufruire dei vantaggi del Early Bindig (Associazione
> anticipata), principalmente, nel nostro caso, il completamento automatico
> delle istruzioni (IntelliSense: http://it.wikipedia.org/wiki/IntelliSense).
> Per iniziare a approfondire vedi: Utilizzando l'associazione anticipata e
> associazione tardiva nell'automazione http://support.microsoft.com/kb/245115
> (Se puoi, meglio se te lo leggi in inglese!) 2. Spesso e` opportuno, una
> volta scritte le istruzioni e averle testate, interrompere il collegamento
> con l'oggetto di automazione, usando quindi il Late Bindig, per garantirsi
> contro eventuali problemi di compatibilita` e differenze di versione fra
> l'oggetto al quale ci siamo riferiti scrivendo il codice e quello realmente
> esistente nel computer nel quale verra` eseguito il nostro codice. Nasce cosᅵ
Penso mi ci vorra parecchio per capirci qualcosa!
comunque non demordo sai!

grazie ancora.

--
a presto teddyk


0 new messages