excel - 隐藏除选定之外的所有工作表 - Excel VBA
问题描述
第一次发帖,请原谅任何不良的礼仪。
我正在编写一个 VBA,它会生成一个信息包供我们的客户使用。这个包是根据某些用户选择动态构建的——例如常见问题页面将特定于用户所做的选择。我已经构建了每个模块,以便在内容表运行时将相关表名称添加到内容表中。最后,我拿起这张表格列表,选择它们并生成一个 PDF。
我想要做的是隐藏所有其他工作表,而不是选择的工作表 - 我可以通过专门命名它们来做到这一点,或者在纯参考工作表的工作表名称末尾添加“zzz”,但我希望有更好的方法。
我想要的代码会这样做:
- 选择所有已添加到内容页面的工作表并创建一个数组(这已经有效)
- 为选定的工作表生成 PDF(这也有效)
- 隐藏不在数组中的任何工作表(这是我正在努力解决的问题)
生成 PDF 的代码如下 - 请注意,由于一些计划不周的命名,“Contents Array”是内容表上的命名范围,“ContentsList”是 VBA 数组:
For Each cell In wsContents.Range("ContentsArray")
ContentsList(j) = cell.Value
wb1.Sheets(cell.Value).Select
j = j + 1
Next 'cell
wb1.Sheets(ContentsList()).Select
FileName = wsControl.Range("CustomerName") & " Pack " & Format(wsControl.Range("ReportDate"), "dd-mm-yyyy")
PDFFilePath = wb1.Path & "/AutoGenerated Packs/" & FileName & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=PDFFilePath, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
解决方案
首先,您可以一次性将数组设置为范围:
ContentsList = wsContents.Range("ContentsArray").Value
然后,您将需要遍历工作簿中每个工作表的数组以检查它是否存在...类似于下面的内容(如果您对数组使用与已有的相同的方法,否则您将需要另一种方法来确定j
(数组中的元素数)):
Dim ws As Worksheet
Dim i As Long
For Each ws In Thisworkbook.Worksheets
For i = 1 To j
If ws.Name = ContentsList(i) Then
'if found exit for as we do not want to hide
Exit For
End If
'if not found then hide
If i = j Then
ws.Visible = xlSheetHidden
End If
Next j
Next ws
希望这可以帮助!
推荐阅读
- c# - .net core 3.1:剃须刀页面和 API 控制器的端点路由
- android-studio - Kotlin 上 !boolean (negative) 的等价物是什么
- c# - 为什么当我在 DataGrid 中做了一些更改时,我的 ObservableCollection 没有任何更改?
- node.js - Deno 简单静态 CRUD 示例
- javascript - 生成随机高度并应用于页面上的每个 div
- android-studio - 不借助 Sceneform 在 ARCore 环境中渲染对象
- json - 如果包含不同的结构,如何构建 REST API?
- flutter - Flutter:Alertdialog 和字体上的边框颜色
- c++ - 如何释放向量?
- python - 在python上安装太极包