1

VBAから、特定の名前のスプレッドシートが現在のExcelセッションで開いているかどうかを確認する簡単な方法はありますか?

4

3 に答える 3

2
       Dim wBook As Workbook 
             'Check that Summary worksheet is available for update.
 on error goto ErrHandler
            Set wBook = Workbooks("CommittedSummary.xls") 
               If wBook Is Nothing Then 
        msgbox("Not Open")
            Else 'It is open
                MsgBox("The 'CommittedSummary.xls' workbook is already in use and 
                cannot be updated.  Please try again when the workbook Is available", _ 
                vbCritical, "Committed Request Edit") : exit sub
               End If 
    errhandler: msgbox("Workbooks is already open"):exit sub
于 2013-03-18T09:56:33.343 に答える
2

以下のようにエラー処理を使用します

Sub Working()
Dim Wb As Workbook
Dim strFile As String
strFile = "X.xls"
On Error Resume Next
Set Wb = Workbooks(strFile)
On Error GoTo 0
If Not Wb Is Nothing Then
MsgBox strFile & " is open in this Excel instance"
Else
MsgBox strFile & vbNewLine & " is Closed in this Excel instance", vbCritical
End If
End Sub
于 2013-03-18T11:43:59.237 に答える
-1

使用しないでくださいOn Error Resume Next

コードがその行でクラッシュするからといって、ワークブックが実際に開かれていないわけではありません。コードがクラッシュしたことを意味します。

Excel.Application のインスタンスが 2 つある場合、各インスタンスにはワークブック コレクションがあります。また、適切なワークブック コレクションを探していない可能性があります。その後、コードがクラッシュします。コードがクラッシュする理由は他にもある可能性があります。

コードの通常のフローでエラー ハンドラを使用しないでください。プログラミングが不適切であり、問​​題が発生する可能性があります。エラー処理は、予期しない問題に対するものです。

于 2013-03-20T17:28:35.643 に答える