2016-10-04 8 views
0

すべての名前付き範囲を1つの変数に設定してPDFにエクスポートします。私は手動ですべての名前付き範囲を入力するときに行うことができます。私の問題は変数の名前が付けられていますが、時には10を超える時間があります。アドバイスをお願いします...次のコードで試しました。vbaはダイナミックな名前付き範囲を設定します

Dim wbBook As Workbook 
Dim nName As Name 

Set wbBook = ActiveWorkbook 
Set nName=wbBook.Names 

Set rs = wbBook.Range(nNames) 
rs.Select 
Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False 

しかし、私は手動で範囲名を入力すると、コードの下に、私の作品..

Set rs = wbBook.Range("Page_1,Page_2,Page_3") 
rs.Select 
Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False 
+0

あなたのセットアップNAME'として '薄暗いNNAMEが、あなたの行にあなたは='を設定し、RS = wbBook.Range(nNames) '、** nNames **の代わりに、** NNAME ** –

+1

本当に'設定し、RSを持っていますwbBook.Range( "Page_1、Page_2、Page_3") 'は動作しますか? – user3598756

+0

はい、それは私のために働いて、3つのページで1つのPDFファイルに出力しました。 – Manish

答えて

4

あなたはオブジェクト変数コレクション(多くのオブジェクト)を渡すことはできません(単一オブジェクト)。コレクションのオブジェクトをループする必要があります。通常はFor Eachループで行いますが、この場合はUnionのために最初の要素を個別に設定する必要があるため、単純なForループを使用しています。

可能であれば、.Selectを使用しないでください。ただあなたのオブジェクトを直接使用してください。

また、ワークブック内のすべての名前付き範囲については言及していますが、複数のワークシートで名前付き範囲を使用すると問題が発生する可能性があります。私はテストしていませんが、うまくいくとは思っていません。

Dim wbBook As Workbook 
Dim i As Integer 
Dim rs As Range 

Set wbBook = ActiveWorkbook 
Set rs = wbBook.Names(1).RefersToRange 
For i = 2 To wbBook.Names.Count 
    Set rs = Union(rs, wbBook.Names(i).RefersToRange) 
Next 

rs.ExportAsFixedFormat xlTypePDF, strPath, , , False 
+1

これは、すべての_workbook_名前付き範囲が同じワークシートにあると仮定します。そうでなければ、Union()がエラーになります。 – user3598756

+0

@ user3598756本当に、私はこれを述べました。私は彼らがすべて同じシートに入っていることを前提としていました。そうしないと、OPの元のコードは解決策から非常に遠いでしょう。 – vacip

+0

あなたは正しいです:私はあなたのコードを見て、最初の_caveat_を見ていませんでした。 OPの初期コードに関しては、よく「wbBook.Range」は私が「ソリューションから非常に遠い」と呼ぶものです。 – user3598756

関連する問題