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

Controllare se un file Excel è in uso con VBScript

548 views
Skip to first unread message

archimede

unread,
Oct 27, 2011, 4:52:36 PM10/27/11
to
Ciao a Tutti,
stavo provando il vbscript per lavorare sui file o cartelle
(crea ,cancella,copia...) ma ero curioso di sapere se posso anche
verificare se un file excel è in uso.
La situazione sarebbe che io mi trovo già su un foglio excel e vorrei
con vbs controllare se il file excel da cui vorrei prelevare dei dati
è in uso o meno (già aperto!).
Ho cercato parecchio ma non sono riuscito a trovare nulla, non so se
la cosa sia possibile (al limite potrei usare anche ....If WBook Is
Nothing Then....) , ma nel caso lo fosse, qualcuno conosce il codice
magico?

PS: Tutti gli esercizi che ho fatto in excel con vbscript mi son
sempre funzionati senza attivare nessuna libreria, ma se lo fosse cosa
dovrei flaggare su strumenti ,riferimenti?

Vi ringrazio anticipatamente !
Ciao Ciao

eliano

unread,
Oct 27, 2011, 7:31:42 PM10/27/11
to
Ciao Archimede.
Non è vero che hai "cercato parecchio" :-))

http://tinyurl.com/663q7d2

Meriteresti una traguardata con uno specchio ustorio. :-D)

Non ho capito il PostScriptum, comunque se hai necessità di attivare
qualche libreria, vai nel Vbe, --->Strumenti--->Riferimenti e metti un
flag su quello che ti interessa.

Saluti
Eliano

eliano

unread,
Oct 27, 2011, 7:39:12 PM10/27/11
to
> Eliano- Nascondi testo citato
>
> - Mostra testo citato -

Scusa Archimede, ma rileggendo ho capito la richiesta, per la quale
dovrai rivolgerti a Fratello Mauro; il vbs non è pane da tutti i
giorni.
Per lo specchio ustorio, vista la temperatura notturna....perchè no??
Ciao
Eliano

archimede

unread,
Oct 27, 2011, 8:53:05 PM10/27/11
to
Grazie Eliano per la velocissima risposta!

Con gli specchi ustori devo stare molto attento perchè l'ultima volta
che gli ho usati a Siracusa ......comunque erano altri tempi !
Mi son guardato tutti i 17 post del link che mi hai suggerito, domani
proverò a ricontrollarli meglio per sicurezza, ma non ne ho visto
nemmeno uno scritto in vbscript.
La soluzione che attualmente conosco è quella con ....If WBook Is
Nothing Then....che va benissimo ,ma come dicevo ero solo curioso di
sapere se si poteva fare anche in vbscript, visto che già posso
copiare,cancellare, muovere cartelle e file .
Ho chiesto se dovevo attivare qualche libreria solo per essere sicuro
che facevo giusto, perchè comunque stando a quello che ho letto il vbs
fa già parte di Windows,per cui non servirebbe flaggarla, solamente
che se si attiva la libreria Microsoft Scriptimg Runtime si può usare
la guida, ma per il funzionamente del codice vbs non è richiesta la
libreria.
Ti ringrazio ma adesso devo continuare a scrivere il mio utilissimo
trattato di catottrica!
Alla prossima , Ciao Ciao

Mauro Gamberini

unread,
Oct 28, 2011, 3:30:12 AM10/28/11
to
"archimede" ha scritto nel messaggio
news:7c7ec9d3-ac52-4b10...@q16g2000yqn.googlegroups.com...

Ciao a Tutti,
stavo provando il vbscript per lavorare sui file o cartelle
(crea ,cancella,copia...) ma ero curioso di sapere se posso anche
verificare se un file excel è in uso.
*************************************

Alcuni dei modi possibili.

Codice per un file .VBS:

Dim objFSO

Set objFSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
objFSO.MoveFile "C:\Prova\mioFile.xls", "C:\Prova\mioFilex.xls"
If Err.Number <> 0 then
MsgBox "Il file è già aperto."
End If
objFSO.MoveFile "C:\Prova\mioFilex.xls", "C:\Prova\mioFile.xls"

Set objFSO = Nothing


Codice per Excel:

Public Sub m()

Dim objFSO As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
objFSO.MoveFile "C:\Prova\mioFile.xls", "C:\Prova\mioFilex.xls"
If Err.Number <> 0 Then
MsgBox "Il file è già aperto."
End If
objFSO.MoveFile "C:\Prova\mioFilex.xls", "C:\Prova\mioFile.xls"

Set objFSO = Nothing

End Sub

--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/

eliano

unread,
Oct 28, 2011, 6:08:37 AM10/28/11
to
Se vai nel Fucino (credo), ci cuociono gli spaghetti.:-))
Ciao
Eliano

eliano

unread,
Oct 28, 2011, 6:16:25 AM10/28/11
to
On 28 Ott, 09:30, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> "archimede"  ha scritto nel messaggionews:7c7ec9d3-ac52-4b10...@q16g2000yqn.googlegroups.com...
Grazie Fratello.
Questo è un argomento che è stato sfiorato qualche anno fa e poi
abbandonato forse per la pericolosità implicita, visto certi esempi in
Vba.:-))

A suo tempo hai scritto:

-----------------------------------------
Per chi si diletta ;-) ad utilizzare
VBS da VBA senza riferimenti:

http://www.vbscriptonline.com/constants/VBScript-Constants.asp

--
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/
---------------------------

ma non sono mai riuscito ad accedere a quel link.
Forse sarebbe il caso di riprendere il discorso, anche se
obbiettivamente rischiamo di partire da zero.

Saluti
Eliano

Mauro Gamberini

unread,
Oct 28, 2011, 6:35:40 AM10/28/11
to
ma non sono mai riuscito ad accedere a quel link.
Forse sarebbe il caso di riprendere il discorso, anche se
obbiettivamente rischiamo di partire da zero.
*************************************

Il sito sembra out. Vedi qui:

http://technet.microsoft.com/it-it/scriptcenter/bb410849
http://gallery.technet.microsoft.com/ScriptCenter/
http://technet.microsoft.com/en-us/scriptcenter/bb410849
http://gallery.technet.microsoft.com/ScriptCenter/

Non ho capito, Fratello, cosa dobbiamo far ripartire.

--
---------------------------
Mauro Gamberini

eliano

unread,
Oct 28, 2011, 8:03:38 AM10/28/11
to
On 28 Ott, 12:35, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> ma non sono mai riuscito ad accedere a quel link.
> Forse sarebbe il caso di riprendere il discorso, anche se
> obbiettivamente rischiamo di partire da zero.
> *************************************
>
> Il sito sembra out. Vedi qui:
>
> http://technet.microsoft.com/it-it/scriptcenter/bb410849http://gallery.technet.microsoft.com/ScriptCenter/http://technet.microsoft.com/en-us/scriptcenter/bb410849http://gallery.technet.microsoft.com/ScriptCenter/
>
> Non ho capito, Fratello, cosa dobbiamo far ripartire.
>
> --
> ---------------------------
> Mauro Gamberini
> Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/

Per contribuire a rivitalizzare il NG, inserire il settore VBS.
Ovviamente era solo un'idea per la quale chiedevo (modello "furbino
del deserto") il tuo essenziale intervento, visto che per me è zero
negativo.
Grazie per i link, li proverò ed eventualmente ti farò sapere.
Ciao
Eliano

eliano

unread,
Oct 28, 2011, 8:16:07 AM10/28/11
to
On 27 Ott, 22:52, archimede <archimede...@gmail.com> wrote:
Archimede, guarda che dire:" If WBook is Nothing Then" potrebbe non
avere alcun significato; è l'intera sequenza di istruzioni quello che
conta in quel particolare contesto, da Sub xxx() o Function xxx() a
End Sub o End Function in Vba, oppure (Mauro docet), da "Dim objFSO" a
"Set objFSO = Nothing" in Vbs.
Ciao
Eliano



.

Mauro Gamberini

unread,
Oct 28, 2011, 8:38:15 AM10/28/11
to
> Per contribuire a rivitalizzare il NG, inserire il settore VBS.
>

Ci sono i quiz... ;-)

Mi sembra che alle domande che riguardavano
l'utilizzo di vbs(in Excel e/o per Excel) si sia sempre risposto.
Cos� come riguardo le Regular Expressions.

> Ovviamente era solo un'idea per la quale chiedevo (modello "furbino
> del deserto") il tuo essenziale intervento
>

In entrambi i casi(vbs e re) ci sono qui persone pi� competenti
del sottoscritto.

--
---------------------------
Mauro Gamberini

archimede

unread,
Oct 28, 2011, 8:38:05 AM10/28/11
to
Ciao Eliano , si hai ragione , scrivere ...If WBook is Nothing
Then...è come se uno ti chiedesse come ti chiami e gli
rispondi ...Ar..ch..m.d....

Adesso ho scritto tutto il codice :
Sub wb_aperto_chiuso()

Dim WBook As Workbook
On Error Resume Next

Set WBook = Workbooks("ESERCIZI.xls")

