Print side | Luk vindue

Undgå "file in use message"

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=4816
Udskrevet den: 29.Apr.2024 kl. 08:47


Emne: Undgå "file in use message"
Besked fra: P.K..
Emne: Undgå "file in use message"
Posteringsdato: 15.Nov.2022 kl. 13:24
Jeg har en makro som opdaterer en række regnearks i et givent directory.  Problemet er at andre brugere også kan have regnearket åbent (eller der kan være gået nået galt i lukningen så det systemmæssigt på serveren er "optaget af anden bruger") når min makro kører - og i så tilfælde skal det konkrete regneark bare springes over til næste gang makroen kører.

Det lykkes nogle gange - og andre gange kommer der en prompt op om hvorvidt regnearket skal åbnes for readonly eller ej - og min makro går i stå.  Jeg har forsøgt at komme af med den prompt utallige gange men den bliver ved med at komme i enkelte tilfælde.  

Håber I eksperter kan se en fejl eller 2 i opbygningen af makroen:

Sub OpdaterFiler()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim fil As String
    Dim wkb As Workbook
    Dim wkbCurrent As Workbook
    Set wkbCurrent = ActiveWorkbook
    Dim previousSecurity As MsoAutomationSecurity
    
    'Disable on_open
    previousSecurity = Application.AutomationSecurity
    Application.AutomationSecurity = msoAutomationSecurityForceDisable
    
    fil = Dir(Names("Mappe2").RefersToRange.Value2 & "\*.xlsm")
    
    Do While fil <> ""
       
        Set wkb = Workbooks.Open(Names("Mappe2").RefersToRange.Value2 & "\" & fil, False)
    
        If wkb.Name <> wkbCurrent.Name And wkb.ReadOnly Then
  '      MsgBox ("fil er allerede åben derfor ingen action")
        wkb.Close SaveChanges:=False
        Set wkb = Nothing
       Else
  '       MsgBox ("fil er åben for redigering")
        'Ikke skrivebeskyttet (åbnet af andre)
            wkb.RefreshAll
            wkb.Worksheets("Overblik").Select
            wkb.Worksheets("Overblik").Unprotect
            wkb.Worksheets("Overblik").Range("b1").Value2 = "Fil opdateret"
            wkb.Worksheets("Overblik").Range("c1").Value2 = Now
            wkb.Save
            wkb.Close SaveChanges:=True
            Set wkb = Nothing
        End If
        fil = Dir
    Loop
    'slå til igen
    ' MsgBox ("makro er færdig")
    Application.AutomationSecurity = previousSecurity
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    
End Sub



Print side | Luk vindue