2017-03-18 9 views
0

Excel VBAフォームから利用可能なワークシートを選択して1つのPDFドキュメントにエクスポートするルーチンを作成しようとしています。私はWordとPowerPointルーチンへのエクスポートでこれを使用する予定です。スタックオーバーフローのアイデアのいくつかを試してみたところ、これはうまくいったと言われています。私は運がなかった。私はまた、他の情報源から様々なアイデアを試しました。おそらく、私は明らかに目が見えません。VBAを使用して複数のワークシートを有効にする

私は配列を使ってみました(arrSheets、まだコード内にありますが、私はまだそれを使うことができると期待しています)。それはシートオブジェクトで作成されますが、動的配列とredimコマンドを使用して私のために働いていない。

「ActiveSheet.ExportAsFixedFormat ...」の行までは正常に動作するようです。その時点で私は

Private Sub cmdExport_Click() 
    'Find the selected documents from the form's checkboxes and send to the export routine 
Dim intArrayCounter, intSelectionNum As Integer 
Dim bolFound As Boolean 
Dim ctrl As control 
Dim arrSheets(1 To 6) As Variant ' the array to hold the worksheet objects... 

    intSelectionNum = 0 ' which checkbox is it 
    intArrayCounter = 1 ' array index 
    bolFound = False ' was a checked box found? 

    For Each ctrl In frmToPDF.Controls 
     If TypeName(ctrl) = "CheckBox" Then 
      intSelectionNum = intSelectionNum + 1 ' set the selection number 
      If ctrl.Value = True Then 
       bolFound = True ' found a selection set the flag to true 

        Set arrSheets(intArrayCounter) = Sheets(intSelectionNum) 
        ThisWorkbook.Sheets(intSelectionNum).Select 

       ' increment the counter 
       intArrayCounter = intArrayCounter + 1 
      End If 
     End If 
    Next 

    'Sheets(arrSheets).Select <---remmed out cause this throws an error 

    If bolFound = False Then ' if there is Nothing selected send a message, or do the deal... 
     Call MsgBox("There is nothing selected to export!", vbOKOnly, "Nothing selected...") 
    Else 
     frmExport.Caption = "Processing the document...Please be patient!" 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\test.pdf", Quality:=xlQualityStandard, IgnorePrintAreas:=False, DisplayFileAfterPublish:=True 
     'the above Activesheet routine throws "Application-defined or Object-defined error (Run-time error 1004)" 
    End If 

    ThisWorkbook.Sheets(intSheet).Select 

End Sub 
+0

ASHのソリューションが動作するはずです:しかし、私は非常によく、非常に少ないコードで動作する他の場所StackOverflowの上でこの答えを見つけました。 'ReDim'ステートメントに関しては、新しいディメンションにサイズ変更する前に配列の既存のデータを保持するために' ReDim Preserve'を使用しましたか? – EEM

+0

