2016-08-23 8 views
1

2つの別のブックで特定のシート名の値を検索するコードがあります。VBAでExcelプロンプトでエラーをスローする方法

最初のワークブックにシートがない場合は、次のプロンプトが表示されず、エラーをキャンセル/スローし、エラー処理を使用して2番目のスプレッドシートに移動します。これはどうすればいいですか?

Sheet Select Prompt

現在、私はこれを達成するために、このコードを使用しています:

fFormString1 = "'" & wkBookRef1 & firstShtName & "'!$L$6/1000" 
fFormString2 = "'" & wkBookRef2 & firstShtName & "'!$L$6/1000" 
Application.DisplayAlerts = False 'Does nothing to the prompt 
On Error GoTo tryTwo 'Following only throws error when prompt is canceled 
    ThisWorkbook.Sheets("Place").Range("E53").Formula = "=" & fFormString1 
    GoTo endTen 

tryTwo: 
    ThisWorkbook.Sheets("Place").Range("E53").Formula = "=IFERROR(" & fFormString2 & ","""")" 
    On Error Resume Next 
endTen: 
Application.DisplayAlerts = True 'Does nothing to the prompt 

注:私は、スプレッドシートは、理想的に閉じた状態でこれを行うことを望みます。または、視覚的に私のクライアントの操作の速度とスムーズさを向上させるために存在しません。

+1

あなたが見て私たちのためにいくつかのコードを持っていますか? – Comintern

+0

@Cominternコードが上記のように追加されました。 – AER

答えて

1

トーマスの回答(全額返済予定)から借りています。しかし、これはあなたのために働かなかったようです。

ExecuteExcel4Macroを使用しますが、値は変数valに帰属します。次に、これがError(2023)を探しているエラーかどうかを確認します。

見つけてください以下のコード:

'Check if the sheet exists in the workbook, used to check which forecast file one should look in 
Function ExtSheetExists(formString) As Boolean 'Form string is a formula string with both the worksheet and the workbook 
    Dim val As Variant 
    'Tries to execute formula and throws error if it doesn't exist 
    On Error Resume Next 
    val = ExecuteExcel4Macro(formString) 
    ExtSheetExists = (val <> Error(2023)) 'Returns False if the sheet does not exist based on Error 2023 
    On Error GoTo 0 
End Function 
3

ExecuteExcel4Macroは、クローズドブックから値を返します。ワークシートが存在しない場合は、エラーが発生します。1004 'A formula in this worksheet contains one or more invalid references.

ExternalWorksheetExistsワークシートが存在するかどうかテストします。

enter image description here

Function ExternalWorksheetExists(FilePath As String, FileName As String, WorksheetName As String) As Boolean 

    If Right(FilePath, 1) <> "\" Then FilePath = FilePath & "\" 

    On Error Resume Next 
    Call ExecuteExcel4Macro("'" & FilePath & "[" & FileName & "]" & WorksheetName & "'!R3C3") 
    ExternalWorksheetExists = Err.Number = 0 
    On Error GoTo 0 

End Function 

ExecuteExcel4Macroを使用する場合は、すべての参照がR1C1文字列として指定する必要があります。有効な文字列の例を次に示します。

ExecuteExcel4Macro("'C:\Users\tinzina\Documents\[Book1.xlsm]Sheet1'!R6C12") 
+0

は、ExecuteExcel4Macroは常にエラーを返すようです。そして、はい、私はファイルパスを何度もチェックしました。エラーは常にゼロ以外の値として返されるようです10032 – AER

+0

入力文字列から参照を貼り付けてコピーしても問題はありません。私は相対RC参照を使用していないよ。しかし私がそれをするとき、常に「真」を返します。私が非RCを使用する場合、常にFalseを返します。 – AER

+0

私は更新された答えに有効な文字列の例を示します。 'ExecuteExcel4Macro'はRC文字列のみを受け入れます。 RC文字列を使用しているときに、なぜそれが常に真になるのか理解できません。ワークシートが存在しない場合、ExecuteExcel4Macroはエラーをスローします。 –

関連する問題