Condividi:        

Chiusura a tempo dei file.xls non attivi

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Chiusura a tempo dei file.xls non attivi

Postdi clipeus2000 » 16/02/13 13:57

beh Anthony io ci provo.. son curioso di conoscere e scoprire cose nuove.. e infatti se non ci fosse stato questo bisogno non mi sarei nemmeno avvicinato al vba e a questo forum.. capisco di essere scocciante e pesante e che questo e' 1 forum di livello alto..

grazie dell'aiuto ci provo e ti faccio sapere!!
clipeus2000
Utente Junior
 
Post: 14
Iscritto il: 13/02/13 22:00

Sponsor
 

Re: Chiusura a tempo dei file.xls non attivi

Postdi Anthony47 » 16/02/13 15:05

Purtroppo devi creare tu quel meccanismo, perche' poi gli utenti chiameranno te quando hanno bisogno di chiarimenti; e solo se lo hai creato tu allora lo padroneggi... potrei dire che ti costringo a cavartela da solo per il tuo bene :D , ma non lo faccio :D :D

Comunque siamo qua.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Chiusura a tempo dei file.xls non attivi

Postdi clipeus2000 » 16/02/13 15:21

l'avevo compreso.... tranquillo.. purtroppo e' proprio quello che devo fare..

grazie ancora!!
clipeus2000
Utente Junior
 
Post: 14
Iscritto il: 13/02/13 22:00

Re: Chiusura a tempo dei file.xls non attivi

Postdi matzap » 08/06/16 11:58

ciao a tutti,
ho provato a utilizzare la ciusura automatica inserendo in this_workbook il codice
Codice: Seleziona tutto
Private Sub Workbook_Activate()
Application.Run ("autorizzazioni")
Flag1 = True
end sub

e poi
Codice: Seleziona tutto
Private Sub Workbook_Deactivate()


UserForm2.Hide
Flag1 = False
DeltaT = "00:02:00"
Application.OnTime Now + TimeValue(DeltaT), "Chiudi"
End Sub

la macro funzione ma il problema è che ho anche una macro che si attiva prima della chiusura
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WS_Count As Integer
Dim I As Integer
Dim foglio As Integer
Application.ScreenUpdating = False
WS_Count = ActiveWorkbook.Worksheets.Count
foglio = ActiveSheet.Index
For I = 1 To WS_Count
If I <= 13 Then
ActiveWorkbook.Worksheets(I).Select
  ActiveWorkbook.Worksheets(I).Unprotect "password"
  Range("A2").Select
  Selection.Value = ""
ThisWorkbook.Worksheets(I).Protect "password", DrawingObjects:=True, contents:=True, Scenarios:= _
        True, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True

Else
ActiveWorkbook.Worksheets(I).Protect "password", DrawingObjects:=True, contents:=True, Scenarios:= _
        True, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True
End If
Next I
Worksheets(foglio).Select
Application.ScreenUpdating = False
End Sub

quiesta macro va in errore probabilmente fa riferimento a activeworkbook ma il file non è attivo.
come posso fare?
Ciao
excel 2010
matzap
Utente Senior
 
Post: 246
Iscritto il: 16/04/13 08:27

Re: Chiusura a tempo dei file.xls non attivi

Postdi Anthony47 » 08/06/16 19:02

Nella tua Workbook_BeforeClose un po' fai riferimento a ThisWorkbook, un po' a ActiveWorkbook.
Il primo e' superfluo (per definizione tutto cio' che e' incluso nel modulo This_Workbook fa riferimento al file in cui la macro e' contenuta, come fa la proprieta' ThisWorkbook), il secondo e' equivoco (perche' se chiudi a mano allora e' evidente che il workbook attivo e' quello in cui stai lavorando; se chiudi da una macro allora non sai chi e' attivo e quindi non sai quali operazioni puoi eseguire e quali no.
Cio' detto, prova con questa versione:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WS_Count As Integer
Dim I As Integer
'Dim foglio As Integer
Application.ScreenUpdating = False
WS_Count = Worksheets.Count
foglio = ActiveSheet.Index
For I = 1 To WS_Count
If I <= 13 Then
'ActiveWorkbook.Worksheets(I).Select
    Worksheets(I).Unprotect "password"
    Worksheets(I).Range("A2").ClearContents
    Worksheets(I).Protect "password", DrawingObjects:=True, contents:=True, Scenarios:= _
      True, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
      AllowFormattingRows:=True
Else
    Worksheets(I).Protect "password", DrawingObjects:=True, contents:=True, Scenarios:= _
      True, AllowFormattingCells:=False, AllowFormattingColumns:=True, _
      AllowFormattingRows:=True
End If
Next I
'Worksheets(foglio).Select
Application.ScreenUpdating = False
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Chiusura a tempo dei file.xls non attivi

Postdi matzap » 13/06/16 16:43

ok grazie Anthony, ci provo. ora ho un problema più grave ma apro un altro post!!
Ciao
excel 2010
matzap
Utente Senior
 
Post: 246
Iscritto il: 16/04/13 08:27

Re: Chiusura a tempo dei file.xls non attivi

Postdi AndreaB » 13/07/17 13:39

ricky53 ha scritto:Ciao,
tempo fa avevo realizzato un "prodotto" per chiudere un file XLS se non veniva aggiornato dopo "nn" secondi o veniva "Deattivato" il file in utilizzo.
Vi riporto il codice che ho utilizzato ed allego un esempio.

Da inserire in un "MODULO"
Codice: Seleziona tutto
Public Dato As String, Nome_File As String
Public Orario_Precedente As Date, Orario_Attuale As Date, Orario_Nuovo As Date, _
    DeltaA As Date, DeltaT As Date

Sub TempoX()
    DeltaA = "00:00:20"
    Orario_Attuale = Time
    Leggi_Tempo
    Ora = Left(Right(Dato, 8), 2)
    Min = Left(Right(Dato, 5), 2)
    Sec = Right(Dato, 2)
    Orario_Precedente = Ora & ":" & Min & ":" & Sec
    Orario_Nuovo = Orario_Precedente + DeltaA
    If Orario_Attuale > Orario_Nuovo Then
        Chiudi
        Exit Sub
    End If
    Application.OnTime Now + TimeValue(DeltaA), "TempoX"
End Sub

Sub Chiudi()
    MsgBox "'Chiusura Automatica' del file per tempo msssimo raggiunto senza aggiornamenti" & _
        Chr(13) & Chr(13) & "Il file verrà comunque salvato !!!"""
    ThisWorkbook.Close SaveChanges:=True ' <<------------ RIATTIVARE a fine prove !!!!
End Sub

Sub Scrivi_Tempo()
    Nome_File = "D:\Tempo.txt"
    Dato = Date & "-" & Format(Time, "hh:mm:ss")
    Open Nome_File For Output As #1
    Write #1, Dato
    Close 1
    MsgBox "Inizio temporizzazione per chiusura automatica dopo: " & DeltaT
End Sub

Sub Leggi_Tempo()
    Nome_File = "D:\Tempo.txt"
    Open Nome_File For Input As #1
    Input #1, Dato
    Close 1
End Sub[code]

Da inserire in un "ThisWorkbook"
[code]Private Sub Workbook_Activate()
    DeltaT = "00:00:10"
    Scrivi_Tempo
    TempoX
End Sub

Private Sub Workbook_Deactivate()
    DeltaT = "00:00:15"
    Application.OnTime Now + TimeValue(DeltaT), "Chiudi"
End Sub

Private Sub Workbook_Open()
    DeltaT = "00:01:00"
    Scrivi_Tempo
End Sub
[code]

Da inserire nel vai fogli
[/code]Private Sub Worksheet_Activate()
    Scrivi_Tempo
End Sub


Gli intervalli del tempo di attesa sono volutamente "piccoli" per consentire le prove: vanno adattati in base alle esigenze.
L'esempio è QUESTO


Ciao Ricky,
sto usando la tua macro e in azienda riusciamo a gestire molto meglio il lavoro. Grazie.
Credo però che serva ancora una messa a punto delle variabili di tempo. Sinceramente non ho capito bene ogni deltaT a cosa si riferisca.
di seguito come li ho impostati nella macro:

In this workbook ho:

- Workbook_Activate()
DeltaT = "00:30:00"

- Workbook_Deactivate()
DeltaT = "00:10:00"


In modulo ho:

- Scrivi_Tempo()
....
If DeltaT = "00:00:00" Then
Exit Sub

poi nei vari fogli ho messo questo:
Private Sub Workbook_Open()
Scrivi_Tempo
End Sub


Succede spesso che il file si chiude mentre ci si sta lavorando.
Grazie mille per l'aiuto

Andrae
AndreaB
Newbie
 
Post: 3
Iscritto il: 13/07/17 13:24

Re: Chiusura a tempo dei file.xls non attivi

Postdi Anthony47 » 15/07/17 23:34

Ciao AndreaB, benvenuto nel foglio.
Riguardo al pezzo di codice
Codice: Seleziona tutto
Scrivi_Tempo()
....
If DeltaT = "00:00:00" Then
Exit Sub
Non riconosco quale e' il codice di Ricky a cui fai riferimento.

Per quanto riguarda poi
poi nei vari fogli ho messo questo:
Codice: Seleziona tutto
Private Sub Workbook_Open()
Scrivi_Tempo
End Sub

Nei vari fogli dovresti invece mettere (vedi nota **)
Ricky ha scritto:Da inserire nel vai fogli
Codice: Seleziona tutto
Private Sub Worksheet_Activate()
    Scrivi_Tempo
End Sub


Nota**: Pero', pensandoci bene, secondo me nei moduli vba dei vari fogli potresti non inserire niente e invece inserire nel solo modulo ThisWorkbook (dove hai gia' messo la Workbook_Open, la Workbook_Deactivate e altre) questo codice:
Codice: Seleziona tutto
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Scrivi_Tempo
End Sub


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Chiusura a tempo dei file.xls non attivi":


Chi c’è in linea

Visitano il forum: Ricky0185 e 59 ospiti