- ベストアンサー
Word文書に必須入力項目を設けたい
[要望概要] Word文書のマクロ機能を用いて、文書中の特定の個所に必須入力項目を設けたいのですが、どのようにマクロを記述すれば良いのか分かりません。 [要望詳細] 特定個所(例えば、「名前:_____」と言う欄の下線部分)に何かが入力されていなければ、文書の保存が出来ないようにしたい。 あるいは、Word起動時にマクロで必須入力個所の入力を促し、入力を行なわなければいかなる操作も受け付けないようにしたい。 (完全に上記機能を実現できなくとも、類似機能があれば教えていただきたい) かなり調べたのですがどうしても分からず、ここで質問させていただきました。 ご存知の方がいらっしゃいましたらお手数ですが教えていただけますでしょうか。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
私がよく使う手法ですが、パスワード付きでブック保護したまま保存しておき、マクロでブック保護を解除するようにすれば、マクロを無効にして立ち上げた時は自動的に文書の改編ができません。また、文書中の決められた行(たとえば1行目)に「マクロを有効にして起動してください」などと記述しておけば、マクロを無効にしている時のメッセージの代わりになります。マクロが有効の場合は、マクロを使ってその行の記述を削除すれば良いですね。 次の例は文書を開く時に一行目に氏名を入力するマクロです。新規文書の1行目に「マクロを有効にして起動してください」と記述して、ブック保護(パスワード"aaa")として、次のマクロ(Document_Openイベントプロシージャ)を記述して保存します。 最初に文書を開くとき氏名入力を催すInputBoxが表示され、InputBoxが空欄でなければ、Unprotectメソッドでブック保護を解除して、InputBoxに入力された内容が文書の1行目を書き換えます。文書の1行目にはあらかじめ「マクロを有効にして起動してください」と記述してたので、もしマクロを無効にして立ち上げた場合はこの表記が残り、ブック保護も継続されます。 Private Sub Document_Open() Dim myName On Error GoTo ERRHAND With ActiveDocument .Unprotect Password:="aaa" If .Paragraphs(1).Range Like "氏名 : " & "*" = True Then Exit Sub .Protect Password:="aaa", NoReset:=False, Type:= _ wdAllowOnlyFormFields myName = InputBox("氏名を入力してください" & Chr(13) _ & "記入されなかった場合は文章の編集ができません") If myName = "" Then Exit Sub .Unprotect Password:="xxx" With .Paragraphs(1).Range .Delete .InsertBefore "氏名 : " & myName End With End With Exit Sub '以下エラー処理 ERRHAND: End Sub なお、マクロの知識がある人はマクロ内のブック保護パスワードが見れますので、プロジェクトの非表示・ロックとパスワード保護が必要です。
その他の回答 (3)
- tokpy
- ベストアンサー率47% (1313/2783)
こんばんは。あれから少し考えてみたのですが,なかなか良いアイデアが思いつきません。 というより,「何かが入力されていなければ」という条件では,例えばスペースを1個入力しても「入力された」とみなされ,処理が続いてしまうような気がします。それでは意味がないですよね。 例えば,(実際にできるかどうか実験したわけではないのですけど)マクロで実行させ最後に特定の文字列を追加するとか,フォントのサイズや種類をぱっと見た目にはわからないようにマクロで変更するとかいう方法をとれば,マクロを無効にしたときとは結果が異なります。 Excelで入力させて後で差込印刷で印刷する,とかいうような方法もあるかもしれません。 でもいずれの方法でも,入力者がいい加減な情報を入力しても判別できないので,やっぱりチェックは人が行なったほうがいいのかな,と思いました。
お礼
ご回答ありがとう御座います。 入力内容のチェックに関しましては、確かにスペース1つでも意味不明な文章でも入力されたものとしてパスしてしまいます。しかしながらその点は入力者の責任できちんと入力させる運用を取らせるつもりでいます。(つまり、必ず入力しなければいけない項目を入力者に伝える&入力誘導させる機能があれば良いのであって、入力内容まではチェックできなくても問題ない) 、、と言うところであります。 やはり現実的な方法は、Word起動直後にマクロで各必須入力項目の入力を促すポップアップウインドウ(テキスト入力エリア付き)を表示し、そこに何かを入力してOKボタンをクリックしなければ先に進めないものとするのが一番手っ取り早く、入力漏れも無くできるのかなと思っております。 もし他にも何か良い案をお持ちの方がいらっしゃいましたらご指南よろしくお願いします。 コメントなども歓迎です。
- tokpy
- ベストアンサー率47% (1313/2783)
ちょっと質問の内容とは違うのですが,記入漏れをさせたくない,という場合,このような方法もあります。 (1) メニューの「表示」→「ツールバー」→「フォーム」をチェックして「フォームツールバー」表示させる。 (2) 普通に文書を作成し,名前など,入力してもらいたいところで「ab」というアイコンをクリックして,「テキストボックスフォームフィールド」を挿入する (3) 挿入したフィールドをダブルクリックして,最初に表示させたい文字列等を設定する。 (4) 文書ができたら,「フォームツールバー」の鍵のアイコンをクリックすれば,灰色(テキストボックスフォームフィールド)以外のところが変更できなくなります。 (5) メニューの「ツール」→「文書の保護」で,「フォームフィールド」を保護の対象外にして文書を保護すれば,それ以外のところが勝手に書き換えられるのを防ぐことができます。 この方法だと,入力しないといけないところが灰色で表示されているので,見落としが少ないです(灰色そのものは印刷されません)。ただし,未入力でも保存などはできてしまいます。マクロで専用の入力フォームとかを作ってもいいかもしれませんが,基本的にマクロは無効にできるのでユーザーに変更できないようにするのは難しいかもしれません。
お礼
ご回答いただき有難う御座います。ご指南いただいた方法を用いますと、定型部分の勝手な変更を許さないように設定できると言うことですね?早速試してみたところ大変有用であると実感しました。 ただ今回は最も重要な要件が「必須入力項目の入力チェック」ですので、まずはそちらの機能の充足を優先させたいと考えております。 しかしながらtokpy様に教えていただいた方法も合わせて定型文書を作成したいと考えます。この度は大変貴重な情報を有難うございました。 この質問に対してのご回答を引き続き募集しております。 何卒よろしくお願いいたします。
- papayuka
- ベストアンサー率45% (1388/3066)
Wordのマクロについては殆ど解りませんが、Project(文書名)の ThisDocument に Private Sub Document_Open() Dim uName uName = InputBox("まず氏名を入力", "制限") If uName = "" Then MsgBox "閉じます", vbCritical ThisDocument.Close End If Selection.TypeText Text:=uName End Sub のような感じで起動時に記入を促せました。 ただ、マクロ無効で開かれちゃったり、この後に記入箇所を消されたら終りですけど。
お礼
ご回答いただき大変有難う御座います。 早速テストしてみたいと思います。 マクロ無効で開かれるとマクロは全く意味を持ちませんが、各クライアント端末のWordの設定にてマクロを必ず実行するようにして立ち上げるようにしたいと思います。 (と言っても、その設定もユーザーに変えられてしまったら意味が無いのですが・・・) 引き続き、妙案をお持ちの方がいらっしゃいましたらご指南お願いいたします。
お礼
ご回答頂きありがとう御座います。 大変ご丁寧にご説明頂きまして大感謝です。 TTakさんの方法で実際に文章を作って検証してみたいと思います。 ここまでご回答頂いた皆様も含めまして、本当にありがとう御座いました。 皆様から教えて頂いた方法を活用させていただきます。 質問のほうはここで一度締めさせていただきます。