È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

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

  • Messaggi
  • OFFLINE
    marcomaiolino
    Post: 11
    Registrato il: 18/07/2006
    Utente Junior
    Office 365 Pro Plus
    00 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]
  • OFFLINE
    dodo47
    Post: 2.578
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    marcomaiolino
    Post: 11
    Registrato il: 18/07/2006
    Utente Junior
    Office 365 Pro Plus
    00 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?? 😅😅


  • OFFLINE
    dodo47
    Post: 2.579
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    marcomaiolino
    Post: 12
    Registrato il: 18/07/2006
    Utente Junior
    Office 365 Pro Plus
    00 16/03/2020 13:38
    Non così bene... :D
  • OFFLINE
    dodo47
    Post: 2.580
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 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
  • OFFLINE
    marcomaiolino
    Post: 13
    Registrato il: 18/07/2006
    Utente Junior
    Office 365 Pro Plus
    00 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.
  • OFFLINE
    dodo47
    Post: 2.581
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 16/03/2020 17:53
    perchè 2 txt ?




    Domenico
    Win 10 - Excel 2016