[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『チェックボックスと日付の関連付け』(zunzun)
1.W14からW44に確認のチェックボックス(コントロールボックスで作成)があり、チェックするとAE列にTRUEが表示されるようにリンクするセルを設定しています。
2.X列に確認日を記入する以下のコードを書きましたが、確認をチェック(AE列にはTRUEと表示されている)しても日付が表示させれません。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 13 Or Target.Row > 43 Then Exit Sub If Target.Column <> 31 Then Exit Sub If Target.Value <> True Then Exit Sub Target.Offset(0, -7).Value = Now End Sub ただし、AE列にTRUEを直接入力すると、日付がX列に表示されます。 どこに問題があるのでしょうか?
< 使用 Excel:Excel2010、使用 OS:Windows7 >
どこにも問題はありませんが、Worksheet_Change はセルリンクや計算によって値が 変わったり、書式を変更してもイベントが発生しなかったと思います。
チェックボックスのイベント処理を直接書くなどの方法を考えてみてはどうでしょうか。 (Mook) 2015/01/13(火) 16:42
(zunzun) 2015/01/13(火) 16:55
ActiveX のチェックボックスなら、シートモジュールにこんなことです。
Private Sub CheckBox1_Click() 処理 End Sub (Mook) 2015/01/13(火) 16:59
横から失礼します。 質問者さんはおそらくフォームのLinkedCellでリンクさせているような?
もしイベントつけるにしても、 ちょっと30個のコントロールにイベントそれぞれつけるのは、質問者さんの レベルでは大変かもしれないっすよ。 疑似コントロール配列でもいいと思いますが。
どうせChangeイベントを設定しているのでしたら、DoubleClickイベントで セルの値を□とレ(チェックボックスマーク)に交互に切り替えてはどうでしょう? Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("W14:W44")) Is Nothing Then Exit Sub With Target If .Value = "□" Then .Value = ChrW(9745) Cells(.Row, "X").Value = Date Else .Value = "□" Cells(.Row, "X").ClearContents End If End With Cancel = True End Sub
※ちょっと修正 1708 (稲葉) 2015/01/13(火) 17:04
あらら、チェックボックスは1つではなかったのですね。 稲葉さんが言うように、別案の方がよいので先のコメントは無視してください。 (Mook) 2015/01/13(火) 17:16
チェックボックスが□確認になっているので、
□→□確認に変更しましたが、ダメでした。
ちなみにチェックボックスはクリックで
□にレが記入されるので、Doubleを削除
しましたが、ダメでした。
(zunzun) 2015/01/13(火) 17:43
どこまでVBAについてご存じなのでしょう?
1)コードはシートモジュールに記入しましたか? 2)W14の「セル」をダブルクリックしてみましたか? 3)ブレークポイントを置いて、動作することを確かめましたか?
http://www.happy2-island.com/excelsmile/smile03/capter00902.shtml
(稲葉) 2015/01/13(火) 18:17
1)はシートタブを右クリックして、コードの表示をクリックしてそこにコピペしました。
2)のW14をダブルクリックしましたが、ダメでした。
3)はやり方を勉強して、やってみます。
(zunzun) 2015/01/13(火) 18:55
修正したコードを都度提示したほうが良いように思います。
>Doubleを削除しましたが、ダメでした。 はダメでしょうね。そういうイベントはありませんので。
こんなコードにならないでしょうか(右クリックです)。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("W14:W44")) Is Nothing Then Exit Sub With Target If .Value = "□確認" Then .Value = ChrW(9745) & "確認" Cells(.Row, "X").Value = Date Else .Value = "□確認" Cells(.Row, "X").ClearContents End If End With Cancel = True End Sub
(Mook) 2015/01/13(火) 19:52
別方向からのアプローチです。 シートに貼り付けるコントロールは、ヴィジュアル的なことはActiveXには勝てませんが、 フォームのコントロールの方が便利な面もあります。
新規ブックの標準モジュールに
以下のコード・・・、
Option Explicit Sub mk_chkbox() Dim g0 As Long Dim r As Range On Error Resume Next ActiveSheet.CheckBoxes.Delete On Error GoTo 0 Rows("14:42").RowHeight = 13.5 For g0 = 14 To 42 Set r = Range("a" & g0) With ActiveSheet.CheckBoxes.Add(r.Left, r.Top, r.Width, r.Height) .OnAction = "chk_click" End With Next Rows("14:42").RowHeight = 15 Columns("T:T").ColumnWidth = 18 End Sub Sub chk_click() Dim chknm As String chknm = Application.Caller With ActiveSheet.CheckBoxes(chknm) If .Value = xlOn Then Cells(.TopLeftCell.Row, "t").Value = Now() Else Cells(.TopLeftCell.Row, "t").Value = "" End If End With End Sub
まず、mk_chkboxを実行してください。
14行目から42行目にフォームのチェックボックスが作成されます。
作成されたチェックボックスをクリックして チェックを入れてください。
対応するT列に日付が入力されます。
(ichinose ) 2015/01/13(火) 22:24
4)Application.EnableEventsプロパティがFalseになっていませんか? 5)ダブルクリックによる編集をCancelしていますが、編集モードになってしまいますか? (質問3と同じことを言っています)
ワークシートのイベントについて http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html
>Application.Caller なるほど! 勉強になります!
(稲葉) 2015/01/14(水) 09:02
>A列のチェックボックスの□チェックを□確認に変更することは可能でしょうか? これは、マクロの記録でフォームのチェックボックスを作成し、 そのチェックボックスの項目を変更して見てください。
これで作成されたコードにヒントがあると思います。 どのようなコードで項目を変更できるか 確認してください
(ichinose ) 2015/01/15(木) 03:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.