Codice VBScript non funziona

Anonimo
2015-06-14T23:07:16+00:00

Carissimi, spero che Mauro si ricordi del mio post "Evitare finestra di apertura di Excel", IN QUANTO HA RISOLTO (in PARTE) IL PROBLEMA!

Mi fu consigliato di creare un file vbscript attraverso il quale aprire un file.xlsm.

Bene così fu fatto e tutto funzionava alla grande, poi sono nate altre problematiche.... (tutto quello fatto da Mauro Gamberini è stato perfetto)

bene, oggi, avrei la necessità di far comparire un messaggio del tipo:

"Attendere l'apertura del programma . . ."

mentre il file.xlsm continua ad aprirsi.

Dico questo, in quanto, essendo un file.xlsm in rete, impiega un po' (non molto) ad aprirsi e quindi gli utenti prof./assistenti/studenti, a volte cliccano una infinità di volte causando un blocco per mancanza di memoria.

Il file che accede al file.xlsm è un VbScript come consigliato da Mauro Gamberini!!!

Rifacendoci al suo costrutto (il quale funziona perfettamente), il messaggio che deve arrivare all'utente, dovrebbe essere inserito in questa posizione:

(File VBScript creato):

Dim objExcel '(Mauro)

Dim objWorkbook '(Mauro)

Dim objMsgBox '(codice inventato da noi non funziona) 

Set objMsgBox = " Attendere apertura programma prego . . ."  '(noi sempre inventato e sempre non funziona)

'==Il costrutto deve continuare ad eseguire le istruzioni==    

Set objExcel = CreateObject("Excel.Application") '(Mauro)

Set objWorkbook = objExcel.Workbooks.Open("C:\Prova\tuoFile.xlsm", Password:="MiaPassword")     '(Mauro...noi abbiamo aggiunto la password, per l'apertura automatica ma non funziona)

    objExcel.Visible = True '(Mauro)

    Set objWorkbook = Nothing '(Mauro)

    Set objExcel = Nothing '(Mauro)

    Set objMsgBox = Nothing '(noi) =per chiudere il messaggio iniziale all'utente=

Infine il file.xlsm è protetto da password, come posso inserire codice nel vbscript per aprirlo automaticamente?

Spero di essere stato chiaro.

Grazie sempre

Carlo Raffaele

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2015-06-15T14:10:39+00:00

Noi, però abbiamo la necessità di usare un file vbs per i noti problemi già segnalati.

<cut>

Prova (in grassetto le parti da modificare con i tuoi riferimenti):

Dim objExcel

Dim objWorkbook

Dim ObjProgressMsg

