2017-10-27 3 views
0

値(日付)を含むセルのExcelスプレッドシートにチェックボックスがあります。セルをクリックしたときに管理者が誤ってボックスをチェックするのを避けるため、チェックボックスをダブルクリックしてダニを登録する必要があります。私はワークシートを保護したくありません。なぜなら、複数の人が継続的に情報を編集しているからです。何か案は?ダブルクリックだけでチェックボックスをチェックする方法は?

column with checkbox1

答えて

0

このシステムを試してみてください。チェックボックスがあるワークシートのコードシートにインストールします。

Option Explicit 

    Dim ChkVal() As Boolean 
    Dim EnableChk As Boolean 

Private Sub Worksheet_Activate() 
    ' 27 Oct 2017 

    Dim Shp As Shape 
    Dim Sn As String 

    ReDim ChkVal(Me.Shapes.Count) 
    For Each Shp In Me.Shapes 
     With Shp 
      If .Type = 12 And InStr(1, .Name, "checkbox", vbTextCompare) = 1 Then 
       ChkVal(Val(Mid(.Name, 9))) = .OLEFormat.Object.Object.Value 
      End If 
     End With 
    Next Shp 
End Sub 

Private Sub CbxChange(Cbx As MSForms.CheckBox) 
    ' 27 Oct 2017 

    Dim Id As Integer 

    On Error GoTo ErrHandler 
    With Cbx 
     Id = Val(Mid(.Name, 9)) 
     If Not EnableChk Then 
      Do Until .Value = ChkVal(Id) 
       .Value = Not .Value 
      Loop 
     Else 
      ChkVal(Id) = .Value 
     End If 
    End With 
    EnableChk = False 

    Exit Sub 

ErrHandler: 
    If Err = 9 Then 
     Worksheet_Activate 
     Resume 0 
    Else 
     MsgBox "A programming error interrupted this procedure.", _ 
       vbInformation, "Unidentified error" 
    End If 
End Sub 

Private Sub CheckBox1_Click() 
    CbxChange CheckBox1 
End Sub 

Private Sub CheckBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    EnableChk = True 
End Sub 

シートのすべてのチェックボックスには、最後の2つのようなイベントプロシージャのペアが必要です。私はそれをすばやくやってみました。

  1. 2つの手順を選択します。
  2. 押しのCtl + Cは二回
  3. 押しのCtl + Vをコピーする(過書き込み既存の選択を最初に、第2のコピーを作成します)
  4. コピーペア
  5. 編集]を選択します - >「1」を交換してください"2" - > OK VBAは自動的に "選択されたテキスト"をチェックします。それを変更しないでください。 「単語のみを検索」がではなく、であることを確認してください。 3つの置換えが行われ、それがすべてそれにあります。
関連する問題