VBSをドラック&ドロップ対応化で作業の効率化
管理者用去年に印刷関連の展示会に行った時に、出展のメーカーから、ある自動化ツールの説明をお聞きしました。
これらのツールは、ドラック&ドロップ操作やホットホルダーを使っており非常に操作性が良いのです。
説明を聞きながら、私の頭の中に、弊社での作業の進め方の改善方向がぼやーっと浮かんで来てのです。
VBSやエクセルVBAなどを使った、チョットしたツールを作っているのです。
これらを
ドラック&ドロップ
ホットホルダー
・・・・・を使って、操作性の向上が出来るのではと思ったわけです。
その時からだいぶ時間が経ったのですが、試しに ”PDF_In_A4_1面.vbs” を作って見ました。
ドラック&ドロップに関しては
ドラックして実行する記事は、このNAVIの中で既に紹介した事がありました。
⇒ 写真の整理は削除・削除・が基本。しかし、ファイル名変換スクリプト(VBS)で簡単整理(2)
これを参考に、pdfファイルをインデザイン配置する VBスクリプトを書いてみました。
”PDF_In_A4_1面.vbs” 操作手順
VBSファイルをデスクトップ上に配置
ファイル名を PDF_In_A4_1面.vbs としてます。
インデザインに配置したいPDFファイルをVBSファイル上にドラック
ドラックしたファイルが、PDFファイル場合は、メッセージを表示
[OK] にて インデザインが開く
pdfファイルの取り込みたいページ範囲を指定します。
[OK] にて pdfファイルをページ毎に取り込んでいく
pdfファイル名を参考に ”1面” を追加したインデサインファイル名で保存
保存先は、ドラックしたpdfファイルと同じフォルダー内
スクリプトは、ファイルを開いた状態で終わる
PDF_In_A4_1面.vbs スクリプト
PDF_In_A4_1面.vbs ファイルには、メインルーチンとサブルーチンに分けて書いてます。
メインルーチンは、ドラックしたファイルが、pdfファイルである事を調べるルーチンです。
もし、pdfファイルの場合、サブルーチンに処理を移します。
サブルーチン側で、インデザインへの取り込みを行っています。
スクリプトの改造
VBSを少し書換えるだけで、色々な処理が可能となります。
興味のある方は、参照ください。
PDF_In_A4_1面.vbs メインルーチン
'============================
Set objArgs = WScript.Arguments
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWSHShell = CreateObject("Shell.Application")
select case objArgs.Count
case 0
msgbox "PDFファイルをドラック&ドロップしてください"
case 1
myFileName = WScript.Arguments(0)
Set objFiles = objFSO.GetFile(myFileName)
if lcase(right(myFileName,3)) = "pdf" then
vret = msgbox("このPDFファイル(" & objFiles.name & ")を取込みますか?",vbokcancel)
if vret = vbok then
Rem ここに処理を記述==================================
Call PDF_File_In(objFiles)
Rem ここ迄に処理を記述=================================
else
msgbox "中止しました。"
end if
else
msgbox "ドロップしたファイルは(" & objFiles.name & ")",,"PDFファイルでは無いようです。"
end if
Set objFiles = Nothing
case else
msgbox "ドラック&ドロッは、1ファイルだけにして下さい。"
end select
Set objParentFolder = Nothing
Set objArgs = Nothing
Set objFSO = Nothing
WScript.Quit
'============================
PDF_In_A4_1面.vbs サブプーチン
'=============================================================
Sub PDF_File_In(objFiles)
folder_kaiso = left(objFiles.path , len(objFiles.path) - len(objFiles.name) - 1)
FolderNAME = Split(folder_kaiso,"\") '\フォルダー階層区切りの¥マークでSPLIT
FolderRetu = UBound(FolderNAME) 'フォルダー階層数
imgFilena = FolderNAME(FolderRetu)'画像ファイルのフォルダー名を取得
myFileName= objFiles.path
Set myInDesign = CreateObject("InDesign.Application") 'インデザインを起動する
Set myDocument = myInDesign.Documents.Add 'ファイルを指定しない
Me_size_GH= 297 'インデザインドキメントサイズ縦
Me_size_GY= 210 'インデザインドキメントサイズ横
Rem ドキュメントのサイズセット
With myDocument.DocumentPreferences
.PageHeight = Cstr(Me_size_GH) & "mm"
.PageWidth = Cstr(Me_size_GY) & "mm"
.FacingPages = False
'***********************************************************
Rem 裁ち落とし
.DocumentBleedBottomOffset = "3p"
.DocumentBleedTopOffset = "3p"
.DocumentBleedInsideOrLeftOffset = "3p"
.DocumentBleedOutsideOrRightOffset = "3p"
Rem 印刷可能領域
.SlugBottomOffset = "20mm"
.SlugTopOffset = "20mm"
.SlugInsideOrLeftOffset = "20mm"
.SlugRightOrOutsideOffset = "20mm"
End With
stpege = InputBox("PDF読みとり開始ページ", "PDFスタートページ", "1")
edpege = InputBox("PDF読取り終わりページ", "PDF終了ページ", "4")
stpege = CInt(stpege)
edpege = CInt(edpege)
stno1 = 0
If stpege = 1 Then
stno1 = 1
End If
For outpege = 1 To edpege - stpege + 1 Step 1
myInDesign.PDFPlacePreferences.PageNumber = stpege
Set myTextFrame = myDocument.Pages.Item(outpege).TextFrames.Add
haichi_1_YS = 0 + ym
haichi_1_XS = 0 + xm
haichi_1_YE = 297 + ym
haichi_1_XE = 210 + xm
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
Set myPDFset = myTextFrame.Place(myFileName) ', Array(-6, -20))
Set myPDFset = myPDFset.Item(1) '
actpag = myPDFset.PDFAttributes.PageNumber
If stno1 = 1 Then
stno1 = 0
Else
If actpag = 1 Then
Exit For
End If
End If
myDocument.Pages.Add
myTextFrame.Fit (1667591779)' (&H63656E63)idFitOptions.idCenterContent
stpege = stpege + 1
Next
myDocument.Pages.Item(-1).Delete
write_myFileName = Replace(myFileName, ".pdf", "")
myInDesign.ActiveDocument.Save write_myFileName & "_1面.indd"
End Sub
'==================================