Board logo

標題: 如何判斷 server 上的 excel 檔案被開啟 [打印本頁]

作者: sghsgh1111    時間: 2015-4-1 23:33     標題: 如何判斷 server 上的 excel 檔案被開啟

有人可以解答一下, 要如何判斷 server 上的 excel 檔案被開啟
原因是因為如 server 上的 excel被別人開啟後,
要判斷是否能將資料存入到 server 上的 excel 檔案
若被別人開啟, 則跳出 message 通知 檔案己被開啟, 並放棄存檔
excel VBA 可以做的到嗎?
作者: diolin    時間: 2015-4-2 17:44

目前原本就會自動就會判斷呀 , 如果有人開啟, 就只能用唯讀打開

如果要自己打造, 就產生個 lock file 去供判斷就好了
作者: GBKEE    時間: 2015-4-3 15:44

回復 1# sghsgh1111


    http://stackoverflow.com/questio ... r-editing-using-vba
作者: sghsgh1111    時間: 2015-4-3 23:09

想請問 GBKEE 版主
  底下有些不太懂, 可以解答一下嗎

Sub SetAttribue()
Dim strFile As String
strFile = "c:\temp\test.xlsx"
If Not IsWorkBookOpen(strFile) Then
      SetAttr strFile, vbReadOnly                 ' 不太懂這邊的意思

      MsgBox "file now readonly"
    Else
        MsgBox "File is already open"
    End If
End Sub

Function IsWorkBookOpen(FileName As String) As Boolean
    Dim ff As Long
    Dim ErrNo As Long

    On Error Resume Next
    ff = FreeFile()                                                                   ' 不懂語法
    Open FileName For Input Lock Read As #ff   ' 不懂 #ff 意思
    Close ff
    ErrNo = Err
    On Error GoTo 0


    Select Case ErrNo
    Case 0:    IsWorkBookOpen = False
    Case 70:   IsWorkBookOpen = True
    Case Else: Error ErrNo
    End Select
End Function
作者: sghsgh1111    時間: 2015-4-3 23:16

回復 2# diolin


   我知道可以開的起來, 但被別人開啟後我又要存檔就會有問題啊
   所以才要一開啟檔案,就判斷檔案是否被別人開啟
   這對多人可能同時使用一個檔案, 有很大的關係
作者: sghsgh1111    時間: 2015-4-3 23:20

回復 3# GBKEE
想請問 GBKEE 版主
  底下有些不太懂, 可以解答一下嗎

Sub SetAttribue()
Dim strFile As String
strFile = "c:\temp\test.xlsx"
If Not IsWorkBookOpen(strFile) Then
      SetAttr strFile, vbReadOnly                 ' 不太懂這邊的意思
      MsgBox "file now readonly"
    Else
        MsgBox "File is already open"
    End If
End Sub

Function IsWorkBookOpen(FileName As String) As Boolean
    Dim ff As Long
    Dim ErrNo As Long

    On Error Resume Next
    ff = FreeFile()                                                                   ' 不懂語法
    Open FileName For Input Lock Read As #ff   ' 不懂 #ff 意思
    Close ff
    ErrNo = Err
    On Error GoTo 0

    Select Case ErrNo
    Case 0:    IsWorkBookOpen = False
    Case 70:   IsWorkBookOpen = True
    Case Else: Error ErrNo
    End Select




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)