【问题标题】:Loop through Array of Worksheet CodeNames VBA [duplicate]循环遍历工作表代码名数组 VBA [重复]
【发布时间】:2018-08-16 10:28:25
【问题描述】:

我想使用 VBA 循环浏览特定的工作表,以便在它们被隐藏时取消隐藏它们。 我想使用工作表的代码名称,而不是索引或名称。

我尝试过类似的方法,但它返回错误“需要对象”在线
If HiddenSheets(sCounter).Visible = xlSheetHidden Then

***新信息:我正在单独的工作簿中编写此代码。我为该工作簿 WB_Master 创建了一个变量。也许我应该使用这个变量以某种方式调用该工作簿中的工作表?

Dim HiddenSheets As Variant
Dim sCounter As Long

HiddenSheets = Array(Sheet4, Sheet5, Sheet6, Sheet25, Sheet26, Sheet27, Sheet33)

For sCounter = LBound(HiddenSheets) To UBound(HiddenSheets)
    If HiddenSheets(sCounter).Visible = xlSheetHidden Then
        HiddenSheets(sCounter).Visible = xlSheetVisible
    End If
Next sCounter

【问题讨论】:

  • 你的一个(或多个)代号一定是错误的。
  • 您的代码对我来说运行良好.. 尝试使用 False 而不是 xlSheetHidden 并确保数组中的所有代码名称都存在
  • 代号是正确的。正如我在编辑后的帖子中所说,这些工作表与保存此代码的工作簿位于不同的工作簿中。也许这与错误有关。
  • 您不能直接在不同的工作簿中使用工作表的代号,除非您设置了对该工作簿项目的引用(它必须是启用宏的格式)。
  • @QHarr,不幸的是,这个问题被标记为重复,另一个问题中提供的答案需要访问 VBA 项目对象模型,Rory 在一些 VBA 代码中的评论将是另一种方法

标签: arrays vba excel loops


【解决方案1】:

您仍然可以在单独的工作簿中使用工作表的代号,前提是您:

  • 将代号作为字符串存储在HiddenSheets

  • 遍历您的单独的工作簿工作表并检查他们的CodeName是否在HiddenSheets

如下:

Sub UnHideSheets()
    Dim HiddenSheets As Variant
    HiddenSheets = Array("Sheet4", "Sheet5", "Foglio2", "Sheet25", "Sheet26", "Sheet27", "Sheet33") ' store codenames as strings

    Dim sh As Worksheet
    For Each sh In Workbooks("WB_Master").Worksheets ' loop through your "separate" workbook worksheets (change "WB_Master" to your actual "separate" workbook name)
        If Not IsError(Application.Match(sh.CodeName, HiddenSheets, 0)) Then sh.Visible = xlSheetVisible
    Next
End Sub

【讨论】:

  • @UrosDjukic,有什么反馈吗?
猜你喜欢
  • 2023-03-23
  • 2022-11-10
  • 1970-01-01
  • 2017-11-26
  • 2021-09-04
  • 2022-01-22
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多