6

ファイルパス (ワークブックが保存された場所)、ターゲットパス (pdf が保存される場所)、およびタブ名の文字列 (パイプ (|) で区切られた) を受け取る小さな関数を Excel で作成しようとしています。

関数のユーザーは、タブ名の文字列を入力する必要はありません (オプションです)。そうでない場合は、表示されているすべてのタブを選択して印刷したいと考えています。これは、ユーザーが別々のワークシートに 50 個のチャートを持っていて、"Chart1|Chart2|...." のような文字列を書きたくない場合に当てはまります。

コード:

For Each WSO.Name In WBO.Worksheets 
    strSheets = strSheets & WSO.Name & "|" 
Next WSO

strSheets = Left(strSheets, Len(strSheets) - 1) 
arraySheets() = Split(strSheets, "|")

WBO.Sheets(arraySheets()).Select     
WBO.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _ 
    strFilePath, Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
    True

For Each ループには 2 つの問題があります。「Chart1」などのシートは取得されず、「Sheet1」などのシートのみが取得されます。また、非表示のシートを取得するため、それらをすべて選択しようとすると範囲外のエラーが発生します。

チャート シートが通常のシートとは異なる方法で参照されているのか、それとも非表示のシートも選択される理由がわかりませんでした。

4

2 に答える 2

8

ループWBO.Sheetsの代わりに使用します。WBO.Worksheets

WSO.Visible = xlSheetVisible非表示のシートを除外することを確認します。

于 2011-07-23T00:35:31.180 に答える
7

For Each ループには 2 つの問題があります。「Chart1」などのシートは取得されず、「Sheet1」などのシートのみが取得されます。

チャートとワークシートは 2 つの異なるコレクションです。
これを試して:

Sub Demo()
Dim oWs As Worksheet
Dim oCs As Chart

For Each oWs In ActiveWorkbook.Worksheets
    Debug.Print oWs.Name
Next

For Each oCs In ActiveWorkbook.Charts
    Debug.Print oCs.Name
Next
End Sub
于 2011-07-24T03:09:18.567 に答える