Alterar visibilidade da caixa de seleção não está funcionando

3

Eu tenho o seguinte código ocultando linhas em uma planilha, mas a planilha fica com suas caixas de seleção criadas dinamicamente ainda visíveis. Alguma ideia?

Private Sub SpinButton1_Change()

Application.ScreenUpdating = False
week = Me.Range("b1").Value
countcell = ActiveSheet.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count
For i = 4 To countcell
  pweek = Me.Cells(i, 2).Value    'load the planned week value
  mycont = "ckboxPrintLabels" & i
  If pweek <> week Then
    CheckBoxes(mycont).Visible = False
    Rows(i).EntireRow.Hidden = True
    MsgBox mycont & "= " & ActiveSheet.CheckBoxes(mycont).Visible
  Else
    Rows(i).EntireRow.Hidden = False
    ActiveSheet.CheckBoxes(mycont).Visible = True
  End If
  k = i
Next i
Application.ScreenUpdating = True
End Sub

Atualmente, tenho ckboxPrintLabels4 até 16 na planilha. Eles não conseguem mudar a visibilidade. Embora o msgbox relata que eles têm visibilidade em false ... ???

    
por Onyx 20.09.2011 / 00:54

1 resposta

4

Você verificou se todas as caixas de seleção visíveis são realmente chamadas de ckboxPrintLabelsX etc

Eu executei o seu código duas vezes, pois na primeira execução não dei as caixas corretamente quando separei o código comentado mais tarde. A segunda execução corretamente ocultou as caixas de seleção com títulos ckboxPrintLabelsX, mas as outras caixas de seleção com títulos diferentes (Check Box 1 etc) ainda estavam visíveis

Um rápido google lança um problema semelhante no link . Nesse caso, como as caixas de seleção estão empilhadas na linha oculta, aparece uma visível no topo.

Erro no código de criação, criando mais de uma caixa de seleção com o mesmo nome. Estes empilhariam. Quando a ocultação ocorreu, ela só entrou em vigor em um conjunto de controles.

    Public Sub addcheckboxes(ByVal Lower As String, ByVal Upper As String)
    Dim ws As Worksheet, myObjectname As String, addChk As Boolean

    Set ws = Workbooks("nursery.xls").Worksheets("Seeding")
     Application.ScreenUpdating = False

     ckbox = Lower
     ' add a checkbox for printing
     For Each cell In ws.Range("g" & Lower & ":g" & Upper)

     myObjectname = "ckboxPrintLabels" & ckbox
     addChk = True

     For Each ctrl In ActiveSheet.CheckBoxes
     ' nasty hack to overcome the limitations of vba in excel - no eval!
        If ctrl.name = myObjectname Then
        addChk = False ' if chkbox already exists
      ctrl.Visible = True 'switch to visible, as it may not be
      End If
       Next

    If addChk Then
    With ws.CheckBoxes.Add(cell.Left, _
     cell.Top, cell.Width, cell.Height)
     .LinkedCell = cell
     .Interior.ColorIndex = xlNone
     .Caption = ""
     .name = myObjectname
     .Visible = True
    End With
    End If
    ckbox = ckbox + 1
    Next
    Application.ScreenUpdating = True
    End Sub
    
por 20.09.2011 / 05:12