If WBook Is Nothing Then
MsgBox "wb chiuso"
WBook = Nothing
On Error GoTo 0
Else
MsgBox "wb aperto "
Set WBook = Nothing
On Error GoTo 0
End If

End Sub

archimede

unread,
Oct 28, 2011, 8:28:07 AM10/28/11
to
Ciao Mauro e grazie per il codice che mi hai inviato.

Considerando che Move lavora solo se il file è chiuso, giustamente in
caso fosse aperto ti darebbe un errore e controllando Err.Number
possiamo verificare che con Err.Number<>0 avrei file aperto e con
Err.Number=0 avrei file chiuso.
Ottima idea ! Bravo come sempre Mauro !

Questa notte sono dovuto partire di fretta con tutti i miei 24 specchi
alla volta di Fucino per cucinare gli spaghetti per Eliano, e non
avendo più avuto tempo di studiarmi quest'ultimo codice sono rimasto
con un dubbio :

sub crea_cartella_nel _server()
Dim FSO
Set FSO = server.CreateObject("Scripting.FileSystemObject")
FSO.CreateFolder (server.MapPath("/Percorso/" &
"nomeNuovaCartella"))
Set FSO = Nothing
end sub

DOMANDA: Perchè su set FSO mi da errore runtime 424 ?
eppure nella rete tutti indicano in queste poche righe la soluzione di
come creare una cartella nel server.

Adesso scappo perchè la pasta è quasi pronta ! Mi faccio la
bolognese...la pasta !!!

Ciao e grazie tantissimo per l'ottimo suggerimento.
Ciao Ciao


Mauro Gamberini

unread,
Oct 28, 2011, 9:40:13 AM10/28/11
to
Considerando che Move lavora solo se il file è chiuso, giustamente in
caso fosse aperto ti darebbe un errore e controllando Err.Number
possiamo verificare che con Err.Number<>0 avrei file aperto e con
Err.Number=0 avrei file chiuso.
********************************

Troppo generico, come il mio primo codice.
Comunque il numero errore per il file già aperto è 70.

Dim objFSO

Set objFSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
objFSO.MoveFile "C:\Try\myFile.xls", "C:\Try\myFilex.xls"
If Err.Number = 70 then
MsgBox "File is open."
End If
objFSO.MoveFile "C:\Try\myFilex.xls", "C:\Try\myFile.xls"

Set objFSO = Nothing

A questo punto potresti aggiungere un If per controllarne
anche l'esistenza:

ElseIF Err.Number = 53 Then
MsgBox "Il file non esiste."

> DOMANDA: Perchè su set FSO mi da errore runtime 424 ?
> eppure nella rete tutti indicano in queste poche righe la soluzione di
> come creare una cartella nel server.
>

Codice sul client?
Con quali permessi?
Sicuro di poter eseguire uno script dal client verso il server?
Non siamo in ASP.

archimede

unread,
Oct 28, 2011, 10:27:10 AM10/28/11
to
pertanto:
Err.Number = 0 "Il file è chiuso."
Err.Number = 70 "Il file è già aperto."
Err.Number = 53 "Il file non esiste."

Ok Mauro a questo punto mi arrendo ma contento di sapere che non
funzionava (server....) perchè mi stavo muovendo su un campo a me
sconosciuto ASP.
Preferisco fermarmi qui con lo studio dei vbs su come fare a gestire i
file e le cartelle a livello di copy,move,delete,create.

Ti voglio ringraziare tantissimo per le utilissime risposte che mi hai
dato !
Gentilissimo come sempre, ti saluto, Ciao Ciao

Mauro Gamberini

unread,
Oct 28, 2011, 10:52:52 AM10/28/11
to
Ti voglio ringraziare tantissimo per le utilissime risposte che mi hai
dato !
Gentilissimo come sempre, ti saluto, Ciao Ciao
******************

Ehilà! Grazie per le belle(e non sempre meritate) parole.

Bruno Campanini

unread,
Oct 28, 2011, 10:56:22 AM10/28/11
to
archimede laid this down on his screen :
> Ciao a Tutti,
> stavo provando il vbscript per lavorare sui file o cartelle
> (crea ,cancella,copia...) ma ero curioso di sapere se posso anche
> verificare se un file excel ᅵ in uso.
> La situazione sarebbe che io mi trovo giᅵ su un foglio excel e vorrei
> con vbs controllare se il file excel da cui vorrei prelevare dei dati
> ᅵ in uso o meno (giᅵ aperto!).
> Ho cercato parecchio ma non sono riuscito a trovare nulla, non so se
> la cosa sia possibile (al limite potrei usare anche ....If WBook Is
> Nothing Then....) , ma nel caso lo fosse, qualcuno conosce il codice
> magico?
>
> PS: Tutti gli esercizi che ho fatto in excel con vbscript mi son
> sempre funzionati senza attivare nessuna libreria, ma se lo fosse cosa
> dovrei flaggare su strumenti ,riferimenti?
>
> Vi ringrazio anticipatamente !
> Ciao Ciao

