Как скрыть и показать строки на основе значения ячейки? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть электронная таблица Excel, в которой есть вкладки с вопросами для заполнения.

Я подсчитал столбцы, чтобы убедиться, что у меня был правильный столбец, и пошагово просматривал код, шаг за шагом просматривая отладчик, чтобы увидеть значения это зачитал. Все значения оказались в порядке.

Содержимое (в основном) является конфиденциальным, и его слишком много для очистки, поэтому я попытаюсь показать вам этот способ:

Это показывает значения. Я работаю со столбцом "основы". Буква соответствующего столбца - Y.
This shows the values. I am working with the

Я хочу скрыть или показать вопросы, основанные на значении ячейки. 0 означает скрыть, а 1 означает показать.

Я обнаружил, что код скрывается и отображается по желанию.

Sub CheckRoleQuestionsSimplified()

For Each ws In ThisWorkbook.Worksheets

    If ws.Name = "Cockpit" Or ws.Name = "I-CBO" Or ws.Name = "config" Or ws.Name = "BegeleidingsFormulier" Or ws.Name = "Inhoudsopgave" Or ws.Name = "Saldibalans" Then
        ' Sla deze over, doe niks
    Else
        Worksheets(ws.Name).Activate
    End If

Next ws

beginRow = 10
endRow = 46
checkCol = 25

Do While rowNum < endRow
    If Cells(rowNum, checkCol).Value = 0 Then
        Cells(rowNum, checkCol).EntireRow.Hidden = True
    Else
        If Cells(rowNum, checkCol).Value = 1 Then
            Cells(rowNum, checkCol).EntireRow.Hidden = False
        End If
    End If
Next rowNum
End Sub

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Использовать с заявлением. и используйте функцию isEmpty.

Sub CheckRoleQuestionSimplified()
    Dim Ws As Worksheet
    Dim Target As Range
    Dim rowNum As Integer, endRow As Integer, checkCol As Integer
    For Each Ws In ThisWorkbook.Worksheets
        Select Case Ws.Name
        Case "Cockpit", "I-CBO", "config"
        Case Else
            With Ws
                beginRow = 10
                endRow = 46
                checkCol = 25
                For rowNum = beginRow To endRow
                    Set Target = .Cells(rowNum, checkCol)
                    Target.EntireRow.Hidden = False
                    If Not IsEmpty(Target) Then '<~~ check Empty
                        If Target.Value = 0 Then
                            Target.EntireRow.Hidden = True
                        Else
                            If Target.Value = 1 Then
                                Target.EntireRow.Hidden = False
                            End If
                        End If
                    End If
                Next rowNum
            End With
        End Select
    Next Ws
End Sub
0 голосов
/ 03 марта 2020

Это должно работать:

Dim ws As Worksheet
Dim beginRow As Long, endRow As Long, checkCol As Long

beginRow = 10
endRow = 46
checkCol = 25
For Each ws In ActiveWorkbook.Worksheets
    If ws.Name = "Cockpit" Or ws.Name = "I-CBO" Or ws.Name = "config" Or ws.Name = "BegeleidingsFormulier" Or ws.Name = "Inhoudsopgave" Or ws.Name = "Saldibalans" Then
        ' do nothing
    Else
        For rowNum = beginRow To endRow Step 2
            With ws.Cells(rowNum, checkCol)
                .Resize(2, 1).EntireRow.Hidden = .Value = 0
            End With
        Next rowNum
    End If
Next ws

Этот процесс основан на 0 или 1 только в четных строках, как показано на скриншоте.

Примечание: если вы хотите все скрытые пустые строки, используйте вместо этого l oop:

        For rowNum = beginRow To endRow
            With ws.Cells(rowNum, checkCol)
                .EntireRow.Hidden = .Value = 0
            End With
        Next rowNum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...