|
▼T-K さん:
>1.
>On Errorでサンドイッチした
>Set r = Worksheets("Sheet1").Range("AB3,AC3").SpecialCells(xlCellTypeBlanks)
>に入るべき該当セルがなくて、エラーが発生する。
>
>2.
>「r」には何も入ってないまま、If文に突入。
ここまでOKやと思います。めいび〜
>3.
>If Not r Is Nothing Thenは、Nothingをrに入れてIsで比較。
なんで、「Nothingをrに入れて」になるんですか?
空白セルがないこと前提なんで、入れるまでもなく、
r Is Nothing 状態です。
第一、「If Not r Is Nothing Then」で、変数rの状態を判断してるんやから、その中でrの状態いじったらあかんやんか。
というか、いじれませんけど^^;
If Not r Is Nothing Then でわかりづらかったら、
If Not (r Is Nothing) Then
にしたほうがわかりやすいかな?
>r←NothingならTrueでif文以下の処理を実行。
>がNotゆえTrueとFalseが反転。rはNothingでないならTrueとしてIf文以下を実行。
>ここで、rはRange型かつブランクセルプロパティとして既にSetしているから、
>rはNothingではない→rは値が入っている、として処理を実行する。
言うてはる意味わかんないんですが、
単純に、
空白セルがなかった→ r に代入されるセルがなくて、値が入らない(Nothing)
まま→ If Not (r Is Nothing) Then で通らずに処理されない。
と考えたらいいんじゃないでしょうか?
>
>4.
>ということは、On Errorでエラー(rはブランクセルだ)を無視(突破?)し、
>If Not文に入る前に「rには値が入っているぞ」と
>Set(宣言?)しなければならないことに・・・。
なんで?
そもそも
If Not r Is Nothing Then
は、「rには値が入っているかどうか?」を判定しているんだから、
その前に、「Set(宣言?)」しちゃ、意味ないやんか。
>5.質問
>On ErrorとIf Not間には、rはどうオブジェクト指定すればよいのでしょうか。
必要ないです。
でも、そこでそちらで何故かエラーが出るから、そう考えられたんでしょねえ・・・なんでかなあ?
えーっとですね。
新規のブックの標準モジュールに
Sub test()
Dim r As Range
'チェック前に一度、指定セル箇所(飛び飛びのセル)をクリアする
Worksheets("Sheet1").Range("AB3,AC3").Interior.ColorIndex = 0
On Error Resume Next
Set r = Worksheets("Sheet1").Range("AB3,AC3").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not (r Is Nothing) Then
r.Interior.ColorIndex = 3
MsgBox ("赤いセルを入力して下さい")
End If
Set r = Nothing
End Sub
で、一度試してみてください。
すみません。
私も、他の回答者さまほど達人ではなく、
どこか落とし穴を見落としてるのかもしれません・・・
でも、他の人もこの質問を見てくれてると思うから、あんまりほげほげなことしてたら、指摘してくれると思うねんけど・・・
|
|