TOP > blog > VBSをドラック&ドロップ対応化で作業の効率化
スクリプト
2018/01/18

VBSをドラック&ドロップ対応化で作業の効率化

管理者用
blog

去年に印刷関連の展示会に行った時に、出展のメーカーから、ある自動化ツールの説明をお聞きしました。
これらのツールは、ドラック&ドロップ操作やホットホルダーを使っており非常に操作性が良いのです。
説明を聞きながら、私の頭の中に、弊社での作業の進め方の改善方向がぼやーっと浮かんで来てのです。
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   
'==================================

関連記事