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

●質問の主旨
ワークシートのイベントプロシージャにおいて右クリック
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
を連続で使用するためには以下のコードをどのように書き換えればよいでしょうか?
ご存知の方ご教示願います。

●質問の補足
ExcelのワークシートとVBAでタイムカードを作成しています。
以下のコードでは「出勤打刻」も「退勤打刻」もできません。
「退勤打刻」のコードを削除すると、「出勤打刻」はできます。
「プロシージャ名が適切ではありません」とエラーが返されます。
エラーの意図は分かりますが、「出勤打刻」と「退勤打刻」のクリック方法が違うのも
紛らわしいとも思います。同じクリック方法で統一するにはどうすればよいか悩んでいます。

●コード
'---------------------定数---------------------
Const SYUKIN_DAKOKU_CLMN As Integer = 5 '出勤打刻位置の列番号
Const TAIKIN_DAKOKU_CLMN As Integer = 6 '退勤打刻位置の列番号
Const DAY_CLMN As Integer = 2 '日付欄の列番号


'---------------------出勤打刻---------------------

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = SYUKIN_DAKOKU_CLMN Then '出勤打刻の位置
Cancel = True 'コンテキストメニューの抑制
If IsEmpty(Target.Value) Then 'ターゲットが空白のとき
If Cells(Target.Row, DAY_CLMN).Value = Day(Date) Then '右クリックしたときの日付が日付欄の日付と等しいとき
Target = Time '右クリックしたセルに現在の時間を表示
Target.NumberFormat = "hh:mm" '時間の表示形式は "hh:mm"
Else
MsgBox "打刻位置が間違っています", vbExclamation, "打刻位置の確認" 'メッセージ表示
Cancel = True 'コンテキストメニューの抑制
End If
Else '打刻済みのときはメッセージ表示
MsgBox "すでに打刻しています", vbExclamation, "打刻位置の確認"
End If
End If
End Sub

'---------------------退勤打刻---------------------

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Target2.Column = TAIKIN_DAKOKU Then '出勤打刻の位置
Cancel = True 'コンテキストメニューの抑制
If IsDate(Cells(Target.Row, DAY_CLMN)) = True Then '出勤打刻がされていれば
If IsEmpty(Target.Value) Then 'ターゲットが空白であれば
If Cells(Target.Row, DAY_CLMN).Value = Day(Date) Then '右クリックしたときの日付が日付欄の日付と等しい
Target = Time '右クリックしたセルに現在の時間を表示
Target.NumberFormat = "hh:mm" '時間の表示形式は "hh:mm"
Else
MsgBox "打刻位置が間違っています", vbExclamation, "打刻位置の確認" 'メッセージ表示
Cancel = True 'コンテキストメニューの抑制
End If
Else '打刻済みのときはメッセージ表示
MsgBox "すでに打刻しています", vbExclamation, "打刻位置の確認"
End If
End If
End If

End Sub

「Excel2007VBA右クリックの複数」の質問画像

A 回答 (2件)

同一イベントプロシージャは1つしか定義できないので1つにまとめて下さい。


私見ですが、クリック列はB列にして、C・D列の入力有無で自動選択しては
如何でしょうか。
    • good
    • 0
この回答へのお礼

mu2011様
いつもお世話になります。

>私見ですが、クリック列はB列にして、C・D列の入力有無で自動選択しては
如何でしょうか。

ご意見参考にさせていただきます。

お礼日時:2012/02/14 14:53

こんな冗長なVBAコードを読者や回答者に読ませるのはやめてください。


質問するときは、ポイントを文章で記述してください。回答者に手数を出来るだけ掛けさせないこと。
ーー
出勤と退勤を同一シートで区別するなら、ダブルクリックするセル位置で判別するとか、所定のセルの値を何か一定の値にさせる約束にしないと、イベントを受ける(OSなどの)システムでは業務(アプリ)的な意味は区別してないのだから、どうしようもない。
そういう心構えで、無理のないようにシステムを考えよ。
    • good
    • 0
この回答へのお礼

imogasi様
ご回答ありがとうございます。
上記のご意見さんこうにさせていただいた上で
仕様やコードをもう一度考えてみたいと思います。

お礼日時:2012/02/14 14:54

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