workbook in lettura

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
maxma62
00sabato 18 febbraio 2017 14:12
Ciao a tutti.
Il workbook allegato è installato in una cartella comune nell'azienda dove lavoro.
In caso di apertura da parte di un secondo utente si visualizza un messaggio:

avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & _
"l'applicazione < xxxxxxxxxx > è già aperta da altro utente" & Chr(13) & _
"e non può essere aperta in lettura." & Chr(13) & _
"Riprova più tardi", vbCritical + vbOKOnly, "AVVISO!")

e il workbook si chiude con O.k.
Se qualcuno sa come fare cliccando prima dell'o.k. CTRL+PAUSA si ferma la macro e compare la mascherina del degug 2 scelte:

continua = si chiude il workbook
fine= si accede al foglio
(degug no il vba è protetto)

il problema è con la scelta fine.
Cliccando poi in una qualsiasi cella si fa una modifica che poi si salva con una copia del workobook.
E' possibile inibire questa fine del debug?
Per provare la macro senza avere una cartella comune cambiare la proprietà del workbook in lettura.
Spero di essermi spiegato.
max

maxma62
00sabato 18 febbraio 2017 16:10
Rintracciato in rete:

'---------------------------------------------------------------------------------------------
Private Sub Workbook_Open()


Dim blnReadonly As Boolean '<<< x autoclose readyonly
Dim avviso As String
Dim AckTime As Integer, InfoBox As Object

'--------------------------------------------------------------------------
'autoclose lettura

Application.EnableCancelKey = xlDisabled '<<<< disabilita debug CTRL+PAUSE

Application.DisplayAlerts = False

blnReadonly = ThisWorkbook.ReadOnly

If blnReadonly = True Then


avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & _
"l'applicazione < xxxxxxxxxx > è già aperta da altro utente" & Chr(13) & _
"e non può essere aperta in lettura." & Chr(13) & _
"Riprova più tardi", vbCritical + vbOKOnly, "AVVISO!")


Application.Quit ' chiude tutto excel
'ThisWorkbook.Close 'chiude solo 1 excel

End If


If blnReadonly = False Then

Application.DisplayAlerts = True

Application.EnableCancelKey = xlInterrupt '<<<< riattiva debug CTRL+PAUSE

'If blnReadonly = False Then

'--------------------------------------------------------------------------
'avviso avvio
'altri avvisi qui



'--------------------------------------------------------------------------

End If

Application.ScreenUpdating = True

End Sub


è esatto o può creare problemi?
max
rollis13
00sabato 18 febbraio 2017 17:33
Non mi sembra che quella macro possa creare dei problemi.
L'unica cosa che non mi piace è l'uso di Application.Quit invece di ThisWorkbook.Close ... ma penso che tu l'abbia già preso in considerazione il particolare.
Immagina che io stia lavorando su un mio file di Excel e mi venga voglia di verificare se il file condiviso è "libero" ... se malauguratamente risulta "occupato" alla sua chiusura Application.Quit chiuderà anche il mio file ... [SM=x423045]
maxma62
00sabato 18 febbraio 2017 17:48
Ops rollis hai ragione.. [SM=g27811]
un saluto.
max
maxma62
00domenica 19 febbraio 2017 09:35
Una piccola correzzione.
Se il file viene aperto non il lettura si visualizza il contenuto del workbook (come è fatto)
con la maschera opzioni > proteggi contenuto o attiva macro e poi tutto funziona
Se il file viene aperto in lettura si visualizza il contenuto del workbook (come è fatto)
con la maschera opzioni > proteggi contenuto o attiva macro e poi si chiude il workbook.
Fino a qui va bene.
C'è una riga di comando per fare il modo che se il file viene aperto in lettura
non si visualizzi subito il contenuto del workbook?
Spero di essermi spiegato.
max
rollis13
00domenica 19 febbraio 2017 15:04
Puoi gestire una Userform (o qualcosa di simile) grande abbastanza per coprire l'intera videata. La mostri subito poi decidi se toglierla o chiudere il file in base alla sua condizione.
Oppure puoi dare il focus su un foglio vuoto per poi cambiare foglio o chiudere il file.
maxma62
00domenica 19 febbraio 2017 17:18
Ciao rollis,
penso sia questo.

