我有一个电子表格(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张纸的行数翻倍?这只是一个庞大项目的一部分,如果可以避免的话,我宁愿不再添加几千行。
答案 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