2011-07-23 5 views
5

私は、ファイルパス(ブックが保存された場所)、targetpath(pdfが保存される場所)、タブ名の文字列(パイプ(|)で区切られています)。VBAワークシート参照チャートシート

この機能のユーザーは、タブ名の文字列を入力する必要はありません(オプションです)。そうでない場合は、表示されているすべてのタブを選択して印刷します。 2があります

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 

コード「| | Chart2 ....グラフ1」ユーザーが別のワークシートにある50枚のチャートを持っているなどの文字列を記述したくない場合、これがケースになりますFor Eachループの問題:「Chart1」などのシートを取得しないため、「Sheet1」などのシートのみを取得します。また、隠しシートをつかむので、それらをすべて選択しようとすると、範囲外のエラーが発生します。

チャートシートが通常のシートと違って参照されているのか、隠れシートが選択されているのかはわかりませんでした。

答えて

6

WBO.Worksheetsの代わりにWBO.Sheetsを使用してください。

WSO.Visible = xlSheetVisibleが隠しシートを除外することを確認します。

6

For Eachループを持つ2つの問題があります:それは、このような「グラフ1」などの任意のシートをつかむしない、それだけで、このような「シート1」

チャートやワークシートなどのシートをつかみます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 
+0

、 'ActiveWorkbook.Sheets'は' ActiveWorkbook.Worksheets'と 'ActiveWorkbook.Charts'の両方を含んでいます。 –

関連する問題