お疲れ様です。
先日質問させて頂いた続きになるのですが
Sheet1がある時はSheet1のみをPDF出力し、Sheet1がない場合はSheet2,Sheet3,Sheet4,Sheet5,Sheet6の複数のシートを一つにしてPDFにして出力という作業を行いたく以下のようなコードを追記致しました。
VBA
1 2Sub EXCELファイルPDF化03() 'フォルダのEXCELファイルの一括変換 3 4 Dim Button, T, I, L As Integer 5 Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, ExFileName As String 6 7 Application.DisplayAlerts = False '確認メッセージを無効化します。 8 9 10 Button = MsgBox("EXCEファイルの一括PDF変を行いますか?", vbYesNo + vbQuestion, "確認") 11 If Button = vbYes Then 12 13 OpenExcelFileName = Application.GetOpenFilename 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。 14 15 If OpenExcelFileName <> "False" Then 16 ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。 17 ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く) 18 19 MsgBox ExcelFilePath & "この選択フォルダからPDFに変換します。" 20 Else 21 MsgBox "キャンセルされました" 22 Exit Sub 'キャンセルでプログラムを終了します。 23 24 End If 25 26 ExFileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。 27 28 29 Do While ExFileName <> "" '読み込むファイルがなくなるまで繰り返す。 30 31##########今回追加したコード部分############# 32 If Worksheets = ("Sheet1") Then 33 34 Worksheets("Sheet1").ExportAsFixedFormat _ 35 Type:=xlTypePDF, _ 36 fileName:=ExcelFilePath & ExFileName, _ 37 OpenAfterPublish:=True 38 Else 39 40 Worksheets(Array("SHeet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6")).Select 41 ActiveSheet.ExportAsFixedFormat _ 42 Type:=xlTypePDF, _ 43 fileName:=ExcelFilePath & ExFileName, _ 44 OpenAfterPublish:=True 45 46 End If 47########################### 48 49 ActiveWindow.Close '読み込んだファイルを閉じます。 50 51 ExFileName = Dir() '次のファイルを指定する。 52 53 Loop 54 55 MsgBox "PDFファイルに一括変換しました。" 56 Else 57 MsgBox "処理を中断します" 58 End If 59 60 Application.DisplayAlerts = True '確認メッセージを有効化します。 61 62End Sub 63 64
こちらを実行するとコンパイルエラーが出てしまいます。
If Worksheets = ("Sheet1") Then この部分でWorksheetsとSheet1が一致していればif文に入る
と思ったのですが上手く動作しません。
まだまだ検索不足かもしれないですが、ワークシートと条件が一致していればという条件分岐の書き方が知りたいです。
初歩的な質問で大変恐縮ですが、宜しくお願い致します。
文法的な誤り以前に、Sheet2~Sheet6はいかなる場合も存在するのですか?
ご回答ありがとうございます。
Sheet1が存在する箇所には存在しないです。
worksheet名をindex番号で取得するのか、名前で取得するのかぶれていませんか??
シート名を取得する場合は
sub test()
dim myname as string
myname=ActiveSheet.Name
if myname="sheet1" then
XX
endif
end sub
とかの記述のようなものが必要な気がします。
質問を変更します。
Sheet1が存在しない場合、Sheet2~Sheet6は必ず存在するのですね?
質問の意図は、Sheet2~Sheet6がオンコーディング(ハードコーディング)で決め打ちされているからです。
Sheet1とSheet6が存在しない状態で実行すれば、当然エラーとなるので。
返答ありがとうございます!
はい、Sheet1が存在しない場合、Sheet2~Sheet6は必ず存在しております!
議論が活性化してきて、詳しい方がどんどん来ました!宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー