2017-10-02 13 views
1

Je suis nouveau ici (et débutant dans VBA). J'ai essayé de modifier ce code pour ne cocher que les cellules de Range ("B21: B40") qui ne sont pas vides.Excel code VBA qui définit la case à cocher lorsque la cellule derrière n'est pas vide

Le code n'est pas prêt. Je ne suis pas sûr de savoir comment construire deux pour chaque boucle de travail pararell que l'on va vérifier le contenu dans Range (« B21: B25 ») et suivant dans la gamme (« A21: A25 ») établira des cases à cocher

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 

Pour construire que j'ai utilisé le code de ce sujet Script to Insert a Checkbox into every cell and assign it to that cell in Excel S'il vous plaît laissez-moi savoir ce que je fais mal.

+1

Quel type de case est-elle? via Formcontrol, ou à partir d'ActiveX? – BruceWayne

+0

Vous avez 'Pour chaque * cel1 *' et plus tard vous avez '* cel * .left' sans le 1. Vous n'avez pas besoin de 2 pour les boucles car il vous suffit de parcourir les cellules une seule fois. Si vous passez par la colonne * checkRange * B, vous pouvez vérifier que la cellule de la colonne A est vide en utilisant 'cel.offest (0, -1)', par exemple. 'si cel.offset (0, -1) <>" "Then' et placez une case à cocher dans la cellule en utilisant * set cb = cel.worksheet ...... * – Gordon

Répondre

0

@Gordon Merci pour votre aide !!

Ci-dessous j'ai posté le code de travail. Additionaly j'ai ajouté: Macro s'exécute lorsque la feuille a changé et supprimer les cases à cocher avant de mettre nouveau.

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