これを忘れてしまった:[ReDim声明](https://msdn.microsoft.com/en-us/library/office/gg251578(v = office.15).aspx) – EEM

答えて

0

だけ...「アプリケーション定義またはオブジェクト定義のエラー(ファイル名を指定して実行時エラー1004)」

VBAのフォーム上のコマンドボタンの次のコード火災を取得します私があなたのExportAsFixedFormatの声明のために考えることができる失敗の理由は、あなたのインストールでオプションDisplayFileAfterPublishが有効になっていないということです(Acrobat Readerがインストールされていない場合は一般的です)。手動でPDFにエクスポートしようとするとチェックすることができ、"open file after publishing"オプションを無効にする必要があります。

は、パラメータDisplayFileAfterPublish削除してください:あなたのポスト内の他の質問については

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\test.pdf", _ 
    Quality:=xlQualityStandard, IgnorePrintAreas:=False 

を、私は、配列内のWorksheetオブジェクトを置くことで何か問題を参照してくださいいけません。しかしSheets(arrSheets).Selectは不正な構成であり、moroverは不要です。 arrSheets引数がシート参照を含む配列であり、それはindicesの配列でなければならないので、不正です。

また、Redimがあなたのために働いていない理由を伝えられません、あなたはそれをどのように使用したかを示していないからです。

+0

空の値を持たないワークシート名の配列。そして、問題は、ActiveSheet.ExportAsFixedFormat ... "アプリケーション定義またはオブジェクト定義エラー(実行時エラー1004)"エラーをスローします。 DisplayFileAfterPublishの引数の有無にかかわらず... Redim Preserve works ... –

-1

これは私のために働く。フォーム上のチェックボックスのtabindexに従ってシート番号で選択しているので、選択したシートが意図したものではないことがOPのオリジナルにもある欠陥を持っています。これをどう修正するかはあなた次第ですが、ここでは範囲外です。ここで何が起こっている

Private Sub CommandButton1_Click() 
    Dim intSelectionNum As Integer 
    Dim bolFound As Boolean 
    Dim ctrl As Control 

    bolFound = True  ' was a checked box found? True = NO 
    intSelectionNum = 0 ' which checkbox is it 

    For Each ctrl In FrmToPDF.Controls 
     If TypeName(ctrl) = "CheckBox" Then 
      intSelectionNum = intSelectionNum + 1 ' set the selection number 
      If ctrl.Value = True Then 
       ThisWorkbook.Sheets(intSelectionNum).Select bolFound 
       bolFound = False ' from now on we extend the selection 
      End If 
     End If 
    Next 

    If bolFound = True Then ' if there is Nothing selected send a message, or do the deal... 
     MsgBox "There is nothing selected to export!", vbOKOnly, "Nothing selected..." 
    Else 
     ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\test.pdf", Quality:=xlQualityStandard, IgnorePrintAreas:=False 
    End If 
End Sub 

:私は、オプションのWorksheets.Selectパラメータを設定するbolFoundをオーバーロードしています - 真の意味は、現在のslectionを置き換え、Falseの手段は、現在の選択範囲を拡張。 bolFoundをTrueとして開始することで、既存の選択をすべて無効にします。 bolFoundはFalseに設定され、後続のシートの選択範囲が拡張されます。私はExcelが私のための選択を管理しているように私は配列を必要としません。

注:ThisWorkbook.Sheets(intSelectionNum).Selectは、一度に1枚のシートしか選択しません(デフォルトはTrue)。チェックされたボックスの数にかかわらず、掲載されたOPのコードは一度に1枚しかエクスポートされません。

Acrobat Reidererがインストールされていて、, DisplayFileAfterPublish:=Trueが私のために働いていましたが、例からその部分を省略しました。

ボーナスの説明:OPのコードと同様に、この例では「ワークシート」ではなく「スプレッドシート」を選択しています。これは、例えば、チャート、Excel4のマクロとダイアログなどが含まれています(ただし、これまでのところ、ほとんどの人にとってChartsは興味があります)。 「シート」を「ワークシート」に変更した場合は、ワークシートのみをエクスポートします。

必須の免責条項:選択したシートをPDFにエクスポートするためのコード例です。広範にテストされておらず、ドロップインソリューションではありません。わたしにはできる。システムによっては、それを調整する必要があるかもしれません。追加する

編集:シートを選択したかを調べるために(例えば、他の目的に使用するように、アレイを構築するために)、あなたがのために/ Nextループが終了した後にこれを挿入することができますが:

dim sht as Object 
For Each sht In Application.ActiveWindow.SelectedSheets 
    Debug.Print sht.Name 
Next 
+0

あなたのコードを試しました。デバッグプリントには選択したシート名が表示され、ワー​​クブックビューでは選択されていることがわかりますが、ActiveSheet.ExportAsFixedFormatに「アプリケーション定義またはオブジェクト定義のエラー(実行時エラー1004)」というエラーが表示されますライン。これは、配列を使用しようとしたときにも起こりました。 –

+0

... DisplayFileAfterPublish:= Trueはエラーの問題には影響しません。 –

関連する問題