Vba 隐藏和取消隐藏excel项目的特定部分

Vba 隐藏和取消隐藏excel项目的特定部分,vba,excel,show-hide,Vba,Excel,Show Hide,我刚开始学习VBA,目前正在努力找到解决此问题的方法: 我了解隐藏的工作原理,并拥有隐藏一系列行/列(工作表(“Sheet3”).columns(“A:G”).EntireClumn.Hidden=True)的代码,但我希望能够存储列+表的“列表”和行+表的列表。然后对两个列表中的每个范围在循环中运行隐藏代码 目前,这就是我所拥有的(但我不知道如何让它发挥作用): 我将在这里发布我最后一次的回复,请让我和其他人知道它是否有用 1) 将要隐藏在哪个工作表上的行/列的值存储在XML中,如下所示: &

我刚开始学习VBA,目前正在努力找到解决此问题的方法:

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

目前,这就是我所拥有的(但我不知道如何让它发挥作用):


我将在这里发布我最后一次的回复,请让我和其他人知道它是否有用

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>

到目前为止,您在这段代码中根本没有引用任何列表。XML文件作为列表如何?可以将图纸名称作为节点,并将相应的列和行作为相应图纸节点的子项隐藏。听起来还好吗?我刚开始学习vba。我该怎么做?通过学习?网上有大量的教程。因此,我们帮助彼此理解,我们不只是随意使用免费编码。你不懂的代码总是很危险的。这里有一点要开始:我没有要求代码(IJS)。在你给我的网站上,任何地方都没有节点的引用。你为什么链接那个网站?因为当我推荐使用XML文件时,你说你“刚开始使用VBA”。因此,我认为在这个阶段提供代码来解析XMLDOM文档没有任何好处。也许这个链接可以帮助你更好。
<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>
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