• 締切済み

ワードのテキストボックスフォームフィールド 【プロパティで設定した種類以外のデータ】

ワード2003のテキストボックスフォームフィールドについて おわかりになる方いらしたら、教えて下さい。 テキストボックスフォームフィールドを挿入して、「テキストボックスフォームフィールド」 ダイアログボックスで種類を「文字列」にしました。 動作確認をした所、文字列はもちろんですが、なぜか数値でも日付でも入力出来ました。 ここでの種類の指定は、「文字列のみ」「数値のみ」というように、 あらかじめ入力内容を制限する為の設定だと理解していましたが、指定した種類以外のものでも入力可能です。 となると、ここで種類を指定する目的が何なのかがわかりません。 お分かりになる方、いらっしゃいましたら、ぜひ宜しくお願いしますm(__)m

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

pikepikepi 様、enunokokoro様 こんばんは。 もちろん、1月は、全角数字+漢字は、それを半角にして、Val 関数で、数値には変換できます。 a = Val(StrConv("1月", vbNarrow)) + 1 a は 2 になります。 これは、あくまでも、VBAの範囲内なので、それは、あまりWordとして特化した問題ではないようです。 余談にはなりますが、VBAの解決方法というのは、しょせん、VBAのセキュリティオプションに支配されてしまうので、ある程度、扱える人のいるところ以外は、避けられれば避けたほうがよいと思うことがあります。Excelとは違い、Wordはあくまでも、文書という単位で扱いますし、私自身のWordでの文章の納品は、印刷すればよいというようにしてあります。(最近、PDFも多くなってきました) 私は、Excelは仕事では使いませんが、もしも、そういう状況に至れば、Excelのほうで、レイアウトを加工して作ることになるだろうと思います。Wordは、やはり全体的に扱いが難しいなって感じます。

すると、全ての回答が全文表示されます。
回答No.4

Wendy02さんのマクロだと、確かに「1月」は数値になりませんね。 これだとWordにおける数値や文字列とは何かを説明するのには、私は 難しいと思いました。 そこで違う切り口でWordの数値と計算について、私が勉強したことから 解釈したことを書きたいと思います。 「1月」のように全角の数字と文字の組み合わせでは、数値として認識 がされませんが、「1月」のように半角数字と全角文字の組み合わせでは 「1」だけを認識し数値として表示や計算をしてくれます。 これは[テキストボックスフォームフィールド]以外でも、表内のセルに :1月:2月:{ =A1+B1 }: (:はセルの区切りを示す) のような計算を含んだ表を作成した場合に、計算結果として「3」を表示 してくれます。セル以外でもブックマークを使用しても同じです。 また、 :1 1 1 1 1:{ =A1 }: のようにセル内の数値を半角スペースで区切った場合、計算結果が「5」に なっていると思います。 このようにExcelとは違った計算をするWordでは、セルやブックマーク に半角数字+文字(全角や半角英字)を使った場合に数字だけを認識して 計算がされます。これはExcelではありえない現象です。 これらのことから、Wordのおける文字列とはすべてのTextを意味してる ことになり、文字列にある半角数字は数値として認識してくれるようで、 計算するためには先頭に半角数字をおくようにするようです。 [テキストボックスフォームフィールド]の[プロパティ]にある[数値]の 場合は、半角数字以外を除いた表示になることから、数字の前後にある 半角数字以外を無視して数値として認識してくれてるようです。 もう少し上記の内容を整理して、時間があるときに書き込むことがある かもしれませんので、締め切らないなら回答を入れるかもしれません。 本当は他の回答者からの意見や知識も知りたいのですが、Wendy02さん 以外にここを見てくれているいるのか少し不安です。 ここの理念として、情報ベース化を目指しているようなので、他の回答 がいつか付くかもしれませんので、問題が解決するまではあえて閉じて しまわなくてもよいでしょうね。 これは質問者さんの判断に任せます。私はしばらくこの質問への投稿は しないと思います。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。#1のWendy02です。 enunokokoro さん、返事を付けてくださってありがとうございました。 ここのカテゴリでは、enunokokoro さんほど詳しい回答される方はいませんので、詳しいことは、心強いです。 pikepikepi さん、 VBAの場合は、厳密には、変数の型を指定しない限り(以下のようなVariant型)は、文字列と数値の違いはありません。 >例えば「1月」とか社員番号としての「1100」等は数字だけど文字列の扱いになると考えればいいのでしょうか。 1月というのは文字列で、日付型にはなりませんが、1100は、文字列ですが、数値として扱うことが可能です。なお、wdRegularText等の書式型は、全て、Text とついているように、文字列で返されるはずです。 あくまでも、VBAでは、それを最初どのような型で返されるか調べ、その後の加工が可能かを調べるものです。数式型などは、ここでは、今は、入れておりません。 以下は、フォームフィールド・テキストボックスのテスト用マクロ '------------------------------------------------------- Sub FieldTest() Dim myStr As Variant Dim msg1 As String Dim msg2 As String Dim msg3 As String 'ここにフォームフィールドの名前を入れてください。例:Text2 Const FIELDNAME As String = "Text2"  myStr = ThisDocument.FormFields(FIELDNAME).Result 'ここでResult を取る  If myStr = "" Or myStr Like " " Then   MsgBox "フィールドは空です", vbInformation   Exit Sub  End If  If VarType(myStr) = vbString Then   msg1 = "文字列です -" & TypeName(myStr)  Else   msg1 = "文字列ではありません -" & TypeName(myStr)  End If  If IsNumeric(myStr) Then   msg2 = "数値として扱えます"  Else   msg2 = "数値ではありません"  End If  If IsDate(myStr) Then   msg3 = "日付として扱えます"  Else   msg3 = "日付ではありません"  End If  MsgBox "『 " & myStr & "は、』" & vbCrLf & _   msg1 & vbCrLf & _   msg2 & vbCrLf & _   msg3 & vbCrLf End Sub

