隐藏和取消隐藏 excel 项目的特定部分
Hide and unhide specific parts of excel project
我刚开始使用 VBA,目前正在努力寻找解决此问题的方法:
我了解隐藏的工作原理,并且有隐藏 rows/columns 范围内的代码 (Worksheets("Sheet3").Columns("A:G").EntireColumn.Hidden = True),但我希望能够存储 "list" 列 + sheet 和行列表 + sheet。然后 运行 两个列表中每个范围的循环隐藏代码。
目前这就是我所拥有的(但我不知道如何让它发挥作用):
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
我只是 post 我在这里聊天的最后回复,请让我 - 和其他人! - 知道它是否有帮助。
1) 将 rows/columns 隐藏在 sheet 上的值存储在 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, v6.0。 (即在 VB 编辑器中,工具 => 参考)。
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
我刚开始使用 VBA,目前正在努力寻找解决此问题的方法:
我了解隐藏的工作原理,并且有隐藏 rows/columns 范围内的代码 (Worksheets("Sheet3").Columns("A:G").EntireColumn.Hidden = True),但我希望能够存储 "list" 列 + sheet 和行列表 + sheet。然后 运行 两个列表中每个范围的循环隐藏代码。
目前这就是我所拥有的(但我不知道如何让它发挥作用):
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
我只是 post 我在这里聊天的最后回复,请让我 - 和其他人! - 知道它是否有帮助。
1) 将 rows/columns 隐藏在 sheet 上的值存储在 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, v6.0。 (即在 VB 编辑器中,工具 => 参考)。
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