2017-05-16 34 views
0

シート内のすべてのチェックボックスを選択するVBAマクロを作成していますが、これでうまくいきましたが、特定の範囲のチェックボックスを選択したり、 。範囲内のすべてのチェックボックスを選択/選択解除するEXCEL VBAマクロ

ここに私のコードです。

Sub Select_all() 

Dim Cbox As CheckBox 
Dim Rng As Range 

Set Rng = ActiveWorkbook.Sheets("Sheet4").Range("B7, B104") 

For Each Cbox In ActiveSheet.CheckBoxes 

If Not Intersect(Cbox.TopLeftCell, Rng) Is Nothing Then 
    If Cbox.name <> ActiveSheet.CheckBoxes("Check Box 104").name Then 
    Cbox.Value = ActiveSheet.CheckBoxes("Check Box 104").Value 
    End If 
End If 

Next Cbox 

End Sub 

ない交差(Cbox.TopLeftCell、RNGは)何も

されていない場合、私は

を追加しましたが、それは何も変更しない、と私はこの部分を削除すると、それが選択シートのすべてのチェックボックスと私は範囲( "B7:B104")のためだけに必要です

何か提案はどうですか?どうもありがとうございました。

+3

Rangeを "Range(" B7、B104 ")'と定義したのはなぜですか?つまり、B7とB104の2つのセルだけで、B7:B104のセルの範囲ではありません。そしてあなたのコードのすぐ下に、 'Range(" B7:B104 ")'の正しい定義を入れます。そのために変更してください。 – tigeravatar

+0

ActiveXチェックボックスまたはフォームコントロールチェックボックスですか? –

+0

@tigeravatar私はあなたと同じことをしました、私は間違ってコードを貼り付けました。 – JuniorDev

答えて

1

これは私のために働く。しかし、私はテストシート上に104個持っていないので、cb#を "1"に変更しました。範囲B7:B104にあるcbはcb1の値に変更されます。この値は、スクリプト内のcb104に変更することができます。

Sub Link_Checkboxes_To_Cells() 

    Dim cBox As CheckBox 

     For Each cBox In Sheet1.CheckBoxes 
      If Not Intersect(cBox.TopLeftCell, Range("B7:B104")) Is Nothing Then 
       If cBox.Name <> ActiveSheet.CheckBoxes("Check Box 1").Name Then 
        cBox.Value = ActiveSheet.CheckBoxes("Check Box 1").Value 
       End If 
      End If 
     Next cBox 

    End Sub 
+0

あなたの答えをありがとう。なぜそれが動作していないのか不思議です。私は新しいワークブックを試しました、それは同じです。私はいくつかの参照を追加する必要がありますか?またはいくつかの構成? – JuniorDev

+0

そのコードは私のために働いた。 –

1

@JuniorDev

上記のコードはあなたのために動作しないいくつかの理由があります。私はそれらをリストしようとします。

上記のコードは、 "フォームコントロール"チェックボックス - ActiveXタイプチェックボックスでは機能しません。 ActiveXチェックボックスには別のコードが必要です。または、「チェックボックス1」という名前のフォームのチェックボックスを使用していない可能性があります。しかし、それはあなたにエラーを与えると思います。または、他のチェックボックスが範囲内にない場合があります(「B7:B104」)。あなたは範囲( "A1:Z10000")に変更して、あなたのチェックボックスが範囲内にあることを確認することができます。

どのタイプチェックボックスを使用しているのかわからない場合は、次のコードを実行して、フォームまたはアクティブタイプの名前とタイプを確認できます。これは、VBエディタの直接のウィンドウに情報を表示します。

Sub CheckboxLoop() 
'PARTIAL SOURCE: www.TheSpreadsheetGuru.com/the-code-vault 
Dim cb As Shape 

'Loop through Form Checkboxes 
    For Each cb In ActiveSheet.Shapes 
    If cb.Type = msoFormControl Then 
     If cb.FormControlType = xlCheckBox Then 
      Debug.Print "Form Control: " & cb.Name 
     End If 
    End If 
    Next cb 

'Loop through ActiveX Checkboxes 
Dim ChkBx As OLEObject 
For Each ChkBx In ActiveSheet.OLEObjects 
    If TypeName(ChkBx.Object) = "CheckBox" Then 
     Debug.Print "ActiveX Control: " & ChkBx.Name 
    End If 
Next ChkBx 
End Sub 
関連する問題