すると、全ての回答が全文表示されます。
回答No.2

Wendy02さんの後に回答するような内容ではないし、キチンと理解して 回答できる自信もないですが、興味があるので回答に参加します。 [テキストボックスフォームフィールド]の[プロパティ]にある[文字列] のことを知りたいのですね。他の[日付]や[数値]のように指定したもの 以外の入力をしても、[日付]だと拒否されるし[数値]だと表示形式での 表示になり文字扱いになりませんね。 けれど、[文字列]だけはすべて有効になるのが理解できないということ のようなので、その理由を私なりに解釈したものを以下に載せます。 [文字列]はマクロで見れば判りますが、EditTypeメソッドの指定になり、 その中の type が wdRegularText になります。 そのことから、Excelの[セルの書式設定]などの[標準]と同じ扱いだと 私は解釈しています。 なぜなら、Wordの文字列とは[数値]と[日付]、[計算式]の場合を除き、 すべての文字を対象にするからです。 [一般書式スイッチ]で[全角/半角]や[大文字/小文字]、[アラビア数字] や[漢数字]などの指定をすることはあっても数字以外の文字を対象には していません。 Excelのように表計算が主なものと違って、Wordは様々な文字を文章に して作成するワープロですから、文字列の扱いが違うと思うのです。 思いつきで書き込んでいるので、上記説明が正しいとは決して思っては いませんし、もっとWordのことをよく知る方々(専門家?)からの回答が あれば、キチンとした内容で回答されると思います。 私もこの質問に興味がありますから、様々な意見を知りたいですね。

pikepikepi
質問者

お礼

ご回答ありがとうございます! そうなんです。「数値」や「日付」を指定した時に指定した以外のデータを入力すると エラーメッセージが出たりきちんと表示されなかったりするのに 文字列に限ってはすべて有効なのがわからないんです。 マクロも記録マクロで下記の要領で試してみたところ「wdRegularText」との表示はありました。 文字列の概念がワードとエクセルでは違うということなんですね。 となると「数値」の概念も何だかあやふやになってきました…。 数値って計算対象になる数字と捉えていますが、これでいいのでしょうか? 例えば「1月」とか社員番号としての「1100」等は数字だけど文字列の扱いになると考えればいいのでしょうか。 引き続き、調べてみようと思います。どうもありがとうございました。 何かありましたら引き続きどうぞ宜しくお願いしますm(__)m

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 今、私も、文字列以外でも見直してみましたが、予想に反して、テキストボックスは、やはり全てが、「文字列」でした。他にはありません。入力規則のような仕組みもありません。 (調べ方は、VBAから、以下のような、Result というプロパティの値のデータ型で調べることで分かります。) どうやら、その指定は、規定の文字列に対する反映だけにしかないようです。それ以上の機能で、入力に対して反映するような機能は持ってはいないようです。 おっしゃるようなことは、たとえば、 フォームフィールドのテキストボックス-プロパティ-実行するマクロ 終了時に、以下の、CheckEnterChar を登録してやれば、数字をはねることが出来ます。 Sub CheckEnterChar() Dim myStr As Variant   myStr = ThisDocument.FormFields("TextBox").Result   If IsNumeric(myStr) Then    MsgBox "それは数字ですので入力できません", vbInformation    ThisDocument.FormFields("TextBox").Result = ""   End If End Sub ただし、フォームフィールドは、プロテクトしないといけません。 フォームフィールド自身では、何も機能を持たないのだと思います。私は、フィールドのコードは分かりませんので、VBAで代用していますが、そうでなければ、とても出来ません。 どなたか、いつもですと、この後に、この件に詳しい方がバックアップしてくれるはずですから、しばらく、締めないでください。

pikepikepi
質問者

お礼

早速のご回答ありがとうございます! マクロに関しては知識がないので、記録マクロで試してみました。 しかし、やり方が良くないのか「Result」というプロパティは表示されませんでした。 以下、私の操作方法です。 VisualBasicツールバーより「マクロの記録」ボタン―フォームツールバーより「テキストボックスフォームフィールドの挿入」ボタン -フォームツールバーより「フォームフィールドのオプション」ボタン-「種類」文字列を選択後「OK」-記録ツールバー「記録終了」ボタン -「ViualBasicEditor」で表示 と、いう手順で操作しましたがこの方法では間違いでしょうか? ViualBasicEditorでは、このような記載になっていました。 Sub Macro2()    Selection.FormFields.Add Range:=Selection.Range, Type:= _ wdFieldFormTextInput    Selection.PreviousField.Select    With Selection.FormFields(1)    .Name = "Text2"    .EntryMacro = ""    .ExitMacro = ""     .Enabled = True     .OwnHelp = False     .HelpText = ""     .OwnStatus = False     .StatusText = ""    With .TextInput    .EditType Type:=wdRegularText, Default:="", Format:=""    .Width = 0 End With 的外れな返答だったら、申し訳ありません。 良かったらVBAからの調べ方についても教えて頂けると嬉しいです。 お手すきの時で結構ですので宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A