向循环中添加VBA条件语句



所以我有下面的代码,目前工作。所有数据都在一个名为"Table"的选项卡上,并输入到一个名为"Att a"的选项卡中,该选项卡生成100多个pdf文件,并根据"Table"选项卡中列a中的值命名。

我想在下面的代码中添加一个条件语句,检查"表"选项卡中列CH中的值,如果它大于0保存在一个位置,如果它等于0,则保存在另一个位置。由于有100多行数据,列A中的值需要检查列CH中同一行中的值。

因此逻辑转到列A(使用此值作为文件名),创建一个文件,并检查列CH以确定将文件保存在哪个文件夹中。如何将此条件添加到以下代码中?

Sub Generate_PDF_Files()
    Application.ScreenUpdating = False
    Sheets("Table").Activate
    Range("A7").Activate
    Do Until ActiveCell.Value = "STOP"
        X = ActiveCell.Value
        Range("DLR_NUM") = "'" & X
        Sheets("Att A").Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "L:Mike89Sales" & X & ".pdf", Quality:=xlQualityStandard, _IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
        Sheets("Table").Activate
        ActiveCell.Offset(1, 0).Activate
    Loop
End Sub

既然你的代码可以工作,我们通常会建议你把它发布在code Review上,但是你也在寻找一些关于条件语句的帮助。

所以一些简单的事情…

  • 避免选择并激活
  • 使用描述性变量命名
  • 始终定义和设置对工作表和工作簿的引用
  • 永远不要假设工作表

条件句本身非常简单,如下面的例子所示,它还包含了上面链接中分享的思想:

Option Explicit
Sub Generate_PDF_Files()
    Dim tableWS As Worksheet
    Dim attaWS As Worksheet
    Dim filename As Range
    Dim checkValue As Range
    Dim filepath As String
    Const ROOT_FOLDER1 = "L:Mike89Sales"
    Const ROOT_FOLDER2 = "L:Mike99Sales"
    Set tableWS = ThisWorkbook.Sheets("Table")
    Set attaWS = ThisWorkbook.Sheets("Att A")
    Set filename = tableWS.Range("A7")
    Set checkValue = tableWS.Range("CH7")
    Application.ScreenUpdating = False
    Dim dlrNum as Range
    set dlrNum = tableWS.Range("DLR_NUM")
    Do Until filename = "STOP"
        dlrNum = "'" & filename
        If checkValue > 0 Then
            filepath = ROOT_FOLDER1 & filename
        Else
            filepath = ROOT_FOLDER2 & filename
        End If
        attaWS.ExportAsFixedFormat Type:=xlTypePDF, _
                                   filename:=filepath, _
                                   Quality:=xlQualityStandard, _
                                   IncludeDocProperties:=True, _
                                   IgnorePrintAreas:=False, _
                                   OpenAfterPublish:=False
        Set filename = filename.Offset(1, 0)
        Set checkValue = checkValue.Offset(1, 0)
    Loop
    Application.ScreenUpdating = True
End Sub

相关内容

  • 没有找到相关文章

最新更新