Application.Visible = False '<<<< excel non visibile

Private Sub Workbook_Open()


Dim blnReadonly As Boolean  '<<< x autoclose readyonly
Dim avviso As String
Dim AckTime As Integer, InfoBox As Object

'--------------------------------------------------------------------------
'autoclose lettura

Application.EnableCancelKey = xlDisabled   '<<<< disabilita debug CTRL+PAUSE

 Application.DisplayAlerts = False

blnReadonly = ThisWorkbook.ReadOnly

If blnReadonly = True Then
    
   Application.Visible = False '<<<< excel non visibile
   
avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & _
          "l'applicazione < xxxxxxxxxx > è già aperta da altro utente" & Chr(13) & _
          "e non può essere aperta in lettura." & Chr(13) & _
          "Riprova più tardi", vbCritical + vbOKOnly, "AVVISO!")
          

    'Application.Quit ' chiude tutto excel
    ThisWorkbook.Close 'chiude solo 1 excel
    
End If


If blnReadonly = False Then

Application.DisplayAlerts = True

Application.EnableCancelKey = xlInterrupt  '<<<< riattiva debug CTRL+PAUSE

'If blnReadonly = False Then

'--------------------------------------------------------------------------
'avviso avvio
'altri avvisi qui



'--------------------------------------------------------------------------

End If

Application.ScreenUpdating = True

End Sub



max
rollis13
00domenica 19 febbraio 2017 18:19
In effetti, nel tuo caso, dato che se il file è "occupato" provvedi a chiudere il file quella funzione ti va benissimo.
L'unica cosa che però devi fare è riattivarla una riga prima di chiudere il file altrimenti se hai altri file Excel aperti questi non saranno più visibili.
maxma62
00domenica 19 febbraio 2017 19:04
Grazie rollis non l'avevo notato in caso di più excel aperti, in effetti si chiudevano tutti.
Ho aggiunto la riga come mi hai detto: [SM=g27811]



'===============================================================================================
Private Sub Workbook_Open()

Dim blnReadonly As Boolean '<<< x autoclose readyonly
Dim avviso As String
Dim AckTime As Integer, InfoBox As Object

'--------------------------------------------------------------------------
'autoclose lettura

Application.EnableCancelKey = xlDisabled '<<<< disabilita debug CTRL+PAUSE

Application.DisplayAlerts = False

blnReadonly = ThisWorkbook.ReadOnly

If blnReadonly = True Then

Application.Visible = False '<<<< excel non visibile

avviso = MsgBox("Sign. " & Environ("UserName") & Chr(13) & _
"l'applicazione < xxxxxxxxxx > è già aperta da altro utente" & Chr(13) & _
"e non può essere aperta in lettura." & Chr(13) & _
"Riprova più tardi", vbCritical + vbOKOnly, "AVVISO!")


Application.Visible = True '<<<< excel visibile

'Application.Quit ' chiude tutto excel
ThisWorkbook.Close 'chiude solo 1 excel

End If

If blnReadonly = False Then

Application.DisplayAlerts = True

Application.EnableCancelKey = xlInterrupt '<<<< riattiva debug CTRL+PAUSE

'If blnReadonly = False Then

'--------------------------------------------------------------------------
'avviso avvio
'altri avvisi qui


'--------------------------------------------------------------------------

End If

Application.ScreenUpdating = True

End Sub

'===============================================================================================

max
rollis13
00domenica 19 febbraio 2017 21:24
Perfetto [SM=g27811] .
Non è che gli altri file si chiudono, vengono anch'essi messi in condizione "invisibile", infatti, se provi a riaprirne uno sicuramente riceverai la segnalazione che il file è già aperto.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 06:15.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com