2017-10-02 10 views
1

私はここ(VBA初心者)です。私は空ではないRange( "B21:B40")のセルに対してのみチェックボックスを設定するようにこのコードを修正しようとしました。Excelビハインドセルが空でないときにチェックボックスを設定するVBAコード

コードは準備ができていません。チェックボックス

Sub ActiveCheckBox() 

Dim setRange As Range, cel As Range 
Dim checkRange As Range, cel1 As Range 
Dim wks As Worksheet 
Dim cb As Checkbox 

Set wks = Sheets("InterFace") 
Set setRange = wks.Range("A21:A25") 
Set checkRange = wks.Range("B21:B25") 

For Each cel1 In checkRange 
    If cel1 <> "" Then 
     For Each setRange In checkRange 
      Set cb = cel.Worksheet.CheckBoxes.Add(cel.Left + cel.Width/2 - 8.25, _ 
        cel.Top + cel.Height/2 - 8.25, 0, 0) ' 8.25 is cb.Height/2 
        With cb 
        .Text = vbNullString      ' to clear Caption 
        .LinkedCell = cel.Address(0, 0)    ' Example A1 instead of $A$1 
        .Name = "cb" & cb.LinkedCell    ' optional 
        End With 
     Next 
    End If 
Next 

setRange.NumberFormat = ";;;" ' optional to hide the cell values 

End Sub 

構築するにはを設定します(「A25 A21」):(「B25 B21」)をし、レンジ内の次の私は、範囲内のコンテンツをチェックすること1 pararell作業各ループのための2つを構築する方法をよく分かりませんこのトピックのコードを使用しましたScript to Insert a Checkbox into every cell and assign it to that cell in Excel 私が間違っていることを教えてください。

+1

どのようなチェックボックスですか? Formcontrol経由で、またはActiveXから? – BruceWayne

+0

あなたは 'For each * cel1 *'を持っています。そして、後であなたは '* cel * .left'を1つも持っていません。 * checkRange *列Bを調べると、 'cel.offest(0、-1)'を使って列Aのセルが空であることを確認できます。 'if cel.offset(0、-1)<>" "Then'そして* set cb = cel.worksheetを使ってセルにチェックボックスを入れます...... * – Gordon

答えて

0

@Gordon助けてくれてありがとう!

以下、私は作業コードを掲示しました。 追加:私は追加: シートを変更したときにマクロが実行され、新しいシートを入れる前にチェックボックスが削除されます。

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim setRange As Range, cel As Range 
Dim checkRange As Range, cel1 As Range 
Dim wks As Worksheet 
Dim cb As Checkbox 

Set wks = Sheets("InterFace") 
Set setRange = wks.Range("A18:A30") 
Set checkRange = wks.Range("A18:A30") 

For Each cb In ActiveSheet.CheckBoxes 
    cb.Delete 
Next 

For Each cel In setRange 
    If cel.Offset(0, 1) <> "" Then 
     Set cb = cel.Worksheet.CheckBoxes.Add(cel.Left + cel.Width/2 - 8.25, _ 
        cel.Top + cel.Height/2 - 8.25, 0, 0) ' 8.25 is cb.Height/2 
        With cb 
        .Text = vbNullString      ' to clear Caption 
        .LinkedCell = cel.Address(0, 0)    ' Example A1 instead of $A$1 
        .Name = "cb" & cb.LinkedCell    ' optional 
        End With 


    End If 
Next 
End Sub 
関連する問題