2017-10-09 8 views
0

このサイトの類似するインスタンスに関するいくつかの質問が見つかりましたが、解決策はありませんでした。スクリプトが一度動作したら、ランタイムエラー '1004'で停止しました

私の目的は、ユーザーがスプレッドシート内のボタンをクリックし、a)ワークブック全体をローカルに保存するか、b)ブックの一部のみをPDFに書き出すことができるようにすることです。

"名前を付けて保存"のコードはうまく動作し、pdfコードへの書き出しは一度動作してから動作を停止しました。コードは以下の通りです:

Option Explicit 

Sub Button1_Click() 

Dim workbook_file_name As String 
Dim datasheet As String 
Dim saveworkbook As Double 
Dim PDFdata As Object 

saveworkbook = MsgBox("Would you like to save a local copy of entire workbook? Click No to only store as PDF", vbYesNo, "Save File As") 

If saveworkbook = vbYes Then 

    workbook_file_name = "Sherman and Reilly Brake Test" 

     With Application.FileDialog(msoFileDialogSaveAs) 
      .InitialFileName = CreateObject("WScript.Shell").Specialfolders("My Documents") & "\" & workbook_file_name 
      .FilterIndex = 2 

       If .Show Then .Execute 
     End With 

    GoTo noPDF 

Else 

    GoTo exportsheet 

End If 

exportsheet: 

datasheet = "C:\Brake_Test_Data.pdf" 

If Dir(datasheet) <> vbNullString Then 
    Kill datasheet 
End If 

Set PDFdata = Sheets("Data Sheet").Range("A93:I138") 

With PDFdata 

    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=datasheet, _ 
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 


End With 

noPDF: 

End Sub 

PDFデータの変形にも疲れました。問題は、ここに表示されます。

.ExportAsFixedFormat Type:=xlTypePDF, Filename:=datasheet, _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

私はファイル名を指定して実行時エラー1004および文書が保存されませんでしたし、文書が開いているであってもよいし、保存中にエラーが発生したというメッセージボックスを取得します。 YowE3K @

+0

VBA I/Oの専門家ではありませんが、ファイルが既に存在するためではありません。 – Casey

+0

@Casey私はこれを考えています。そのため、ディレクトリ検索を追加しました。それでも、スクリプトが動作したときに最初のpdfファイルがなくなったため、そのファイルは存在しなくなりました。 – ThirstyVoltage

+0

私はあなたのコードを取り、 'saveworkbook = ...'から 'exportsheet:'まですべてを削除し、それを走らせました。私はそれを何度も実行するのに苦労しませんでした(私は、実行ごとにAcrobat Readerを閉じることを覚えていました)。 – YowE3K

答えて

0

、私は私がやったこと

Option Explicit 

Dim workbook_file_name As String 
Dim datasheet As String 
Dim saveworkbook As Double 
Dim PDFdata As Range 
Dim mydocuments As Object 
Dim saveto As String 

Sub Button1_Click() 


saveworkbook = MsgBox("Would you like to save a local copy of entire workbook? Click No to only store as PDF", vbYesNo, "Save File As") 

If saveworkbook = vbYes Then 

    workbook_file_name = "*****" 

     With Application.FileDialog(msoFileDialogSaveAs) 
      .InitialFileName = CreateObject("WScript.Shell").specialfolders("My Documents") & "\" & workbook_file_name 
      .FilterIndex = 2 

       If .Show Then .Execute 
     End With 

    GoTo noPDF 

Else 

    GoTo exportsheet 

End If 

exportsheet: 

Set mydocuments = CreateObject("WScript.Shell").specialfolders 
saveto = mydocuments("mydocuments") 
Set PDFdata = Sheets("Data Sheet").Range("A93:I138") 

With PDFdata 

    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=saveto & "\*****.pdf", _ 
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 


End With 

noPDF: 


Sheets("Data Sheet").Protect Password:="*****" 

End Sub 

それを考え出したことは、コードがセットmydocsとフォルダが文字列としてで見つけていました。助けてくれてありがとう!

関連する問題