Function ProgressMsg( strMessage, strWindowTitle )

    Set wshShell = WScript.CreateObject( "WScript.Shell" )

    strTEMP = wshShell.ExpandEnvironmentStrings( "%TEMP%" )

    If strMessage = "" Then       

        On Error Resume Next

        objProgressMsg.Terminate( )

        On Error Goto 0

        Exit Function

    End If

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    strTempVBS = strTEMP + "" & "Message.vbs"     'Control File for reboot

    Set objTempMessage = objFSO.CreateTextFile( strTempVBS, True )

    objTempMessage.WriteLine( "MsgBox""" & strMessage & """, 4096, """ & strWindowTitle & """" )

    On Error Resume Next

    objProgressMsg.Terminate( )

    On Error Goto 0

    Set objProgressMsg = WshShell.Exec( "%windir%\system32\wscript.exe " & strTempVBS )

End Function

Do Until Err.Number <> 0

 ProgressMsg "File in apertura. Non chiudere la finestra.", "Attendere, prego."

 On Error Resume Next

 Err.Number = 0

 objWorkbook.Worksheets("Foglio1").Select

Loop

Set objExcel = CreateObject("Excel.Application")

Set objWorkbook = objExcel.Workbooks.Open("C:\Prova\test.xlsm",,,,"pippo", "pippo")

ProgressMsg "", ""

objWorkbook.Activate

objExcel.Visible = True

Set objProgressMsg = nothing

Set wshShell = Nothing

Set objFSO   = Nothing

Set objWorkbook = Nothing

Set objExcel = Nothing

NOTA. L'utente può chiudere la MsgBox e il procedimento di apertura del file continua.

Il codice per la gestione del MsgBox NON è farina del mio sacco. Chiedo scusa all'autore ma non ricordo il sito dal quale l'ho scaricato.

Per la password. Nota come fra la stringa che contiene la path al file da aprire e le password, ci siano 4 virgole. VBS non accetta parametri come Password:="tuapassword", ma vuole solo la stringa che contiene la password. Ti ricordo che per visualizzare il codice del VBSript, sia sufficiente fare click con il tasto dx del mouse sull'icona e selezionare: Modifica o Apri con.

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-06-15T18:48:03+00:00

    Ciao Mauro, ho provato l'ultima parte (password), e tutto funziona alla grande . . . .  .

    In relazione alla tua nota . . . . . . Per la password . . . Ti ricordo che per visualizzare il codice del VBSript, sia sufficiente fare click con il tasto dx del mouse sull'icona e selezionare: Modifica o Apri con.

    Forse non ricordi che mi indicasti un sito, dove ho scaricato, oltre all'Edit, anche un compilatore di file vbs.

    Quindi, caro Prof., una volta complilato un file vbs in .exe, è difficile ( non dico impossibile) leggere la password inserita per l'apertura del file.xlsm.!!!!

    Ovviamente per chi legge il codice macchina, puo' fare tutto.... ma questo mi insegni che è tutt'altro discorso, o sbaglio?!?!?!

    La prima parte del costrutto che ci hai passato, la stiamo provando e ti faremo sapere, caro Prof.

    Grazie sempre di tutto.

    N.B. credi che possiamo stare tranquilli che la password inserita nel file vbs e compilato in .exe, non viene letta facilmente, secondo il discorso che facevamo sopra???

    Ancora Grazie, GrazieCarlo Raffaele

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-06-15T11:28:08+00:00

    Ciao Mauro....

    dunque, se fosse possibile, vorrei aggiungere al tuo costrutto nel file.vbs (non parlo di pausa), un messaggio all'utente, con il quale si fa capire che il file.xlsm si sta aprendo e che devono attendere!

    Dico questo, in quanto, il tuo costrutto, il quale è stato inserito in un file vbs, tutto sembra che "non stia avvenendo (nulla)". Dopo circa (15/20 secondi).... si apre il file.xlsm attraverso il codice utilizzato (da te segnalato) inserito nel file.vbs. Quindi questo fa disorientare l'utente, il quale, spessissimo ci riclicca sopra altre volte....causando il blocco totale della memoria. Mentre se gli facciamo apparire un messaggio del ltipo....."Attendere prego apertura file", sempre nel file.vbs, ovviamente loro sanno di dover attendere e quindi non causano il blocco. Di conseguenza, all'apertura del fiel.xlsm, il messaggio di attendere.... dovrebbe scomparire!

    Alta cosa, il tuo codice a questa riga:

    Set objWorkbook = objExcel.Workbooks.Open("C:\Prova\tuoFile.xlsm")

    funziona perfettamente, mentre se cerchiamo di aprire il file.xlsm in automatico, inserendo la password... ci da errore (solo nel file.vbs e non se scrivi il codice in un file.xlsm).

    Noi, la riga sopra, l'abbiamo modificata così:

    Set objWorkbook = objExcel.Workbooks.Open("C:\Prova\tuoFile.xlsm", Password:="MiaPassword")

    ma ci da errore nel file, ripeto vbs, mentre se lo stesso codice lo riporti in un file.xlsm, non da errore.

    Noi, però abbiamo la necessità di usare un file vbs per i noti problemi già segnalati.

    Ciao e aspetto notizie

    Carlo Raffaele

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-06-15T09:20:45+00:00

    Ciao Carlo Raffaele,

    ammetterai che la questione ora sia diventata un po'... strana.

    Per evitare la finestra:

    hai usato il codice proposto da Mauro (che saluto) e che fa quel che deve fare. Ora però vuoi che compaia un messaggio... Non ti conviene, a questo punto, tornare a quella finestra?

    Il MsgBox interrompe l'elaborazione in attesa che l'utente prema un pulsante, quindi non è certo l'ideale per il tuo caso.

    Giusto per vedere l'effetto che fa, prova il codice seguente (io però preferirei la finestra qui su, ma forse non ho ben compreso le tue esigenze):

    ____________________________________________________________

    ' File          : Apre Grosso.xlsm

    ' Class Module  : ThisWorkbook/Questa_cartella_di_lavoro (Excel.Workbook)

    '

    Option Explicit

    Private xlApp As Excel.Application

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

          xlApp.Workbooks(1).Activate

          Set xlApp = Nothing

          If Me.Application.Workbooks.Count <= 2 Then Me.Application.Quit

    End Sub

    Private Sub Workbook_Open()

          Set xlApp = CreateObject("Excel.Application")

          With xlApp

            .Workbooks.Open Filename:=Me.Path & "*Grosso.xlsm*", _

                            Password:="Pippo", _

                            WriteResPassword:="Pippo"

            .Visible = True

            .WindowState = xlMaximized

          End With

          Me.Close SaveChanges:=False

    End Sub

    ____________________________________________________________

    L'unico Foglio di lavoro di "Apre Grosso.xlsm" potrebbe presentarsi così:

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-06-15T06:27:19+00:00

    Carissimi, spero che Mauro si ricordi del mio post "Evitare finestra di apertura di Excel", IN QUANTO HA RISOLTO (in PARTE) IL PROBLEMA!

    <cut>

    Esattamente, perché deve esserci una MsgBox (o altro) che aspetta che si apra il file?

    A cosa serve quella pausa?

    Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento