Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Copiare file su altro file verificando che data e ora apertura del primo non sia precdente a

Ultimo Aggiornamento: 16/03/2020 17:53
Post: 11
Registrato il: 18/07/2006
Utente Junior
Office 365 Pro Plus
OFFLINE
16/03/2020 11:45

Ciao a tutti,

ringrazio in anticipo per l'eventuale supporto.

Ho creato una macro che copia il testo da un file aperto in sola lettura e lo incolla in un altro file che funge da database.
Il mio problema è che per evitare che un salvataggio di un altro utente cancelli le modifiche effettuate dall'altro, avrei necessità al momento del salvataggio dei dati del file di destinazione, di effettuare una verifica che data e ora di apertura del file di origine non siano precedenti a quelle dell'ultimo salvataggio del file di destinazione.

E' possibile?

Incollo la macro per maggior chiarezza.


Salva KPI
Sub Salva_KPI()
  Dim WB0 As Workbook
  Dim WB1 As Workbook
  Dim SH0 As Worksheet
  Dim SH1 As Worksheet
  Dim Rng As Range
  Dim n As Variant
  Dim sts As Variant

  Const sFg0 As String = "KPI"
  
  Application.Calculation = xlCalculationManual
  Application.ScreenUpdating = True

  Set WB0 = ThisWorkbook
  Set SH0 = WB0.Sheets(sFg0)
  Set WB1 = Application.Workbooks.Open("W:Management Team\Daily Meeting\DATABASE DAILY MEETING 2020\Daily meeting 2020_database.xlsx", 3, False)
  Set SH1 = WB1.Sheets(sFg0)
    
  With SH0
  If .AutoFilterMode Or .FilterMode Then
  On Error Resume Next
  .ShowAllData
  End If
  End With
  
  With SH1
            If .AutoFilterMode Then
            Set Rng = .AutoFilter.Range
            On Error Resume Next
                If Rng.Rows.Count > Rng.SpecialCells(xlCellTypeVisible).Rows.Count Then
                .ShowAllData
                End If
            End If
  
  SH0.Range("B4:Q500").Copy
  .Range("B4").PasteSpecial xlPasteValues
  
  SH0.Range("A3:Q3").AutoFilter Field:=2, Criteria1:="<>1", Criteria2:="<>7"

  End With
            
    WB1.Save
    WB1.Close
    Set WB1 = Nothing
                 
SH0.Activate
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
Set WB0 = Nothing
End Sub
[Modificato da marcomaiolino 16/03/2020 11:46]
Post: 2.578
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
16/03/2020 11:56

ciao
che io sappia (spero di sbagliare) non c'è una data di apertura di un file, tuttalpiù quella dell'ultima modifica o della creazione.

Se quanto sopra è corretto, il procedimento potrebbe essere:

all'apertura del file da controllare, viene alimentato (in append) un txt con data e ora, in modo che l'ultimo record sia quello relativo alla data più recente di apertura.

Quando dall'altro file si cerca di copiare, prima si va ad analizzare l'ultimo record di tale txt.

Questo per grandi linee.

saluti



[Modificato da dodo47 16/03/2020 12:21]
Domenico
Win 10 - Excel 2016
Post: 11
Registrato il: 18/07/2006
Utente Junior
Office 365 Pro Plus
OFFLINE
16/03/2020 12:35

Re:
dodo47, 16/03/2020 11:56:

ciao
che io sappia (spero di sbagliare) non c'è una data di apertura di un file, tuttalpiù quella dell'ultima modifica o della creazione.

Se quanto sopra è corretto, il procedimento potrebbe essere:

all'apertura del file da controllare, viene alimentato (in append) un txt con data e ora, in modo che l'ultimo record sia quello relativo alla data più recente di apertura.

Quando dall'altro file si cerca di copiare, prima si va ad analizzare l'ultimo record di tale txt.

Questo per grandi linee.

saluti






E un po più in dettaglio?? 😅😅


Post: 2.579
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
16/03/2020 13:06

ciao
non c'è molto altro da dire.

Quando viene aperto il file che sarà da controllare, sull'evento open di tale file si alimenta un file txt con data e ora:

....
Open FileTxt For Append As #1
Write #1, Now
Close #1
....

Quando dall'altro file vuoi scrivere su quello, vai a controllare l'ultima data contenuta nel file di testo e la confronti....

Come sei messo a programmazione?

saluti



[Modificato da dodo47 16/03/2020 13:15]
Domenico
Win 10 - Excel 2016
Post: 12
Registrato il: 18/07/2006
Utente Junior
Office 365 Pro Plus
OFFLINE
16/03/2020 13:38

Non così bene... :D
Post: 2.580
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
16/03/2020 16:21

ciao
visto che sarebbe complesso poi per te, ti sottopongo un'altro modo:

aprire "in esclusiva" il file, ovvero:

- trasforma il tuo file:
Daily meeting 2020_database.xlsx in xlsm

- sull'evento open di tale file ci metti:

[TESRTO]Private Sub Workbook_Open()
On Error Resume Next
If ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.ExclusiveAccess
Else
MsgBox "File già in uso"
ActiveWorkbook.Close False
End If
End Sub


In questo modo se il file non è aperto da nessuno, sei sicuro che ci puoi copiare i dati.

Ovviamente ciò comporta che chiunque apra il file per primo, lo apre in modalità esclusiva.

saluti



Domenico
Win 10 - Excel 2016
Post: 13
Registrato il: 18/07/2006
Utente Junior
Office 365 Pro Plus
OFFLINE
16/03/2020 17:30

Il problema è che il precedente utente potrebbe già averlo salvato e richiuso. Il fatto di usarlo in modalità esclusiva non mi assicura che chi salverà dopo di lui non sovrascriva qualche cella che è stata aggiornata da un altro utente...

il confronto tra i due txt era un ottima soluzione.
Sono riuscito a scrivere lo script per far aggiornare i due txt con le date, ma non so come fargli effettuare il confronto.
Post: 2.581
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
16/03/2020 17:53

perchè 2 txt ?




Domenico
Win 10 - Excel 2016
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 12:06. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com