Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
隐藏除选定图纸外的所有图纸-Excel VBA_Excel_Vba - Fatal编程技术网

隐藏除选定图纸外的所有图纸-Excel VBA

隐藏除选定图纸外的所有图纸-Excel VBA,excel,vba,Excel,Vba,第一个帖子,所以请原谅任何不礼貌的行为 我正在编写一个VBA,它生成一个信息包供我们的客户使用。此软件包是基于某些用户选择动态构建的-例如,FAQ页面将特定于用户所做的选择。我构建了每个模块,以便在内容表运行时将相关的表名添加到内容表中。最后,我拿起这张表单列表,选择它们并生成PDF 我想做的是隐藏除所选图纸之外的所有其他图纸-我可以通过具体的名称来调用它们,或者在图纸名称的末尾添加“zzz”,这是纯参考图纸,但我希望有更好的方法 我想要的代码将执行以下操作: 选择已添加到目录页的所有工作表,并

第一个帖子,所以请原谅任何不礼貌的行为

我正在编写一个VBA,它生成一个信息包供我们的客户使用。此软件包是基于某些用户选择动态构建的-例如,FAQ页面将特定于用户所做的选择。我构建了每个模块,以便在内容表运行时将相关的表名添加到内容表中。最后,我拿起这张表单列表,选择它们并生成PDF

我想做的是隐藏除所选图纸之外的所有其他图纸-我可以通过具体的名称来调用它们,或者在图纸名称的末尾添加“zzz”,这是纯参考图纸,但我希望有更好的方法

我想要的代码将执行以下操作:

  • 选择已添加到目录页的所有工作表,并创建一个数组(此操作已起作用)
  • 为所选图纸生成PDF(这同样有效)
  • 隐藏任何不在数组中的表(这是我正在努力解决的问题)
  • 生成PDF的代码如下-请注意,由于某些命名计划不当,“内容数组”是内容表上的命名范围,“内容列表”是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工作表
    我想我会坚持多久
    对于此工作簿中的每个ws。工作表
    对于i=1到j
    如果ws.Name=ContentsList(i),则
    '如果找到,则退出,因为我们不想隐藏
    退出
    如果结束
    '如果找不到,则隐藏
    如果i=j,那么
    ws.Visible=xlSheetHidden
    如果结束
    下一个j
    下一个ws
    

    希望这有帮助

    您可以对循环使用
    。此工作簿.Sheets中的每个职业安全与健康说明的内容如下:
    。这将遍历工作簿中的所有工作表(其中
    oSH
    工作表
    对象)。然后,您可以检查阵列中是否存在
    oSH
    ,并根据结果决定要执行的操作。可能值得一读,我会使用
    集合
    ,而不是数组。此外,您不需要
    j
    。你可以对数组使用
    UBound
    ,这非常完美-工作非常完美-我想我试图创建一种反向数组,这让事情变得过于复杂了,但是循环每个数组是有意义的。我让数组在整个范围内循环的原因是,我想将内容表也添加到列表中-在此之前的代码行是:{ContentsList(0)=“contents”j=1}@Zac如果您一次性映射数组,它将返回多维数组,因此您将无法使用
    UBound
    。请查看