アプリ版:「スタンプのみでお礼する」機能のリリースについて

E3:N3セルに値を入力後、エンターキーを押すことで、マクロを実行して

E3:N3セルに値を入力後、エンターキーを押すことで、マクロを実行しております。

しかし、セルが空白のままエンターキーを押してしまうと、エラーとなってしまいます。
(フィルタオプションの設定で値を抽出するマクロのため、空白だとエラーになってしまいます。)

できれば、セルが空白のとき、エンターキーを押しても、マクロを実行しないようにしたいです。

言葉足らずで恐縮ですが、何卒よろしくお願いします。


Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("E3:N3")) Is Nothing Then
Exit Sub
Else


Application.OnKey Key:="{ENTER}", Procedure:="Macro7"

End If

On Error Resume Next
ActiveSheet.ShowAllData

End Sub

A 回答 (9件)

End If


にしてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

おかげさまでやりたいことができました。

しかし、実はもう少し入りこんでおりまして、

あるコマンドボタンを入力すると、セルに自動である文字が入り、検索をかけてくれる構成です。

直接、手入力でも、できるようにと、今回のご依頼をさせていただきました。

その結果、手入力した場合は、うまくいくのですが、

今度は、コマンドボタンを押して、セルに自動入力後、検索がうまくいきません。


型が一致しませんエラーがでてしまいます。

If Target.Value = "" Then

この文が引用されてます。

なぜなのでしょうか。

お礼日時:2010/03/15 09:25

≪参考≫


特定のセル範囲が変更されたときに処理を実行する
http://www.moug.net/tech/exvba/0050131.htm
「Change」イベント・・・セルの内容が変更された時にプロシージャを実行する。
http://www9.plala.or.jp/siouxsie/date06.html
    • good
    • 0

回答番号:No.6で提示したコードですが


よく見ると、If文でEndとするところがElseになっていました。
Endに直してください。
あるいは、1行で
If Intersect(Target, Range("E3:N3")) Is Nothing Then Exit Sub
としても良いと思います。

この回答への補足

ご指導ありがとうございます。

ifブロックに対応するend if がありません。

のエラーが出てしまいます。

いかがでしょうか。

補足日時:2010/03/11 15:45
    • good
    • 0
この回答へのお礼

ありがとうございます。

全てうまくいきました。

さきほどのエラーも解消できました。

感謝しております。

お礼日時:2010/03/15 09:35

回答番号:No.5の補足


Intersectで、Targetが、Range("E3:N3")内にあることを検出した後
Targetが、空白なら、Exit Subするようにします。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("E3:N3")) Is Nothing Then
Exit Sub
Else
IF Target.Value = "" Then Exit Sub
Call Macro7
On Error Resume Next
ActiveSheet.ShowAllData
End Sub

余談ですが
性急に、結果ばかりを求めず、コードの意味を理解されるようにした方が良いと思いますよ。
VBAのヘルプを活用してください。解りにくい部分もありますが、なかなか充実していると思います。
デバッグ等で、F8キーでコードを1行ずつ実行するのもコードの理解が容易になります。

あと、a26vNvvubさんが建てられたスレが乱立しています。
解決されたなら締め切り処理をよろしくお願いいたします。
    • good
    • 0

If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub


上記で、E3:N3範囲に、空白セルがひとつでも在ると、Exit Subしています。

回答番号:No.3で示したコードに変えて、試してみてください。
IF Target.Value = "" Then Exit Sub
    • good
    • 0

下記でキー設定されたままになっています。


Application.OnKey Key:="{ENTER}", Procedure:="Macro7"

どこかで解除してやらなければなりません。
Application.OnKey Key:="{ENTER}", Procedure:=""
しかし、Changeイベントですから、データが変更Enterで確定されたなら動きます。
OnKeyを使うことはないと思います。

下記で試してみてください。
Call Macro7

この回答への補足

ありがとうございます。

エンターキーを解除して、下記を試みましたが、
こんどは、マクロが動いてくれません。


Private Sub Worksheet_Change(ByVal Target As Range)

If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub

If Intersect(Target, Range("E3:N3")) Is Nothing Then
Exit Sub
Else

Call Macro7

End If

On Error Resume Next
ActiveSheet.ShowAllData

End Sub

補足日時:2010/03/11 13:31
    • good
    • 0

下記で試してみてください。


IF Target.Value = "" Then Exit Sub

この回答への補足

やはりだめでした。

補足ですが、

他のセルでも、どこかのセル上でエンターキーを押すと、マクロが動き出します。

シートにマクロを設定したはずなのですが・・・

補足日時:2010/03/11 11:05
    • good
    • 0

前回の回答では解決しませんでしたか?


何が問題だったか補足してください。

参考URL:http://oshiete1.watch.impress.co.jp/qa5737554.html

この回答への補足

前回はありがとうございました。

そのときはできたのですが、

なぜか、その後、突然できなくなりました。

下記のマクロです。

ちなみに、再生すると、マクロ名を聞かれますので、macro7を選択しております。

どうか今回もよろしくお願いします。


Private Sub Worksheet_Change(ByVal Target As Range)

If Application.WorksheetFunction.CountBlank(Range("E3:N3")) <> 0 Then Exit Sub

If Intersect(Target, Range("E3:N3")) Is Nothing Then
Exit Sub
Else


Application.OnKey Key:="{ENTER}", Procedure:="Macro7"

End If

On Error Resume Next
ActiveSheet.ShowAllData

End Sub

補足日時:2010/03/11 10:50
    • good
    • 0

COUNTAかループでチェックするしか思いつきませんでした。

(^^;

'COUNTAで判断
If Application.WorksheetFunction.CountA(Range("E3:N3")) < 10 Then
Exit Sub
End If

'ループで判断
For Each c In Range("E3:N3")
If c.Value = vbNull Or c.Value = vbEmpty Then
Exit Sub
End If
Next

この回答への補足

ありがとうございます。

ちなみに、どの位置にいれるのでしょうか。

お手数ですが、ご教示のほどよろしくお願いします。

補足日時:2010/03/11 10:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!