プロが教える店舗&オフィスのセキュリティ対策術

①印刷するマクロがあります。
②PDFに保存するマクロがあります。

②のPDFに保存する時の印刷範囲の指定を①の範囲にしたいのですがどのようにすればいいのかわかりません・・・。
ご教授いただけますでしょうか。よろしくお願いいたします。


Sub slctCellPrint単価()
Dim 最終セル As String
最終セル = Range("R3").Value
Range("b1", 最終セル).Select
Selection.PrintOut , , Copies:=1
End Sub


Public Sub pdf保存()
Dim SpecNo As String '明細NO
Dim FileName As String

SpecNo = Application.ActiveWorkbook.Worksheets("荷捌表FAX").Range("B5").Value
FileName = SpecNo & "__" & Range("S7") & "__" & Format(Now(), "yyyy-mm-dd-hh-mm")
Application.Dialogs(xlDialogSaveAs).Show FileName, &H39
End Sub

A 回答 (5件)

こんなふうにしたらどうでしょうか?



'//標準モジュール
Sub pdf_Convert()
 Dim SpecNo As String '明細NO
 Dim strLastCell As String
 Dim Rng As Range
 Dim FName As String

 With Worksheets("荷捌表FAX")
  strLastCell = .Range("R3").Value '←普通はこのような書き方はしない
  If strLastCell = "" Then Exit Sub
  Set Rng = .Range("B1", strLastCell)
  .PageSetup.PrintArea = Rng.Address

  SpecNo = .Range("B5").Value
  FName = SpecNo & "_" & .Range("S7") & "_" & Format(Now(), "yyyy-mm-dd-hh-mm")
  .ExportAsFixedFormat Type:=xlTypePDF, FileName:=FName
 End With
End Sub
    • good
    • 0
この回答へのお礼

出来ました!!
ありがとうございます。

もう一つお聞きしてもよろしいでしょうか。
指定のフォルダー(W1にアドレス入力)に自動保存する場合も教えて頂ければ幸いです。
よろしくお願いいたします。

お礼日時:2017/10/05 02:50

PrintOut メソッドは Range.PrintOut と書くので


Range("b1", 最終セル).PrintOut
と書けばすっきりする。
https://msdn.microsoft.com/ja-jp/library/office/ …

PDF 出力は ●.ExportAsFixedFormat xlTypePDF, ファイルパス, xlQualityStandard, True, True のように書きます。
●の部分は Workbook, Sheet, Chart, Range のいずれかが使用可能なので
Range("b1", 最終セル).ExportAsFixedFormat xlTypePDF, ファイルパス, xlQualityStandard, True, True
と書けます。
https://msdn.microsoft.com/ja-jp/library/office/ …

両方とも同じ Range オブジェクトを使えますので、

Private Sub 印刷(aRange As Range)
  aRange.PrintOut
End Sub

Private Sub PDF出力(aRange As Range, aFilePath As String)
  aRange.ExportAsFixedFormat xlTypePDF, aFileName, xlQualityStandard, True, True
End Sub

というようなプロシージャを二つ書き、適宜呼び出してやればよいのではないでしょうか。
プロシージャにしなくても、Range およびファイル名を決定するコードと同じプロシージャ内に書き、要求に応じて処理を分岐してやるのでもよいかと。
    • good
    • 0

>指定のフォルダー(W1にアドレス入力)に自動保存する場合も教えて頂ければ幸いです。



自動保存というと、本来は二つの意味がありますが、
今思いつくのは、ファイルの名前の前にフォルダー名を入れて、そのフォルダーに入れるという意味では、このようなスタイルになります。
もし、そういう意味でなかったら、またご連絡ください。

Dim myFolder As String '変数の宣言を加える
'-----------
SpecNo = .Range("B5").Value '既存の行
'この下から、差し替え
myFolder =Range("W1").Value
If Right(myFolder,1)="\" Then myFolder & "\"
  FName = myFolder & SpecNo & "_" & .Range("S7") & "_" & Format(Now(), "yyyy-mm-dd-hh-mm")

p.s. 最近、私もPDF の操作をマクロでよく使っています。番号が紛らわしいのと、かなりの数量なので、Excelの一覧をダブルクリックして、PDFを開けるように変えました。
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます!
変更してみたところ、
"\" Then myFolder& "\"
のmyFolderが青くなり、コンパイルエラーSub、functionまたは、Propertyが必要です。
と出まして、うまくいきませんでした・・・。

教えてくださいです。

お礼日時:2017/10/05 22:57

すみません。


myFolder =Range("W1").Value
If Right(myFolder,1)="\" Then myFolder & "\"

これは、変でした。オンライン書きでしたので、間違えました。
要するに、myFolderの末尾は、「\」にしてください、という意味なのに、これでは意味が違ってしまいました。
If Right(myFolder,1)<>"\" Then myFolder & "\"

右の末尾が「\」でなかったら、「\」をつけなさいというコードです。
    • good
    • 0
この回答へのお礼

なんどもすいません。
構文エラーと出ます・・・。

Sub pdf_Convert()
Dim SpecNo As String '明細NO
Dim strLastCell As String
Dim Rng As Range
Dim FName As String
Dim myFolder As String

With Worksheets("荷捌表FAX")
strLastCell = .Range("AI3").Value
If strLastCell = "" Then Exit Sub
Set Rng = .Range("B1", strLastCell)
.PageSetup.PrintArea = Rng.Address

SpecNo = .Range("B5").Value
myFolder = .Range("W1").Value
If Right(myFolder, 1) <> "\" Then myFolder & "\"  →エラーはこの部分を指しています。
FName = myFolder & SpecNo & "_" & .Range("S7") & "_" & Format(Now(), "yyyy-mm-dd-hh-mm")
.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FName

End With
End Sub

お礼日時:2017/10/06 13:13

何度もすみません。



オンラインはいけませんね。(^^;

If Right(myFolder, 1) <> "\" Then myFolder = myFolder & "\"
でした。ダウンロードシステムの、ちょっと久々の大作を作った後だったので、気が緩んでいました。
    • good
    • 0
この回答へのお礼

出来ました!!!
大作を作られてホット一息のところ、ありがとうございました。
ダウンロードシステム、どんなのかすごく興味あります!
お仕事お疲れさまでございました。

お礼日時:2017/10/07 03:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!