こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

シングルクリックでフォームが表示されない

windowsXP  Excel2000 でマクロを作成している超初心者です。
あるサイトの暦で日付を入力するマクロですが、1枚のシートに
1)と 2)を併記して実験したところ正常に表示できました。
2)をシングルクリックで表示したいのですができません。なぜでしょうか?
2)はいかにも稚拙です。もっと整理したいのですが方法が分かりません。以上2点よろしくご指導ください。
--------------------------------------------------------------------
1)シングルクリックで UserForm1を正常に起動できました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示
Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示
If Target.Row > 22 And Target.Column > 2 And Target.Column < 4 Then
UserForm1.Show
End If
If Target.Row > 22 And Target.Column > 13 And Target.Column < 15 Then
UserForm1.Show
End If
End Sub
-------------------------------------------------------------------------
2)ダブルクリックでしか正常に表示されません。
'Private Sub Worksheet_SelectionChange(ByVal Target As Range)’ 起動しない
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) '起動した

Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示
If Target.Row > 23 And Target.Column > 1 And Target.Column < 3 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 23 And Target.Column > 12 And Target.Column < 14 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 12 And Target.Row < 21 And Target.Column > 12 And Target.Column < 14 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 12 And Target.Row < 21 And Target.Column > 14 And Target.Column < 16 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 12 And Target.Row < 21 And Target.Column > 16 And Target.Column < 18 Then
Call ShowCalendarFromRange2(Target)
End If
If Target.Row > 12 And Target.Row < 21 And Target.Column > 18 And Target.Column < 20 Then
Call ShowCalendarFromRange2(Target)
End If
End Sub
-----------------------------------------------------------------------
3)'これがサイトにあった例で、これを元に上のスクリプトを作りました。
'Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' 複数セル選択時は無視
' If Target.Count <> 1 Then Exit Sub
' A列以外は無視(今回サンプルの例)
' If Target.Column <> 1 Then Exit Sub
' カレンダーフォームを起動する
' Call ShowCalendarFromRange2(Target)
'End Sub
---------------------------------------------------------------

投稿日時 - 2007-09-04 19:09:34

QNo.3315301

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。

以下はダブルクリックした時のイベントないで、シングルクリックでは実行されません。
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

以下の方法では如何でしょうか。参考にしてください。

Dim tR   As Long
Dim tC   As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'シングルクリックで表示
  Cancel = True 'プロシージャ終了後に表示されるショートカットメニューの非表示
  tR = Target.Row
  tC = Target.Column

  If tR > 22 And (tC > 2 And tC < 4) Or (tC > 13 And tC < 15) Then
    UserForm1.Show
    Exit Sub
  End If

  If (tR > 23 And (tC > 1 And tC < 3) Or (tC > 12 And tC < 14)) Or _
   (tR > 12 And tR < 21 And ((tC > 12 And tC < 14) Or (tC > 14 And tC < 16) Or _
                 (tC > 16 And tC < 18) Or (tC > 18 And tC < 20))) Then
    Call ShowCalendarFromRange2(Target)
  End If
End Sub

投稿日時 - 2007-09-04 19:39:16

お礼

pkh4989 様
素早いご回答ありがとうございました。おかげさまで自分の思うとおりのマクロができました。この見事なコードで実行することが出来嬉しい限りです。今後ともよろしくお願いします。

投稿日時 - 2007-09-04 22:24:19

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問