入力欄がない「神PDF」様式の届出書申請書へAdobeReaderとExcelだけで入力フォームを作成
(起案中)
1 目的
神エクセルは一般化したが、「神PDF」というのもある。ここでいう「神PDF」とは、官公庁で要求される届出書や申請書のうち、PDFフォームフィールドがが設けられていないPDF(AdobeAcrobatなどのソフトがなければ、いわばただの図)で提供されるものを言う。実務で扱いやすいWordやExcel形式では提供されておらず、神PDFだけで様式が提供されているケースが依然として存在する。その場合への対策を記録する。
2 PDF→Excelへ貼り付ける。
adobeReaderの「編集」>「スナップショット」から、入力フォームに使いたい部分をコピーしてエクセルシートに貼り付ける。
図の背景色を透明化しておくと、エクセルシートに馴染む。そこで、貼り付けた図をクリック>「図の書式設定」(「図の形式」)>「色」>「透明色を指定」>透明にしたい、図の背景色部分をクリックする。
3 テキストボックスを図の上に配置する。
貼り付けた図の上にテキストボックスを配置。入力対象の項目欄の上にすべてテキストボックスを配置する。たとえば、入力対象が3か所あるとすれば、3項目のテキストボックスを置く。なお、図形を選択して[Ctr]+[D]で図形を簡単に複製できる。
(あとで、テキストボックスを右クリックして、プロパティの背景色を「なし」に、枠線を「なし」にすれば貼り付けた図に直接入力したように見える)
4 エクセルシート上に入力フォームを作る。
たとえば、A列を空列、B列を見出し、C2:C5エリアを入力用セル、C8:C10セルを出力用セル、D列を空列、E列以降に図を貼り付けるとする。ここでは、C列については、C2:C5セルの入力規則や表示形式を設定し、C8:C10セルに数式や表示形式を設定したとする。
5 テキストボックスに計算結果を表示させる。
たとえば、出力用セルC8セルの内容を表示させるなら、対象のテキストボックスをクリックしてから、数式バーに「=C8」と入力する。他のC9、C10も同じ。
図、テキストボックスのサイズ、位置、文字フォントを調整。図、テキストボックスをすべて選択してグループ化しておくとよい。必要に応じて、テキストボックスのプロパティから背景色の「塗りつぶし」と「枠線」を「なし」に設定する。
6 VBEでコードを書く。
(1)標準モジュール
起動時に、最大ウインドウサイズにして、入力フォーム内のセルを選択しておく。
Sub Auto_Open() 'ウインドウサイズを最大化 ActiveWindow.WindowState = xlMaximized '入力フォームの先頭セルを選択 [C2].Select End Sub
(2)シートモジュール
データ入力用のセル範囲を選択状態にするイベントで、Enterキーでくるくるループして入力できるようにする。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'セル範囲C2:C5のどれかを選択した場合 If Not (Intersect(Target, Range("C2:C5")) Is Nothing) Then '新規イベント発生停止。SelectionChangeの二重起動防止 Application.EnableEvents = False 'セル範囲C2:C5を選択 Range("C2:C5").Select '操作者が選択したセルをアクティブにする。 Target.Activate '新規イベントの受付再開 Application.EnableEvents = True End If End Sub
(2)-2後から見直したら、C5セルでエンターを押したらC2セルに戻すマクロ(シートモジュールでworksheet_change)で十分な気がした。
(2)-3さらに後から見直したら、セル範囲をselectしておくと、入力を間違えてEnterやTabを押した後、backTabで1つ前のセルに戻れるのが良い点だった。