3

У меня есть следующий код, скрывающий строки в листе, но лист остается с его динамически созданными флажками, все еще видимыми. Есть идеи?

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

Так что в настоящее время у меня есть ckboxPrintLabels4 до 16 на листе. Они не могут изменить видимость. Хотя msgbox сообщает, что они имеют видимость при ложном ...???

1 ответ1

4

Вы проверили, что все видимые флажки на самом деле названы ckboxPrintLabelsX и т.д.

Я запустил ваш код дважды, так как при первом запуске я не правильно назвал поля, когда выделил ваш последующий прокомментированный код. При втором запуске правильно скрывались флажки с заголовками ckboxPrintLabelsX, но остальные флажки с разными заголовками (флажок 1 и т.д.) Все еще были видны

Быстрый Google бросает похожую проблему на http://www.teachexcel.com/excel-help/excel-how-to.php?i=103984. В этом случае, когда флажки наложены на скрытую строку, она остается видимой сверху.


Ошибка в коде создания, при создании более одного флажка с тем же именем. Это будет стек. Когда скрытие имело место, оно действовало только на один набор элементов управления.

    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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .