Avatar billede mrkr Juniormester
20. oktober 2008 - 17:29 Der er 1 kommentar og
1 løsning

teste om en fil er åbent

Jeg har en kodestump der eksporterer data fra den åbne fil til en fil med stamoplysninger. Koden starter som nedenfor vist.

Nu sker det at der er 2 forskellige brugere der opdaterer til denne fil på samme tid, hvilket er noget skrammel.

Kan man ikke lave en lille "test" på om filen "c:\dokument\opsamling.xlsm" allerede er åbent.

Hvis den er det skal den vente 2 sekunder og prøve igen. Hvis det igen ikke lykkedes skal den loope dette eks. 3 gange.

Er det stadig ikke lykkedes efter 3 gange, skal den komme med beskeden "Filen er optaget i længere tid." og så stoppe eksporten


Beklager den fettede pointgivning men kassen er tom :-)


Sub arkiver_indtastning_ekstern()
  Dim RK As Long, Data As Variant
    Application.ScreenUpdating = False
   
    Dim wb As Workbook
    Set wb = Workbooks.Open("c:\dokument\opsamling.xlsm", True, False)
   
    With ThisWorkbook.Sheets("indtastning")
            RK = .Range("B65536").End(xlUp).Row              ' finder nedeste linje
            Data = .Range(.Range("A3"), .Range("D" & RK))    ' området data er fra linje 3 og nedefter
            Data2 = .Range(.Range("K3"), .Range("K" & RK))
            Data3 = .Range(.Range("F3"), .Range("F" & RK))
            Data4 = .Range(.Range("L3"), .Range("L" & RK))
            Data5 = .Range(.Range("E3"), .Range("E" & RK))
            End With

        With wb.Sheets("poster")
            RK = .Range("B65536").End(xlUp).Row + 1                                  ' finder nederste linje og stiller sig i linjen nedenfor
            .Range(.Range("B" & RK), .Range("E" & RK + UBound(Data, 1) - 1)) = Data  ' indsætter data fra andet ark
            .Range(.Range("F" & RK), .Range("F" & RK + UBound(Data, 1) - 1)) = Data2
            .Range(.Range("J" & RK), .Range("J" & RK + UBound(Data, 1) - 1)) = Data3  ' indsætter data fra andet ark
            .Range(.Range("K" & RK), .Range("K" & RK + UBound(Data, 1) - 1)) = Data4  ' indsætter data fra andet ark
            .Range(.Range("I" & RK), .Range("I" & RK + UBound(Data, 1) - 1)) = Data5  ' indsætter data fra andet ark
        End With
     
    Application.DisplayAlerts = False
    wb.Save
    wb.Close
 
    Application.DisplayAlerts = True
End Sub
Avatar billede mrkr Juniormester
20. oktober 2008 - 19:59 #1
Jeg har fundet denne funktion, men den gør jo desværre ikke helt det jeg efterspørger.
Er der nogen der kan rette den, så den gør som jeg har berskrevet ovenfor?


Function IsFileOpen(FileName As String)
    Dim iFilenum As Long
    Dim iErr As Long
   
    On Error Resume Next
    iFilenum = FreeFile()
    Open FileName For Input Lock Read As #iFilenum
    Close iFilenum
    iErr = Err
    On Error GoTo 0
   
    Select Case iErr
    Case 0:    IsFileOpen = False
    Case 70:  IsFileOpen = True
    Case Else: Error iErr
    End Select
   
End Function

Sub test()
    If Not IsFileOpen("C:\MyTest\volker2.xls") Then
        Workbooks.Open "C:\MyTest\volker2.xls"
    End If
End Sub
Avatar billede mrkr Juniormester
29. oktober 2008 - 22:11 #2
lukker :-(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester