2014-11-13 64 views
0

我有一個簡單的問題(我認爲)。比方說,我在第一冊的標準模塊中設置一個全局變量,以開放的(不同的)工作簿:已關閉工作簿後設置爲工作簿的變量的狀態

Public Sub InitGlobals() 
    Set gwkb = Workbooks("book2.xlsx") 
End Sub 

現在我手動關閉book2.xlsx。 gwkb的狀態如何?這是我所得到的,當我在即時窗口中運行各種測試:

?gwkb is nothing 
False 
?isempty(gwkb) 
False 
?isnull(gwkb) 
False 

但是,如果我問的gwkb任何財產,如gwkb.Name,我得到一個自動化錯誤。

我的問題是:有沒有辦法測試這種情況,而不訴諸某種「On Error Resume Next」測試?

感謝您的幫助。

+1

下[文章](http://stackoverflow.com/a/9373914/ 2521004)是測試工作簿是否仍然打開的好方法。 –

+0

可能的重複[檢測Excel工作簿是否已經打開(使用VBA)](http://stackoverflow.com/questions/9373082/detect-whether-excel-workbook-is-already-open-using-vba) –

+0

@ Gary's Student&PortlandRunner - 感謝您的快速響應,但我並不想測試book2.xlsx是否開放。我想知道使用gwkb是否仍然「安全」。例如,在我的應用程序中,我不會知道gwkb設置的確切文件名,但如果我嘗試使用gwkb.Name,則會出現錯誤。我猜想我想知道是否在VBA中可能存在gwkb的狀態/測試,超出了「is nothing」,「isNull」或「isEmpty」以確定它是否仍然可以用作對象。也許我唯一的選擇是編寫一個像「bIsOK(gwkb)」這樣的函數來檢查錯誤?再次感謝。 – user3803315

回答

1

如果第二冊最初是開放的,可以被關閉,然後遍歷打開的書不會找到它:

Public Sub InitGlobals() 
    Dim gwkb As Workbook, wb As Workbook 
    Set gwkb = Workbooks("Book2.xlsx") 
    gwkb.Close 
    For Each wb In Workbooks 
     If wb.Name = "Book2" Then 
      MsgBox wb.Name & " is open " 
     End If 
    Next wb 
End Sub 
+0

如果不是iserror(gwkb)則msgbox gwkb.name',有時在' i = application.match()'用於測試如果i變量沒有返回空結果 –

+0

,方法是使用這種不使用錯誤句柄的好方法。可以把它變成一個功能,並經常使用它^^ –

+0

@PatrickLepelletier .....這是一個權衡......不使用錯誤處理,但循環使用.....這可能會失去效率如果有許多工作簿在同一時間打開。 –

相關問題