[[20130913145918]] 『カレンダーコントロール』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『カレンダーコントロール』(初心者)

XPでエクセル2007を使っています。

工事日程表で、A7に日付を入れると日程表の開始日になり、
B12からE43まで各工程の開始日と終了日を入れると矢印を
引ける様にしたいのですが、カレンダーコントロールでつまづいています。

下記コードで、A7は正常に動作するのですが、B12〜E43では
カレンダーが出てこなくて、エラーも出ないのでどこが間違っているのか
わかりません。御教示をお願い致します。

Private Sub Calendar1_Click()

Range("A7").Value = Calendar1.Value

ActiveSheet.Calendar1.Visible = False

End Sub

Private Sub Calendar2_Click()

Range("B12:E43").Value = Calendar2.Value

ActiveSheet.Calendar2.Visible = False

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

      If Target.Address = "$A$7" Then

          ActiveSheet.Calendar1.Visible = True

          ActiveSheet.Calendar1.Value = Date

        End If

    If Target.Count <> 1 Then Exit Sub

    If Target.Address = "($B$12:$E$43)" Then

          ActiveSheet.Calendar2.Visible = True

          ActiveSheet.Calendar2.Value = Date

        End If

End Sub


 質問に関する問題点だけ。

 >If Target.Count <> 1 Then Exit Sub
 があるので複数セルを選択した場合はここで終わり、
 >If Target.Address = "($B$12:$E$43)" Then
 までいかない。
 (ねむねむ)

ねむねむさん、ありがとうございます。
しかしIf Target.Count <> 1 Then Exit Sub
を削除しても何も変わりませんし、
複数セルを選択するのではなく、
B12〜E43の範囲の中の1セルを選択し、
複数セルを選択しても無視する様にしたいです。
(初心者)

 >If Target.Address = "($B$12:$E$43)" Then
 これはB12:E43を範囲選択したときでないと真にならない。

 B12:E43のどれかということであればそれ以外を
 If Target.Count > 1 Then Exit Sub
 If Intersect(Target, Range("B12:E43")) Is Nothing Then Exit Sub
 で、はじいてみてくれ。
 (ねむねむ)

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Not Intersect(Target, Range("a7,b12:e43")) Is Nothing Then
         ActiveSheet.Calendar1.Visible = True
         ActiveSheet.Calendar1.Value = Date
     End If
 End Sub
 (seiya)

ねむねむさん、ありがとう御座います。

If Target.Count > 1 Then Exit Sub

 If Intersect(Target, Range("B12:E43")) Is Nothing Then Exit Sub
を追加しましたが、何も変わりませんでした。

まず、B12:E43のどのセルをクリックしても、カレンダーがでてきません。
試しに範囲全体を選択してみましたが、でてきません。

逆にカレンダーを無理やり出して日付をクリックすると、
全てのセルに日付を記入してしまいます。

範囲内のどのセルに記入したいかを記述しないといけないと思うのですが、
記述方法がわかりません。

(初心者)


 seiya氏へ。
 B12:E43の時はCalendar2のようだが。

 不必要部分削除
 (ねむねむ)

 >B12:E43の時はCalendar2のようだが。

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     If Not Intersect(Target, Range("b12:e43")) Is Nothing Then
         ActiveSheet.Calendar1.Visible = True
         ActiveSheet.Calendar1.Value = Date
     elseif target.address(0,0)="A7" then
         ActiveSheet.Calendar2.Visible = True
         ActiveSheet.Calendar2.Value = Date
     end if
 End Sub
 (seiya)

seiyaさん、ありがとうございます。
1回目のコードを書き変えたら、範囲内のセルをクリックすると
カレンダーがでてくる様になりました。

しかしカレンダーの日付をクリックしても
セルに日付が記入出来ません。

ActiveSheet.Calendar2.Visible = True

         ActiveSheet.Calendar2.Value = Date
を追記してやると、また全てのセルに記入されてしまいます。
これから2回目のコードに変えてみます。

(初心者)


seiyaさん、ありがとうございます。

カレンダー1と2が逆だったので、そこだけ直して2回目のコードを入れてみました。
カレンダー2が出てきてカレンダー2をクリックすると日付が記入されるのですが、
範囲全てのセルに記入されてしまいます。

カレンダーを呼び出す時にクリックしたセルだけに記入したいのですが、
どの様に変えたら良いでしょうか?

よろしくお願いします。

(初心者)


カレンダー1と2を分ける必要がないので、2を削除して1だけにしました。

Private Sub Calendar1_Click()

Range("A7").Value = Calendar1.Value

Range("B12:E43").Value = Calendar1.Value

ActiveSheet.Calendar1.Visible = False

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

     If Not Intersect(Target, Range("a7,b12:e43")) Is Nothing Then
         ActiveSheet.Calendar1.Visible = True
         ActiveSheet.Calendar1.Value = Date

              End If
 End Sub

クリックしたセルを変数に置き変えて、そのセルにだけ日付を記入する様に
考えてみます。

(初心者)


 > Range("B12:E43").Value = Calendar1.Value 
 これ
 ActiveCell.Value = Calendar1.Value
 ?
 (seiya)

seiyaさん、ありがとうございます。
一発で出来る様になりました。

ただ、カレンダーが出ている時に、全然関係ないセルをクリックして、
カレンダーをクリックすると、そのセルに日付を書いてしまいます。

これくらいは我慢しないとダメかな。

(初心者)


 別のセルをクリックしたときはカレンダーを見えなくすればいいんでない?
 (稲葉)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.