2012-05-18 46 views
0

我試圖拼湊一些VBA的其他部分來實現這一點,但是我是一個初學者,所以沒有運氣。我想用VBA來實現以下目標:是否可以使用VBA來檢查使用命名區域指定的工作簿是否已打開?

  • 運行下面的負載:另一個工作簿
  • 檢查當前是否處於打開狀態。該工作簿由包含所述工作簿的整個網絡位置的命名範圍(input_sheet_location)指定。
  • 如果未打開,請詢問用戶是否可以打開它。
  • 如果該加載失敗(即無法找到/被限制/命名的範圍爲空),請退出帶有錯誤消息的子文件並允許用戶繼續。
  • 如果它已打開,請在沒有提示的情況下繼續。

我99%肯定所有這些東西都是可以實現的;我根本就沒有將它們串在一起的技巧。因此,我真正缺乏的唯一難題就是上面的第二點。其他任何事情,我都可以(希望)弄清楚。

謝謝你的時間!

+0

對於第二個要點,看看這是否有幫助? http://stackoverflow.com/questions/9373082/detect-whether-excel-workbook-is-already-open-using-vba/9374481#9374481 –

+0

該鏈接應該讓你通過第二個項目符號點。如果您遇到其他問題,請告訴我們。我最近做了一個項目,進行各種與這些東西有關的錯誤檢查和陷印。 –

回答

0

我設法弄明白了;感謝您的迴應。

它是這樣的:

Sub IsInputSheetOpen() 
Dim Ret 

Ret = IsWorkBookOpen(range("input_sheet_location_nobrackets")) 

If Ret = True Then 
    MsgBox "Input sheet is open." 
Else 
    MsgBox "Input sheet is not open. Auto output won't work without it." 
End If 
End Sub 

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

On Error Resume Next 
ff = FreeFile() 
Open FileName For Input Lock Read As #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 

關鍵的事情是沒有你爲了使用它作爲參考需要的方括號中的命名範圍(input_sheet_location_nobrackets)內格式化我的文件位置。我敢肯定,上面是相當混亂,但它似乎工作!

相關問題