3

Excelのシートの一部を同じPDFにエクスポートするためのVBAコードの記述に取り組んでいます。Excelファイルにいくつかのグラフシートがあり、それぞれの名前は「(name)_Chart」で終わります。チャートで終わる名前のすべてのシートを1つのPDFファイルにエクスポートしたいと思います。これが私が書き込もうとしているコードです。

Sub FindWS()
        'look if it at least contains part of the name
        Dim s As Worksheet
        Dim strPath As String

        strPath = ActiveWorkbook.Path & "\"

        For Each s In ThisWorkbook.Sheets
            If InStr(1, s.Name, Chart) Then
                s.Activate
                ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & s.Name & ".pdf"
                Exit Sub
            End If
        Next s
End Sub

このコードは、チャートシートのみへのエクスポートを制限するのではなく、ワークブック全体をエクスポートします。誰かが私のコードに何が欠けているのかを理解するのを手伝ってくれますか?

ありがとう!

変更されたコード:

Sub FindWS()
'look if it at least contains part of the name
Dim s As Worksheet
Dim strPath As String

strPath = ActiveWorkbook.Path & "\"

For Each s In ThisWorkbook.Worksheets
      If InStr(1, s.Name, "Chart") = 0 Then
          ' Hide the sheet so it is not exported as PDF
          s.Visible = False
             End If
Next s
          With ActiveWorkbook
          .ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf"
                End With

サブ終了

4

2 に答える 2

2

そもそもあなたのコードが実行されていることに驚いています:)実際にはエラーが発生しているはずですrun time error '13', type mismatch

SheetsWorksheetsExcelの2つの異なるものです

Worksheetsコレクションは、指定されたワークブックまたはアクティブなワークブック内のすべてのワークシートオブジェクトのコレクションです。各Worksheetオブジェクトはワークシートを表します。一方、Sheetsコレクションは、ワークシートのコレクションだけでなく、グラフシート、Excel 4.0マクロシート、Excel5.0ダイアログシートなどの他の種類のシートで構成されています。

したがって、オブジェクトを次のように宣言すると、Worksheet

Dim s As Worksheet

次に、ループ中に正しいコレクションをループするようにします

For Each s In ThisWorkbook.Worksheets

ではなく

For Each s In ThisWorkbook.Sheets

そうでなければあなたは得るでしょうrun time error '13', type mismatch

フォローアップ(コメントに基づく)

@ Siddharth:1.はい、「Chart」という名前で終わるチャートシートをエクスポートしたいと思います。2.これらすべてのグラフを1つのPDFにまとめたいのですが、PDFの名前は「元の」ファイル名にする必要があります。(ファイルが重複しないように、最終的なPDFファイルを別の場所に保存する必要があります。)–データ中心

Option Explicit

Sub Sample()
    Dim ws As Object
    Dim strPath As String, OriginalName As String, Filename As String

    On Error GoTo Whoa

    '~~> Get activeworkbook path
    strPath = ActiveWorkbook.Path & "\"
    '~~> Get just the name without extension and path
    OriginalName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1))
    '~~> PDF File name
    Filename = strPath & OriginalName & ".pdf"

    '~~> Loop through Sheets Collesction
    For Each ws In ActiveWorkbook.Sheets
        '~~> Check if it is a Chart Sheet and also it ends in "Chart"
        If ws.Type = 3 And UCase(Right(Trim(ws.Name), 5)) = "CHART" Then
            ws.Visible = True
        Else
            ws.Visible = False
        End If
    Next ws

    '~~> Export to pdf
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, Filename

LetsContinue:
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2013-02-18T05:12:28.683 に答える
0

このコードはすべてのシートを調べます。シート名が一致しない場合は非表示になります。終了すると、表示されているすべてのシートを1つのPDFにエクスポートします。後でExcelファイルを保存しないように注意してください。保存しないと、シートが非表示のままになります。

もちろん、このコードはテストされていないので、問題が発生した場合は、質問してください(または、何かを学ぶ可能性があるので、自分で解決してみてください)

Sub FindWS()
    'look if it at least contains part of the name
    Dim s As Worksheet
    Dim strPath As String

    strPath = ActiveWorkbook.Path & "\"

    For Each s In ThisWorkbook.Sheets
        If InStr(1, s.Name, "Chart") = 0 Then
              ' Hide the sheet so it is not exported as PDF
              s.Visible = False 
        End If
    Next s

    ' Export all sheets as PDF         
    ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf"
End Sub
于 2013-02-18T04:35:34.460 に答える