[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイル名をシート名に変更する』(zunzun)
いつもお世話になっております。
下記のマクロを作成して、ドキュワークスプリンターへの印刷ができています。印刷後のファイル名は、エクセルのファイル名になっています。これを
シート名(G4セル)に変更したいのですが、方法が良く分かりません。何かヒントを頂けないでしょうか?
Sub 保存()
If MsgBox("経費精算管理番号を入力ましたか?シートコピーを実行しますか?", vbOKCancel) = vbCancel Then
Exit Sub
End If
'OKの場合の処理
Worksheets("作成シート").Copy after:=Worksheets(Worksheets.Count) ' 末尾にコピー
ActiveSheet.Name = Range("G4") ' シート名を管理番号に変更
Dim pn As String
pn = Application.ActivePrinter
ActiveSheet.PrintOut , ActivePrinter:="DocuWorks Printer"
Application.ActivePrinter = pn
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
(隠居じーさん) 2018/12/25(火) 16:44
SaveAsメソッド を調べてみてください。 (TAKA) 2018/12/25(火) 17:20
これかな?
でも、シートをコピーして〜〜ってなると、自動化できないですもんね。 デフォルトで保存されるなら、あとで名前を変えてしまえという発想で、こんなのいかがですか?
Sub 保存()
Dim DefaultPrinter As String
Dim FilePath As String
Dim SheetName As String
Const FolderPath As String = "C:\Users\" '◆ここのパスをDocuWorks Printerの保存先に変更してください。
FilePath = FolderPath & ThisWorkbook.Name
If MsgBox("経費精算管理番号を入力ましたか?シートコピーを実行しますか?", vbOKCancel) = vbOK Then
'シート名の取得、コピー
With Sheets("作成シート")
SheetName = .Range("G4").Value
.Copy after:=Sheets(Sheets.Count) ' 末尾にコピー
End With
'使用中のプリンターを記録
'コピーしたシート名の変更 #同名シートのチェック無し
'シートをDocuWorks Printerで出力
'アクティブプリンターを戻す
DefaultPrinter = Application.ActivePrinter
With Sheets(Sheets.Count)
.Name = SheetName ' シート名を管理番号に変更
.PrintOut , ActivePrinter:="DocuWorks Printer"
End With
Application.ActivePrinter = DefaultPrinter
'名前の変更 #同名のファイルチェック無し
Name FilePath As FolderPath & SheetName
End If
End Sub
(稲葉) 2018/12/25(火) 17:40
若干強引ですが、方針は2つ考えられると思います。
1.ワークブック自体を目的の名前にSaveAsしてから印刷して、元の名前にSaveAsで戻す方法
2.とりあえず印刷して、印刷されたファイルをリネームする方法
3.DocuWorksAPIを使用する方法
1については文字通りのシンプルな方法で、スピードは遅いですが一番カンタンです。
2についてはDocuWorksの印刷が非同期なので「印刷が完了した」ことを検知する難易度高いです。
たとえば、稲葉さん方式ではNameステートメント実行前にDo〜Loopで目的のファイルが生成されファイルのロックが解除されるまでを監視するループが必要です。
しかしDocuWorksの方で特定文字を切り落とすとか改名する処理が入っていると、永久に生成されませんから無限ループ対策も必要になります。
その辺の勝手な変更を防ぐため、まずDocuWorksプリンタの印刷設定のオプションをいくつかOFFにしておくほうが良いと思います。色々試してみて下さい。
印刷に失敗して強制終了した場合も考える必要があります。
3がおそらく最適解なのですが私もやったことがないのでわかりませんが、検索すると少しだけサンプルが出てきたので、かなり頑張れば出来るかもしれません。
(名無し) 2018/12/25(火) 18:38
そして、私には稲葉さんのようにファイル名の方を変更するという発想がなかったので。ブック名の方を何とかしてしまおうと、以下のように考えてみました。
Sub 保存_改()
Dim MySTR As String
Dim pn As String
Dim MyFile As String
Dim i As Integer
If MsgBox("経費精算管理番号を入力ましたか?" & vbCrLf & _
"シートコピーを実行しますか?", vbOKCancel) = vbCancel Then Exit Sub
'OKの場合、処理を継続
MySTR = Worksheets("作成シート").Range("G4").Value
Worksheets("作成シート").Copy after:=Worksheets(Worksheets.Count) ' 末尾にコピー
' 末尾にコピーされたシートの処理
With Worksheets(Worksheets.Count)
.Name = MySTR ' シート名を管理番号に変更
.Copy '末尾のシートを新規ブックへコピー
End With
'シートコピーで作成された新規ブックの処理
With Workbooks(Workbooks.Count)
'新規ブックに名前を付けて保存して、フルパスを変数に格納
.SaveAs Filename:=ThisWorkbook.Path & "\" & MySTR
MyFile = .FullName
'ドキュワークスの処理
pn = Application.ActivePrinter
.Worksheets(1).PrintOut , ActivePrinter:="DocuWorks Printer"
Application.ActivePrinter = pn
'ブックを閉じる
.Close
End With
'用済みになったブックの削除処理
i = FreeFile
On Error Resume Next
Do
Err.Clear
DoEvents
Open MyFile For Append As #i
Close #i
Loop While Err.Number > 0
On Error GoTo 0
Kill MyFile
End Sub
結果として、名無しさんの1案に近いですかね。
このほか気になるのは、お使いのバージョンがExcel2010ということなので、標準でFDF形式保存できる機能が追加されているとおもいます。
なので、単純にPDFファイルがほしいだけとかだったら、そちらで対応できちゃうような気がしなくもないです。
既に検討した結果NGだったということであれば余計な一言失礼しました。
(もこな2) 2018/12/26(水) 01:20
ただのPDFなんですか? であれば、エクスポートでいいんでは?
Sub 保存()
Dim SheetName As String
Const FolderPath As String = "C:\Users\" '◆ここのパスをDocuWorks Printerの保存先に変更してください。
If MsgBox("経費精算管理番号を入力ましたか?シートコピーを実行しますか?", vbOKCancel) = vbOK Then
'シート名の取得、コピー
With Sheets("作成シート")
SheetName = .Range("G4").Value
.Copy after:=Sheets(Sheets.Count) ' 末尾にコピー
End With
'コピーしたシート名の変更 #同名シートのチェック無し
'シートをPDFでエクスポート #問答無用で上書き
'https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook.exportasfixedformat
With Sheets(Sheets.Count)
.Name = SheetName ' シート名を管理番号に変更
.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=FolderPath & SheetName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End With
End If
End Sub
(稲葉) 2018/12/26(水) 08:32
(zunzun) 2018/12/26(水) 10:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.