【问题标题】:Hide and unhide specific parts of excel project隐藏和取消隐藏excel项目的特定部分
【发布时间】:2015-08-27 08:45:28
【问题描述】:

我刚开始使用 VBA,目前正在努力寻找解决此问题的方法:

我了解隐藏的工作原理,并且有用于隐藏一系列行/列的代码 (Worksheets("Sheet3").Columns("A:G").EntireColumn.Hidden = True),但我希望能够存储列+工作表的“列表”和行+工作表的列表。然后为两个列表中的每个范围循环运行隐藏代码。

目前这就是我所拥有的(但我不知道如何使它工作):

Sub Test()
Application.ScreenUpdating = False
Dim i As Integer
Dim Lastrow As Long
Lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To Lastrow
'To hide sheets
Sheets(Cells(i, 1).Value).Visible = False
'To hide row on sheet
Rows(Cells(i, 2).Value).Hidden = True
'To hide row on specific sheet
Sheets(Cells(i, 1).Value).Rows(Cells(i, 2).Value).Hidden = True

Next
Application.ScreenUpdating = True
End Sub

【问题讨论】:

  • 到目前为止,这段代码中没有任何内容引用任何列表。将 XML 文件作为列表怎么样?您可以将工作表名称作为节点,并将相应的列和行隐藏为相应工作表节点的子级。听起来不错?
  • 我刚开始使用 vba。我该怎么做?
  • 通过学习吗?网上有很多教程。在 SO 上,我们互相帮助理解,我们不只是随意编码。你不理解的代码总是很危险的。从这里开始:excel-vba.com/excel-vba-solutions-beginners.htm
  • 我没有要求代码 (IJS)。在您给我的网站上,任何地方都没有对节点的引用。你为什么链接那个网站?
  • 因为当我推荐使用 XML 文件时,您说您“刚开始使用 VBA”。因此,我认为在这个阶段提供代码来解析 XML DOM 文档没有任何好处。也许这个链接可以更好地帮助你。 excel-macro.tutorialhorizon.com/…

标签: vba excel show-hide


【解决方案1】:

我将在此处发布我的最后一次聊天回复,请让我 - 和其他人! - 知道它是否有帮助。

1) 像这样将要隐藏在哪个工作表上的行/列的值存储在 XML 中:

<hideme>
  <Sheets>
    <Sheet name="Sheet1">
      <rows>
        <row range="3:3"/>
        <row range="13:13"/>
      </rows>
      <columns>
        <column range="C:C"/>
        <column range="F:F"/>
      </columns>
    </Sheet>
    <Sheet name="Sheet2"/>
    <Sheet name="Sheet3">
      <rows>
        <row range="5:5"/>
      </rows>
    </Sheet>
  </Sheets>
</hideme>

对于宏,您需要设置对 Microsoft XML, v6.0 的引用。 (即在 VB 编辑器中,Tools=>References)。

Sub HideMe()

Dim xml As DOMDocument60
Dim xmlSheets As IXMLDOMNodeList
Dim n As IXMLDOMNode, r As IXMLDOMNode, c As IXMLDOMNode, xmlRows As IXMLDOMNodeList, xmlColumns As IXMLDOMNodeList
Dim ro As IXMLDOMNode, col As IXMLDOMNode, ran As String
Dim sh As Worksheet

Dim xmlpath As String

xmlpath = "[path to your xml]"

Set xml = New DOMDocument60
xml.Load (xmlpath)

Set xmlSheets = xml.DocumentElement.SelectNodes("//Sheet")

For Each n In xmlSheets 'Sheet nodes
    Set sh = ActiveWorkbook.Sheets(n.Attributes.getNamedItem("name").Text)
    Set r = n.SelectSingleNode("rows")
    If Not r Is Nothing Then
        Set xmlRows = r.SelectNodes("row")
        For i = 0 To xmlRows.Length - 1
            ran = xmlRows.Item(i).Attributes.getNamedItem("range").Text
            sh.Rows(ran).EntireRow.Hidden = True
        Next i
    End If

    Set c = n.SelectSingleNode("columns")
    If Not c Is Nothing Then
        Set xmlColumns = c.SelectNodes("column")
        For i = 0 To xmlColumns.Length - 1
            ran = xmlColumns.Item(i).Attributes.getNamedItem("range").Text
            sh.Range(ran).EntireColumn.Hidden = True
        Next i
    End If
Next n

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多