2016-04-01 24 views
0

データのリストをループして、要約ページの1つのセルの値を変更するVBAスクリプトをまとめました。そのセルは数式を駆動します。各反復の後、関心のあるセル範囲はPDFとして保存されます。Excel VBAスクリプトの[名前を付けて保存]ダイアログボックスを避ける

私は、それぞれのループで '名前を付けて保存'ダイアログボックスが生成されるたびに手動で入力する必要がないようにするために探しています。このスクリプトをデプロイすると、1k +の繰り返しを見ることができます。

Sub AlterID() 

Dim ws As Worksheet 
Dim strPath As String 
Dim myFile As Variant 
Dim strFile As String 

Set ws = Worksheets("Summary Data") 

For Each c In Worksheets("Data").Range("A2:A11").Cells 
    Worksheets("Summary Data").Range("B1").Value = c.Value 

    strFile = ws.Range("D3").Value 
    strFile = ThisWorkbook.Path & "\" & strFile 

    myFile = Application.GetSaveAsFilename _ 
    (InitialFileName:=strFile, _ 
     FileFilter:="PDF Files (*.pdf), *.pdf", _ 
     Title:="Select Folder and FileName to save") 

    If myFile <> "False" Then 
     ws.Range("D3:H9").Select 
     Selection.ExportAsFixedFormat _ 
      Type:=xlTypePDF, _ 
      Filename:=myFile, _ 
      Quality:=xlQualityStandard, _ 
      IncludeDocProperties:=True, _ 
      IgnorePrintAreas:=False, _ 
      OpenAfterPublish:=False 
    End If 

    Next 

End Sub 
+0

にファイルを保存するために使用するサブありますあなたが手動でそれらを指定していない場合に生成されるファイル名... –

+0

これは知識の私の欠如が出現するところであると思います。ファイルの場所は静的なので、ファイルパスをハードコードすることができます。ファイルの名前は、セルの値から得られます(ここでのように)。 – regularGuy

+0

なぜ 'Filename:= strFile'と' GetSaveAsFilename 'を取り除くのですか? – Jeeped

答えて

1
Sub AlterID() 

    Dim ws As Worksheet, c As Range 
    Dim strFile As String 

    Set ws = Worksheets("Summary Data") 

    For Each c In Worksheets("Data").Range("A2:A11").Cells 

     ws.Range("B1").Value = c.Value 

     strFile = ThisWorkbook.Path & "\" & ws.Range("D3").Value 

     ws.Range("D3:H9").ExportAsFixedFormat _ 
         Type:=xlTypePDF, _ 
         Filename:=strFile, _ 
         Quality:=xlQualityStandard, _ 
         IncludeDocProperties:=True, _ 
         IgnorePrintAreas:=False, _ 
         OpenAfterPublish:=False 
    Next 

End Sub 
0

アプリケーションアラートをオフにしましたか?

Application.DisplayAlerts = False 'before your code 
Application.DisplayAlerts = True 'after your code 

編集1

ここであなたが場所を期待する方法を説明する必要があります、私はPDF

Sub SaveAsPDF() 
Dim myValue As Variant 
Dim mySheets As Variant 

mySheets = Array("Report") 
For Each sh In mySheets 
    Sheets(sh).PageSetup.Orientation = xlLandscape 
Next 

uid = InputBox("Enter your UID") 
uid = StrConv(uid, vbProperCase) 

Application.PrintCommunication = False 
    With Sheets("Report").PageSetup 
     .FitToPagesWide = 1 
     .FitToPagesTall = False 
    End With 
    Application.PrintCommunication = True 

Dim fName As String 
fName = "HMB SOX report for week ending " & ActiveSheet.Range("H4").Text 
Call selectPage("Report") 
With ActiveSheet 
     .ExportAsFixedFormat Type:=xlTypePDF, fileName:= _ 
      "C:\Users\" & uid & "\Desktop\" & fName, :=xlQualityStandard, _ 
     IncludeDocProperties:=True, IgnorePrintAreas:=False, Publish:=False 
End With  

End Subの

+0

私はそれを試みました。問題は、私が考えるように、ティム・ウィリアムズは、ボックスを生成しているGetSaveAsFilename関数を使用しています。理想的にはそれを使用せず、ファイルパスをハードコードし、各ループの動的ファイル名のセルを参照するのが理想的です。 – regularGuy