[[20200217094139]] 『シート保護でのダブルクリックイベント』(ピクルス) ページの最後に飛ぶ

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

 

『シート保護でのダブルクリックイベント』(ピクルス)

 この掲示板は以前から閲覧させていただいていましたが、書き込むのは初めてです。よろしくお願いします。

 以下のリストがあり
   -A-
 1   
 2  A
 3  B
 4  C

 B1に入力規則リストで
 「空白を無視する」と「リストから選択」にチェックが入っています。
 「元の値」は「=$A$1:$A$4」です。

 ワークシートに以下のコード

 Option Explicit

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim varList As Variant
    Dim i As Long
    If Target.Address = "$B$1" Then
        varList = Range("A1:A4")
        For i = 1 To UBound(varList)
            If Target.Value = varList(UBound(varList), 1) Then
                Target.Value = varList(1, 1)
                Exit For
            ElseIf Target.Value = varList(i, 1) Then
                Target.Value = varList(i + 1, 1)
                Exit For
            End If
        Next i
        Cancel = True
        Exit Sub
    End If
 End Sub

 以上で、B1はドロップダウンリストから選択するか、ダブルクリックで内容の変更ができるようになりました。
 このシートを保護したいので、B1のロックを解除し、シートの保護を行います。
 するとダブルクリックイベントが発生しなくなってしまいます。

 シートの保護をして、ダブルクリックイベントもリストから選択も行いたいのですが、方法があるでしょうか?
 わかる方がいらしたら、どうぞご教授くださいませ。お願いします。

< 使用 Excel:Office365、使用 OS:Windows10 >


 >リストから選択も行いたいのですが
[入力規則リスト] に、拘らなかったら右クリックメニューからもアリかな?

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

    Dim CMD_BARS As CommandBarControl
    Dim c As Range
    If Target.Address = "$B$1" Then
        '全てのメニューを一旦削除
        For Each CMD_BARS In Application.CommandBars("Cell").Controls
            CMD_BARS.Visible = False
        Next
        For Each c In Range("A1:A4")
            '以下で、新規のメニューを追加
            Set CMD_BARS = Application.CommandBars("Cell").Controls.Add()
            With CMD_BARS
                .Caption = c.Value
                .OnAction = "'inputItem """ & c.Value & """'"
            End With
        Next
        Application.CommandBars("Cell").ShowPopup
        Cancel = True
    End If
    Application.CommandBars("Cell").Reset
 '  Application.CommandBars("Column").Reset
 '  Application.CommandBars("Row").Reset
End Sub

標準モジュールに
Sub inputItem(a As String)

    ActiveCell.Value = a
End Sub

(ピンク) 2020/02/17(月) 11:27


 ピンクさん、返信ありがとうございます。
 問題は、シート保護するとダブルクリックでの値変更ができなくなることなので、リストでの選択はできます。
 ダブルクリックで値の変更を行いたいのです。

 ご提示いただいたコードは大変興味深いので、今後の参考にさせていただきます。
(ピクルス) 2020/02/17(月) 11:49

 >問題は、シート保護するとダブルクリックでの値変更ができなくなることなので

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
まさか↑を外したの?
こちらではB1セルのロックを外し
入力規則を解除した状態でシート保護で
BeforeDoubleClickイベント
BeforeRightClickイベント
共に作動していますよ
(ピンク) 2020/02/17(月) 12:03


いえ、外していません。
ピンクさんと同じ状況で
BeforeDoubleClickイベント
だけが発生しません。
なぜでしょうか??

(ピクルス) 2020/02/17(月) 12:11


入力規則を解除していないのでは?
試しに新しいブックで試してみては
(ピンク) 2020/02/17(月) 12:14

 >入力規則を解除していないのでは?
 すいません。その通りでした。
 こちらの勘違いでご迷惑おかけしました。

 出来上がってみると良い動きなのでこれで行こうと思います。
 助けていただいてありがとうございました。
(ピクルス) 2020/02/17(月) 12:18

コメント返信:

[ 一覧(最新更新順) ]


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