[SQL] PATDATAを活用しよう(3)
宛名等差し込み印刷
今までは、Microsoft ExcelのVBAを使って本日期限や、案件検索といったPATDATAの活用法を紹介してきました。今回は、Microsoft Wordの差し込み印刷機能を使って宛名、件名等の入力を自動化する機能を紹介します。Excelが、期限管理等のデータの一覧性に優れたソフトなら、Wordは、正に手紙等の文書作成に秀でたソフトではないでしょうか。
利用シーン
特許事務所では、問合わせ、確認、及び報告等出願人とのやり取りが必須です。カバーレター等は、テンプレート化されているとは思いますが、カバーレターを作るには、各案件の出願番号や、整理番号、及び発明の名称等を入力して、案件を特定しなければなりません。その際にいちいち手で入力していたのでは、入力ミスがなかったのかもう一度見直す手間が発生します。
そこで今回は、PATDATAのデータベースから直接出願番号等を取り込む機能を紹介します。
Microsoft Wordの差し込み印刷
差し込み印刷の詳しい説明は、Wordのマニュアルをご確認いただくか、Google等で検索していただけるようお願いします。簡単に差し込み印刷機能を紹介すると、Word文書にExcelやAccessのデータベースなど、データ一覧になっている文書やDBから、そのフィールドのデータを1レコードずつ読み込んで表示する機能です。Excelに住所録などを作っている場合、宛名、住所、電話番号の1レコードずつを表示してくれる機能です。
Visual Basic 部分
それでは、まずWordのVBAコードを見ていきます。Excelと同様に、Alt + F11を押して、VBエディターを立ち上げます。左側にツリービューが表示されるので、スクリプトを記載する[Microsoft Word Objects] > [This Document]をクリックして、表示されたコード記入部分に以下のスクリプトをコピペします。
Sub numberSearch2()
Dim objDoc As Word.Document '差し込みを行うWord文書のオブジェクト
Dim strSQL As String
Dim strNum As String
'テキスト入力領域を表示
strNum = InputBox("整理番号を入力してください。")
If strNum = "" Then
Exit Sub '入力がなかった場合、終了
End If
' 入力された文字を基づいて案件を検索
strSQL = "Select M受付.当方整理番号, M出願手続.名称・日本語 As 発明の名称, M出願手続.出願日 From M出願準備 Inner Join M受付 On M出願準備.SYSID = M受付.SYSID Inner Join M出願手続 On M受付.SYSID = M出願手続.SYSID Where M受付.当方整理番号 Like '%" & strNum & "%' And M出願準備.国コード = 'JP' And M出願準備.法域コード = '01'"
' 選択されている文書の差し込み印刷機能を利用する。
Set objDoc = Application.ActiveDocument
If Len(strSQL) > 256 Then
Exit Sub
End If
'# 整理番号と、発明の名称と、出願日とを取得し、フィールドに反映する
With objDoc.MailMerge
.OpenDataSource Name:="", _
Connection:="DSN=PDWREAD", _
SQLStatement:=strSQL, _
SubType:=wdMergeSubTypeWord2000
.ViewMailMergeFieldCodes = False
End With
' Word文書の変数を解放する
Set objDoc = Nothing
End Sub
InputBox()関数を使って、ユーザーからの入力を受け付ける部分は、前回の案件検索と同様です。異なるのは、タイトルが、Microsoft Excelから、Microsoft Wordになっているくらいでしょうか。ユーザーからの入力を待ち受ける点では、同じで、なんら変わりはありません。
「Dim objDoc As Word.Document」及び「Set objDoc = Application.ActiveDocument」で差し込み印刷を行うWord文書を特定します。今回は、現在開いている文書を選んでいます。 「With objDoc.MailMerge」から「End With」の部分が、差し込み印刷の設定部分です。ExcelのときのようにODBC経由でデータベースにアクセスします。SQLStatementにSQL文を代入します。今回は、strSQLの文字列を256文字で制限しています。実は、差し込み印刷を行うためのMailMergeのSQL文の長さが256文字と制限されているために文字列の長さをチェックしています。256文字は以外に短く、PATDATAのテーブルは、構成が細かく分けられている(設計としては正しいと思うのですが)ので様々なテーブルをJoinせざるを得ないため意外とこの256文字制限にひっかかってしまいます。かなり厳しい制約だと思います。レター毎にSQLを用意する必要があると思います。
SQL部分
SQL部分は、前回の案件検索と同じです。入力文字「A1」に対して、整理番号、発明の名称、及び出願日を出力します。
Select M受付.当方整理番号, M出願手続.名称・日本語 As 発明の名称, M出願手続.出願日
From M出願準備
Inner Join M受付 On M出願準備.SYSID = M受付.SYSID
Inner Join M出願手続 On M受付.SYSID = M出願手続.SYSID
Where M受付.当方整理番号 Like '%A1%'
And M出願準備.国コード = 'JP'
And M出願準備.法域コード = '01'
Word差し込み印刷
次に、Wordの差し込み印刷機能の説明です。まず、上記マクロを実行します。次に、WordのリボンUIの[差し込み文書]の[差し込みフィールドの挿入]をクリックします。すると、検索結果の当方整理番号、発明の名称、及び出願日が、タイトルとして表示されるので、それぞれ挿入していきます。今回は、飾り気のないWordに貼り付けていますが、レターとして成型し、タイトルが適切な位置に入るように設定してください。以上で差し込み印刷設定も終了です。
結果表示
では、[結果のプレビュー]をクリックしてみましょう。検索結果の第一候補が表示されています。[結果のプレビュー]の隣にあるコントロールのようなボタンで検索結果の案件を前後に送ることができます。コントロールで前後に動かすと、整理番号、発明の名称、及び出願日も変化します。同じ内容のレターをどんどん作成できます。しかもミスなしに。
PATDATAを導入したら、思いきり使いまくるのはいかがでしょうか。しかもInterSystemsのドライバーは無償で提供されています。PATDATA自体は、全PCにインストールできませんが、ドライバーは、可能です。是非、活用しましょう。
では、「PATDATAを活用しよう」第3回は、これにて終了です。