所以我有下面的代码,目前工作。所有数据都在一个名为"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