Una zebra a pois...
========================
Public Function IsOpen(FilePath As String, FileName As String) As
Boolean
IsOpen = CreateObject("Scripting.FileSystemObject").FileExists(FilePath
& "~$" & FileName)
End Function
========================

... ᅵ tutto qua!

Bruno

PS
La funzione ritorna TRUE sui file aperti Read/Write, FALSE sui ReadOnly


Mauro Gamberini

unread,
Oct 28, 2011, 11:09:56 AM10/28/11
to
> ========================
> Public Function IsOpen(FilePath As String, FileName As String) As Boolean
> IsOpen = CreateObject("Scripting.FileSystemObject").FileExists(FilePath &
> "~$" & FileName)
> End Function
> ========================
>
> ... è tutto qua!
>

Grande Bruno!

r

unread,
Oct 28, 2011, 11:10:22 AM10/28/11
to
On 28 Ott, 16:56, Bruno Campanini <brunoca...@libero.it> wrote:
> archimede laid this down on his screen :
>
>
>
>
>
>
>
> > Ciao a Tutti,
> > stavo provando il vbscript per lavorare sui file o cartelle
> > (crea ,cancella,copia...) ma ero curioso di sapere se posso anche
> > verificare se un file excel in uso.
> > La situazione sarebbe che io mi trovo gi su un foglio excel e vorrei
> > con vbs controllare se il file excel da cui vorrei prelevare dei dati
> > in uso o meno (gi aperto!).
> > Ho cercato parecchio ma non sono riuscito a trovare nulla, non so se
> > la cosa sia possibile (al limite potrei usare anche ....If WBook Is
> > Nothing Then....) , ma nel caso lo fosse, qualcuno conosce il codice
> > magico?
>
> > PS: Tutti gli esercizi che ho fatto in excel con vbscript mi son
> > sempre funzionati senza attivare nessuna libreria, ma se lo fosse cosa
> > dovrei flaggare su strumenti ,riferimenti?
>
> > Vi ringrazio anticipatamente !
> > Ciao Ciao
>
> Una zebra a pois...
> ========================
> Public Function IsOpen(FilePath As String, FileName As String) As
> Boolean
> IsOpen = CreateObject("Scripting.FileSystemObject").FileExists(FilePath
> & "~$" & FileName)
> End Function
> ========================
>
> ... tutto qua!
>
> Bruno
>
> PS
> La funzione ritorna TRUE sui file aperti Read/Write, FALSE sui ReadOnly

questa poi .... è proprio bella!
r

eliano

unread,
Oct 28, 2011, 5:31:24 PM10/28/11
to
On 28 Ott, 16:56, Bruno Campanini <brunoca...@libero.it> wrote:
> archimede laid this down on his screen :
>
>
>
>
>
> > Ciao a Tutti,
> > stavo provando il vbscript per lavorare sui file o cartelle
> > (crea ,cancella,copia...) ma ero curioso di sapere se posso anche
> > verificare se un file excel in uso.
> > La situazione sarebbe che io mi trovo gi su un foglio excel e vorrei
> > con vbs controllare se il file excel da cui vorrei prelevare dei dati
> > in uso o meno (gi aperto!).
> > Ho cercato parecchio ma non sono riuscito a trovare nulla, non so se
> > la cosa sia possibile (al limite potrei usare anche ....If WBook Is
> > Nothing Then....) , ma nel caso lo fosse, qualcuno conosce il codice
> > magico?
>
> > PS: Tutti gli esercizi che ho fatto in excel con vbscript mi son
> > sempre funzionati senza attivare nessuna libreria, ma se lo fosse cosa
> > dovrei flaggare su strumenti ,riferimenti?
>
> > Vi ringrazio anticipatamente !
> > Ciao Ciao
>
> Una zebra a pois...
> ========================
> Public Function IsOpen(FilePath As String, FileName As String) As
> Boolean
> IsOpen = CreateObject("Scripting.FileSystemObject").FileExists(FilePath
> & "~$" & FileName)
> End Function
> ========================
>
> ... tutto qua!
>
> Bruno
>
> PS
> La funzione ritorna TRUE sui file aperti Read/Write, FALSE sui ReadOnly- Nascondi testo citato
>
> - Mostra testo citato -

Ciao Bruno.
E' proprio vero che la classe non è acqua.
Saluti
Eliano (il talebano) :-))
0 new messages