Excel 使用所有图纸的If语句打印多张图纸

Excel 使用所有图纸的If语句打印多张图纸,excel,vba,Excel,Vba,基本上有11个工作表,我需要在一个单一的pdf文件打印。第一个工作表需要完全打印,其他10个工作表需要基于特定单元格>0的条件 在我的例子中,对于每个工作表,有一个数字被吐出到一个特定的单元格中。一半是C16,另一半是C20(我不能将它们全部更改为完全相同,因为其他代码也依赖于它) 有没有一种方法可以创建一个宏,将所有这些工作表打印到一个pdf文件中,同时满足此条件 这里有一个我尝试过的代码没有包含if语句,因为我不知道在哪里实现它。SG是不需要条件的选项卡。因为电池混合了哪些需要C16和C20

基本上有11个工作表,我需要在一个单一的pdf文件打印。第一个工作表需要完全打印,其他10个工作表需要基于特定单元格>0的条件

在我的例子中,对于每个工作表,有一个数字被吐出到一个特定的单元格中。一半是C16,另一半是C20(我不能将它们全部更改为完全相同,因为其他代码也依赖于它)

有没有一种方法可以创建一个宏,将所有这些工作表打印到一个pdf文件中,同时满足此条件

这里有一个我尝试过的代码没有包含if语句,因为我不知道在哪里实现它。SG是不需要条件的选项卡。因为电池混合了哪些需要C16和C20,假设1-5需要C15,6-10需要C20。谢谢大家!

Sub zxcv()

    Sheets(Array("SG", _
        "sh1", _
        "sh2", _
        "sh3", _
        "sh4", _
        "sh5", _
        "sh6", _
        "sh7", _
        "sh8", _
        "sh9", _
        "sh10")).Select

    Sheets("SG").Activate

    ChDir "C:\Users\mynamehere\Downloads\test"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\mynamehere\Downloads\test\test2.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
End Sub

不要使用“选择”或“激活”,它们几乎从来都不是必需的

也就是说,您首先需要使用不同的单元格引用来分隔图纸

然后在同一循环中进行单元格比较,如果符合条件,则导出

Sub zxcv()
    dim elements as variant
    dim sheetval as integer
    for each elements in activeworkbook.sheets ' Give this a real workbook reference
        if not elements.name like "SG" then
        sheetval = cint(right(elements.name, len(elements.name) - (instr(1, elements.name, "sh") + 1)) ) 'Get the sheet number
        if sheetval >= 6 then 'Determine which cell you need to look at
            if elements.range("C20").value > 0 then 'Test value
                 elements.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                 "C:\Users\mynamehere\Downloads\test\test2.pdf", _
                 Quality:=xlQualityStandard, _
                 IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
                 OpenAfterPublish:=True
            end if
        else
            if elements.range("C16").value > 0 then
                 elements.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                 "C:\Users\mynamehere\Downloads\test\test2.pdf", 
                  Quality:=xlQualityStandard, _
                  IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
                  OpenAfterPublish:=_
                  True
             end if
        end if
        else
           elements.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
           "C:\Users\mynamehere\Downloads\test\test2.pdf", 
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
            OpenAfterPublish:=_
            True
        end if
    next
end sub

编辑:忘记为主工作表放置导出

像这样的事情应该行得通

Sub zxcv()

    Dim v, arr, vals

    'sheetName:rangeAddress
    arr = Array("sh1:C16", "sh2:C16", "sh3:C16", "sh4:C16", "sh5:C16", _
                "sh6:C20", "sh7:C20", "sh8:C20", "sh9:C20", "sh10:C20")

    Sheets("SG").Select

    For Each v In arr
        vals = Split(v, ":") 'split to sheet name and range address
        With Sheets(vals(0))
            'Add to current sheet selection?
            'Replace:=False prevents de-selecting any already-selected sheet(s)
            If .Range(vals(1)).Value > 0 Then .Select Replace:=False
        End With
    Next v

    Sheets("SG").Activate

    ChDir "C:\Users\mynamehere\Downloads\test"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\mynamehere\Downloads\test\test2.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
End Sub

声明一个变量以保存工作表名称数组。在查找匹配项时,浏览这些表并将名称添加到数组中。代码的其余部分应该按原样工作(如果整个列表已经这样做了的话),在C16中可以有值的工作表是否总是相同的工作表,在C20中是否相同?