A1:B1 =IF(C1="hoge","error1","")
A2:B2 =IF(C2="fuga","error2","")
A3:B3 =IF(C3="foo","error3","")
A4:B4 =IF(C4="bar","error4","")
上記のように、結合した4つのセルに一定の条件を満たせばエラー出力され、そうでなければ
空白を返す数式によるエラー判定が存在します。
やりたいこととしては、A1:B4に少なくとも一つエラーがあればprintをcancelさせるとともに
MsgBoxでエラー内容を出力させ、そうでなければ、プリント出力を許可するようにしたいと考えております。
下記のコードで意図した動作をさせることができなません。
具体的に
- ErrMsgに1つでもエラー内容文字列が出力された場合に、エラーを出力したいのに常に出力されます。
*検証してみるとIf UBound(ErAry) > 1 ThenにもかかわらずErAryの個数は常に4が出力されておりこの理由がわかりません。
2) エラー内容を出力するためのmsgBoxについても空の文字列が出力されてしまい、例えばError1とError2を識別している場合には
"Error(*1)が解消されていませんError(*2)が解消されていません"とMsgBox出力することを意図しているのに、何も出力されません。
宜しくお願い申し上げます。
vba
1Private Sub Workbook_BeforePrint(Cancel As Boolean) 2 3 Dim ErAry(4) As String 4 If Worksheets("入力").Cells(1, 1).Value <> "" Then 5 ErAry(1) = "Error(*1)が解消されていません" 6 End If 7 If Worksheets("入力").Cells(2, 1).Value <> "" Then 8 ErAry(2) = "Error(*2)が解消されていません" 9 End If 10 If Worksheets("入力").Cells(3, 1).Value <> "" Then 11 ErAry(3) = "Error(*3)が解消されていません" 12 End If 13 If Worksheets("入力").Cells(4, 1).Value <> "" Then 14 ErAry(4) = "Error(*4)が解消されていません" 15 End If 16 17Dim c 18Dim ErrMsg As String 19If UBound(ErAry) > 1 Then 20 Cancel = true 21 For Each c in ErAry 22 ErrMsg = ErrMsg + c 23 Next c 24 MsgBox ErrMsg 25EndIf 26 27 28 29End Sub
回答2件
あなたの回答
tips
プレビュー