vba - 仅适用于事件工作表,但我需要它在所有工作表上运行

标签 vba excel

我的 VBA 代码有问题,我需要它来隐藏尚未结束或尚未发生的数据数周。我的代码如下所示

Sub Workbook_Open()

Sheets("TOTAL ISSUE DATA").Unprotect "1234"
Sheets("Cradle Pop").Unprotect "1234"
Sheets("Bad Graph").Unprotect "1234"
Sheets("No&Low Flow").Unprotect "1234"
Sheets("Block Curve").Unprotect "1234"
Sheets("No&Low Charge").Unprotect "1234"

Dim cell As Range
Rows.Hidden = False

For Each cell In Worksheets("TOTAL ISSUE DATA").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell
For Each cell In Worksheets("Cradle Pop").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell
For Each cell In Worksheets("Bad Graph").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell
For Each cell In Worksheets("No&Low Flow").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell
For Each cell In Worksheets("Block Curve").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell
For Each cell In Worksheets("No&Low Charge").Range("B2:B56")
    If cell.Value > Now Then
        cell.EntireRow.Hidden = True
    End If
Next cell

Sheets("TOTAL ISSUE DATA").Protect "1234"
Sheets("Cradle Pop").Protect "1234"
Sheets("Bad Graph").Protect "1234"
Sheets("No&Low Flow").Protect "1234"
Sheets("Block Curve").Protect "1234"
Sheets("No&Low Charge").Protect "1234"

End Sub

A 列包含周号,B 列包含该周的结束日期,C-Z 包含我的数据。此代码有效,但仅适用于当前工作表。我必须在另一张纸上手动运行代码才能获得我需要的结果。目标是在所有工作表的文件打开后运行代码,现在它只执行它打开的工作表。我希望我解释得很好。如果您对此有疑问,请询问。

最佳答案

我猜该部分仅适用于 ActiveSheetRows.Hidden = False ,因为其他一切都应该正常工作。

因此,如果您希望它适用于每张纸,请在 Rows.Hidden = False 的位置写下类似的内容:

Sheets("TOTAL ISSUE DATA").Rows.Hidden = False
Sheets("Cradle Pop").Rows.Hidden = False
...etc

正如您所注意到的,如果您不指定 Worksheet() Row的,需要 ActiveWorksheet仅。

您的代码可以轻松升级 - 如果您构建一个单独的过程,它将范围作为输入,然后循环遍历其单元格,如下所示:

Public Sub HideRange(rangeToHide As Range)

    Dim myCell As Range    
    For Each myCell In rangeToHide
        If myCell > Now Then
             cell.EntireRow.Hidden = True
        End If
        'The condition can be made a bit fancier like this:
        'myCell.EntireRow.Hidden = myCell > Now
    Next myCell    
End Sub

您可以向它传递值,例如 HideRange Worksheets("Bad Graph").Range("B2:B56")

关于vba - 仅适用于事件工作表,但我需要它在所有工作表上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48770139/

相关文章:

vba - 使用 Excel VBA 列出特定模式的文件

vba - 给定文本中的第一个和最后一个单词,如何从字符串中提取文本

ms-access - 使用 Access VBA 更改窗体的记录源

vba - 在 VBA For 循环中使用两个以上的范围

从 excel 填充时,Ruby (Shoes) 列表框崩溃

excel - 通过 VBA 从剪贴板粘贴到 Word 标题的图像既不列为 InlineShape 也不列为 Shape

excel - OLE 自动化并与另一个 VBE/VBA IDE 交互

vba - 完成后如何调用另一个模块而不返回第一个模块?

excel - 在工作表退出时清除数据透视表上的过滤器的 VBA 代码

c# - 如何将 C# 二维数组返回给 VBScript