2016-06-15 4 views
1

現在のワークブック内の特定のシートが別の閉じられたワークブックに存在するかどうかをテストし、エラーの原因となっているシートを示すメッセージを返します。シートが外部クローズドワークブックに存在するかどうかをチェック

ブックを開いたり閉じたりしないようにして、シートが存在するかどうかをテストするためにファイルパス(fp)のブックにリンクするランダムセルの式を変更しようとしています。

これは私が知っているダミーシートでテストしましたが、他のブックには存在しませんが、動作しますが、エラーが発生するシートが複数ある場合、アプリケーション定義またはオブジェクト定義エラー" 2回目の反復では、エラー処理がどのように書かれているのかがクラッシュの原因になると私は信じていますが、その動作の仕方は正確には分かりません。

私が持っているコードは次のとおりです。

Sub SheetTest(ByVal fp As String) 
Dim i, errcount As Integer 
Dim errshts As String 

For i = 2 To Sheets.Count 
    On Error GoTo NoSheet 
     Sheets(1).Range("A50").Formula = "='" & fp & Sheets(i).Name & "'!A1" 
    GoTo NoError 
NoSheet: 
errshts = errshts & "'" & Sheets(i).Name & "', " 
errcount = errcount + 1 
NoError: 
Next i 

Sheets(1).Range("A50").ClearContents 

If Not errshts = "" Then 
    If errcount = 1 Then 
     MsgBox "Sheet " & Left(errshts, Len(errshts) - 2) & " does not exist in the Output file. Please check the sheet name or select another Output file." 
    Else 
     MsgBox "Sheets " & Left(errshts, Len(errshts) - 2) & " do not exist in the Output file. Please check each sheet's name or select another Output file." 
    End If 
    End 
End If 

End Sub 

うまくいけば、あなたたちはここに私を助けることができ、感謝!

+0

このサブプログラムを呼び出すと面白いと思いますが、何をfp文字列に渡しますか?ワークブックが開いていないとワークシートの値にアクセスできないと確信していました – dbmitch

+0

fp文字列には、通常のリンクされたセルと同様に、[]内の外部ワークブックのパスが含まれています。 – superzipp

答えて

1

ここでは少し異なるアプローチです:

Sub Tester() 

    Dim s As Worksheet 

    For Each s In ThisWorkbook.Worksheets 

     Debug.Print s.Name, HasSheet("C:\Users\blah\Desktop\", "temp.xlsm", s.Name) 

    Next s 


End Sub 



Function HasSheet(fPath As String, fName As String, sheetName As String) 

    Dim f As String 

    f = "'" & fPath & "[" & fName & "]" & sheetName & "'!R1C1" 

    HasSheet = Not IsError(Application.ExecuteExcel4Macro(f)) 

End Function 
+0

スムーズな返信をしてくれてありがとうTim !!これは確かに私が持っていたよりもはるかにエレガントでシンプルです。私は、エラーチェッカーの代わりにIsError(Application.ExecuteExcel4Macro(f))行を修正し、完全に動作します。 – superzipp

-1

サブテスター()

のMsgBox(未ISERROR(Application.ExecuteExcel4Macro( "! 'C:\ tempに[temp.xlsm] Sheetxyz' R1C1"エラー処理のためのティムの機能のためだけ更新)))

End Subの

+0

スタックオーバーフローへようこそ!あなたが提供しているコードについていくつかの説明をしてください。 –

0

VBA:

Function HasSheet(fPath As String, fName As String, sheetName As String) 
On Error Resume Next 
Dim f As String 

f = "'" & fPath & "[" & fName & "]" & sheetName & "'!R1C1" 

HasSheet = Not IsError(Application.ExecuteExcel4Macro(f)) 
If Err.Number <> 0 Then 
    HasSheet = False 
End If 
On Error GoTo 0 
End Function 
関連する問題