Excel 根据条件保存为PDF

Excel 根据条件保存为PDF,excel,vba,Excel,Vba,我正在尝试开发以下项目:我有一个选择的工作表,在这个选择中,我想保存到一个pdf,只有那些单元格C8或C9填充的。 我设法使它只保存我的选择,但我无法添加此过滤器,以只保存这些单元格已填充的过滤器 你能帮我吗? 这是我到目前为止的代码: Sub Export_As_PDF() Dim cx As Variant Filename = Application.GetSaveAsFilename( _ fileFilter:="PDF Files (*.pdf), *.pdf"

我正在尝试开发以下项目:我有一个选择的工作表,在这个选择中,我想保存到一个pdf,只有那些单元格C8或C9填充的。 我设法使它只保存我的选择,但我无法添加此过滤器,以只保存这些单元格已填充的过滤器

你能帮我吗? 这是我到目前为止的代码:

Sub Export_As_PDF()
Dim cx As Variant
Filename = Application.GetSaveAsFilename( _
 fileFilter:="PDF Files (*.pdf), *.pdf")
 If TypeName(Filename) = "Boolean" Then
MsgBox "Processo Cancelado."
Exit Sub
Else
CheckName = VBA.FileSystem.Dir(Filename)
 If CheckName = VBA.Constants.vbNullString Then
    C = Sheets(Array("Capa", "Aprovação","Receita","Anos")).Select
      For Each cx In C
        cx = Sheet(cx).Select
        If Not IsEmpty("C8") Or Not IsEmpty("D9") Then
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Filename, openafterpublish:=True, ignoreprintareas:=False
        ActiveWindow.Zoom = True
        MsgBox "Proposta Comercial Exportada para PDF."
        Else
        End If
      Next cx
  Else
    answer = MsgBox("The FileName already exists. Do you want to overwrite?", vbQuestion + vbYesNo)
     If answer = vbYes Then
        C = Sheets(Array("Capa", "Aprovação","Receita","Anos")).Select
        For Each cx In C
        If Not IsEmpty("C8") Or Not IsEmpty("D9") Then
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Filename, openafterpublish:=True, ignoreprintareas:=False
        ActiveWindow.Zoom = True
        MsgBox "Proposta Comercial Exportada para PDF."
        Else
        End If
        Next cx
      Else
        MsgBox "Proposta Cancelada."
        Exit Sub
      End If
  End If
End If
End Sub

尽量不要重复相同的代码。我删除了重复,这样更容易维护

这里的想法是循环浏览所有可能的工作表,检查每个工作表中的数据,并收集实际要导出的工作表的名称。然后仅选择这些图纸并将其导出

Option Explicit

Public Sub ExportAsPDF()
    Dim SaveToFilename As Variant
    SaveToFilename = Application.GetSaveAsFilename(FileFilter:="PDF Files (*.pdf), *.pdf")
    If VarType(SaveToFilename) = vbBoolean Then
        MsgBox "Processo Cancelado."
        Exit Sub
    End If  ' no else needed as you exit anyway if it is true
    
    ' check if file exists and ask for overwrite
    Dim CheckName As String
    CheckName = VBA.FileSystem.Dir(SaveToFilename)
    If Not CheckName = VBA.Constants.vbNullString Then
        Dim Answer As Long
        Answer = MsgBox("The FileName already exists. Do you want to overwrite?", vbQuestion + vbYesNo)
        If Not Answer = vbYes Then
            MsgBox "Proposta Cancelada."
            Exit Sub
        End If
    End If
    
    
    On Error GoTo SHEET_NOT_FOUND ' if one of the sheets does not exist error
    Dim PossibleSheets As Sheets
    Set PossibleSheets = Sheets(Array("Capa", "Aprovação", "Receita", "Anos"))
    On Error GoTo 0
    
    
    Dim ExportSheetNames As Collection
    Set ExportSheetNames = New Collection
    
    ' Check if data exists and collect all sheet names with data
    Dim Sheet As Variant
    For Each Sheet In PossibleSheets
        If Not IsEmpty(Sheet.Range("C8")) Or Not IsEmpty(Sheet.Range("D9")) Then
            ExportSheetNames.Add Sheet.Name, Sheet.Name
        End If
    Next Sheet
    
    ' Convert collection into array beacause Sheets() needs an array
    Dim ExportSheets() As String
    ReDim ExportSheets(0 To ExportSheetNames.Count - 1) As String
    Dim i As Long
    For i = 0 To ExportSheetNames.Count - 1
        ExportSheets(i) = ExportSheetNames.Item(i + 1)
    Next i
    
    ' Export
    Sheets(ExportSheets).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=SaveToFilename, openafterpublish:=True, ignoreprintareas:=False
    
    MsgBox "Proposta Comercial Exportada para PDF."
    
    ' Error handling
    Exit Sub
SHEET_NOT_FOUND:
    MsgBox "One sheet was not found."
End Sub

您的代码无法编译,更不用说工作了。您应该做的第一件事是将Option显式放在模块顶部,然后声明所有变量。然后第19行cx=工作表(cx)。选择需要读取cx=工作表(cx)。选择。这仍然是错误的,但至少它会编译。继续从主菜单中点击“调试/编译”,直到代码编译无误。也许我们可以帮你修正逻辑。