アプリ版:「スタンプのみでお礼する」機能のリリースについて

ワード2003のテキストボックスフォームフィールドについて
おわかりになる方いらしたら、教えて下さい。

テキストボックスフォームフィールドを挿入して、「テキストボックスフォームフィールド」
ダイアログボックスで種類を「文字列」にしました。
動作確認をした所、文字列はもちろんですが、なぜか数値でも日付でも入力出来ました。

ここでの種類の指定は、「文字列のみ」「数値のみ」というように、
あらかじめ入力内容を制限する為の設定だと理解していましたが、指定した種類以外のものでも入力可能です。
となると、ここで種類を指定する目的が何なのかがわかりません。

お分かりになる方、いらっしゃいましたら、ぜひ宜しくお願いしますm(__)m

A 回答 (5件)

こんばんは。



今、私も、文字列以外でも見直してみましたが、予想に反して、テキストボックスは、やはり全てが、「文字列」でした。他にはありません。入力規則のような仕組みもありません。
(調べ方は、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で代用していますが、そうでなければ、とても出来ません。

どなたか、いつもですと、この後に、この件に詳しい方がバックアップしてくれるはずですから、しばらく、締めないでください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます!
マクロに関しては知識がないので、記録マクロで試してみました。
しかし、やり方が良くないのか「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からの調べ方についても教えて頂けると嬉しいです。
お手すきの時で結構ですので宜しくお願いします。

お礼日時:2007/06/12 19:50

Wendy02さんの後に回答するような内容ではないし、キチンと理解して


回答できる自信もないですが、興味があるので回答に参加します。

[テキストボックスフォームフィールド]の[プロパティ]にある[文字列]
のことを知りたいのですね。他の[日付]や[数値]のように指定したもの
以外の入力をしても、[日付]だと拒否されるし[数値]だと表示形式での
表示になり文字扱いになりませんね。
けれど、[文字列]だけはすべて有効になるのが理解できないということ
のようなので、その理由を私なりに解釈したものを以下に載せます。

[文字列]はマクロで見れば判りますが、EditTypeメソッドの指定になり、
その中の type が wdRegularText になります。
そのことから、Excelの[セルの書式設定]などの[標準]と同じ扱いだと
私は解釈しています。

なぜなら、Wordの文字列とは[数値]と[日付]、[計算式]の場合を除き、
すべての文字を対象にするからです。
[一般書式スイッチ]で[全角/半角]や[大文字/小文字]、[アラビア数字]
や[漢数字]などの指定をすることはあっても数字以外の文字を対象には
していません。

Excelのように表計算が主なものと違って、Wordは様々な文字を文章に
して作成するワープロですから、文字列の扱いが違うと思うのです。

思いつきで書き込んでいるので、上記説明が正しいとは決して思っては
いませんし、もっとWordのことをよく知る方々(専門家?)からの回答が
あれば、キチンとした内容で回答されると思います。
私もこの質問に興味がありますから、様々な意見を知りたいですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
そうなんです。「数値」や「日付」を指定した時に指定した以外のデータを入力すると
エラーメッセージが出たりきちんと表示されなかったりするのに
文字列に限ってはすべて有効なのがわからないんです。

マクロも記録マクロで下記の要領で試してみたところ「wdRegularText」との表示はありました。
文字列の概念がワードとエクセルでは違うということなんですね。
となると「数値」の概念も何だかあやふやになってきました…。

数値って計算対象になる数字と捉えていますが、これでいいのでしょうか?
例えば「1月」とか社員番号としての「1100」等は数字だけど文字列の扱いになると考えればいいのでしょうか。
引き続き、調べてみようと思います。どうもありがとうございました。
何かありましたら引き続きどうぞ宜しくお願いしますm(__)m

お礼日時:2007/06/12 20:06

こんばんは。

#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
    • good
    • 0

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さん
以外にここを見てくれているいるのか少し不安です。

ここの理念として、情報ベース化を目指しているようなので、他の回答
がいつか付くかもしれませんので、問題が解決するまではあえて閉じて
しまわなくてもよいでしょうね。
これは質問者さんの判断に任せます。私はしばらくこの質問への投稿は
しないと思います。
    • good
    • 0

pikepikepi 様、enunokokoro様


こんばんは。

もちろん、1月は、全角数字+漢字は、それを半角にして、Val 関数で、数値には変換できます。
a = Val(StrConv("1月", vbNarrow)) + 1

a は 2 になります。

これは、あくまでも、VBAの範囲内なので、それは、あまりWordとして特化した問題ではないようです。

余談にはなりますが、VBAの解決方法というのは、しょせん、VBAのセキュリティオプションに支配されてしまうので、ある程度、扱える人のいるところ以外は、避けられれば避けたほうがよいと思うことがあります。Excelとは違い、Wordはあくまでも、文書という単位で扱いますし、私自身のWordでの文章の納品は、印刷すればよいというようにしてあります。(最近、PDFも多くなってきました)

私は、Excelは仕事では使いませんが、もしも、そういう状況に至れば、Excelのほうで、レイアウトを加工して作ることになるだろうと思います。Wordは、やはり全体的に扱いが難しいなって感じます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!