2016-08-25 8 views
0

このコードは現在動作しています。すべてのデータは「表」と呼ばれるタブにあり、100個以上のpdfファイルに生成され、「表」タブの列Aにある値に基づいて名前が付けられた「Att A」というタブに入力されます。ループにVBA条件文を追加します

"テーブル"タブの列CHの値をチェックする次のコードに条件文を追加したいと思います.0より大きい場合は1つの場所に保存し、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:\Mike89\Sales" & X & ".pdf", Quality:=xlQualityStandard, _IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 

     Sheets("Table").Activate 
     ActiveCell.Offset(1, 0).Activate 
    Loop 
End Sub 

答えて

0

、我々は一般的に、しかし、あなたはまた、条件文のいくつかの助けを探している、あなたは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:\Mike89\Sales" 
    Const ROOT_FOLDER2 = "L:\Mike99\Sales" 

    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 
+0

あなたは素晴らしいです!ありがとうございました。ただし、ファイルを1つの場所に保存し、ファイル名に「違反」または「違反なし」を含めるように調整するだけです。どうすればファイル名に含まれず、代わりに "違反"と "違反なし"という名前のフォルダに入ります – Mike89

+0

'ROOT_FOLDER'定数を変更して、正しい保存先フォルダを含めるか、それは 'filepath'を構築しています。これは開発者としてのあなたの選択です。 – PeterT

+0

ファイルのパスを変更しましたが、すべてのファイルが同じ出力を作成しています。したがって、列Aを使用してリストにファイルを命名しますが、 "Att A"コンテンツをそれらの値と一致するように変更することはありません。このループをどのように組み込むのですか? – Mike89

関連する問題