环。取消隐藏另一张纸中显示的每行的2行

时间:2015-06-01 15:37:33

标签: excel vba loops excel-vba

我有一个电子表格(Sheet3),它收集和分类来自其他25张纸张的数据。所以我在Sheet3中没有大量的空行我做了一个VBA循环,首先检查工作表是否可见,然后根据它们是否隐藏在其他25个工作表中来隐藏和取消隐藏行,像这样:

Sheet3.Rows("1791:9290").EntireRow.Hidden = True
For i = 1205 To 1354
    If Sheet1.Visible = True Then
        If Sheet1.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 586).EntireRow.Hidden = False
        End If
    End If

    If Sheet2.Visible = True Then
        If Sheet2.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 886).EntireRow.Hidden = False
        End If
    End If

    If Sheet4.Visible = True Then
        If Sheet4.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 1186).EntireRow.Hidden = False
        End If
    End If

    etc...

由于我需要提取的数据类型,遗憾的是我无法将第3张纸张与其他25张纸张排在一起。对于其他25张纸中可见的每一行,我需要Sheet3 取消隐藏2行

例如,如果SheetX Row 1可见,则Sheet3必须使第1行和第2行可见。如果SheetX Row 2可见,则Sheet 3必须使第3行和第4行可见,依此类推。

有什么方法可以做到这一点,我不得不改变所有其他25张纸的行数翻倍?这只是一个庞大项目的一部分,如果可以避免的话,我宁愿不再添加几千行。

2 个答案:

答案 0 :(得分:0)

使用.Cells并在应用.EntireRow之前调整为2行高度。

Sheet3.Cells(i + 586, 1).Resize(2, 1).EntireRow.Hidden = False

Resize property将调整所引用范围的高度。随后的Range.EntireRow property继续更改单元格引用以包含整行。

答案 1 :(得分:0)

我意识到这样做的唯一方法是添加另一个整数,每次循环都会改变。所以我添加了Dim J As Integer并设置了j = 0。我在每个循环中添加了一行来取消隐藏两行,并将j合并到该代码中。然后我将j = j + 1添加到循环的末尾。

所以这是它的外观:

Dim j As Integer
j = 0        

Sheet3.Rows("1791:9290").EntireRow.Hidden = True
        For i = 1205 To 1354
            If Sheet1.Visible = True Then
                If Sheet1.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 586).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 587).EntireRow.Hidden = False
                End If
            End If

            If Sheet2.Visible = True Then
                If Sheet2.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 886).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 887).EntireRow.Hidden = False
                End If
            End If

            If Sheet4.Visible = True Then
                If Sheet4.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 1186).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 1187).EntireRow.Hidden = False
                End If
            End If

    etc...

        j = j + 1
        Next