ワード2003のテキストボックスフォームフィールドについて
おわかりになる方いらしたら、教えて下さい。
テキストボックスフォームフィールドを挿入して、「テキストボックスフォームフィールド」
ダイアログボックスで種類を「文字列」にしました。
動作確認をした所、文字列はもちろんですが、なぜか数値でも日付でも入力出来ました。
ここでの種類の指定は、「文字列のみ」「数値のみ」というように、
あらかじめ入力内容を制限する為の設定だと理解していましたが、指定した種類以外のものでも入力可能です。
となると、ここで種類を指定する目的が何なのかがわかりません。
お分かりになる方、いらっしゃいましたら、ぜひ宜しくお願いしますm(__)m
A 回答 (5件)
- 最新から表示
- 回答順に表示
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で代用していますが、そうでなければ、とても出来ません。
どなたか、いつもですと、この後に、この件に詳しい方がバックアップしてくれるはずですから、しばらく、締めないでください。
早速のご回答ありがとうございます!
マクロに関しては知識がないので、記録マクロで試してみました。
しかし、やり方が良くないのか「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からの調べ方についても教えて頂けると嬉しいです。
お手すきの時で結構ですので宜しくお願いします。
No.2
- 回答日時:
Wendy02さんの後に回答するような内容ではないし、キチンと理解して
回答できる自信もないですが、興味があるので回答に参加します。
[テキストボックスフォームフィールド]の[プロパティ]にある[文字列]
のことを知りたいのですね。他の[日付]や[数値]のように指定したもの
以外の入力をしても、[日付]だと拒否されるし[数値]だと表示形式での
表示になり文字扱いになりませんね。
けれど、[文字列]だけはすべて有効になるのが理解できないということ
のようなので、その理由を私なりに解釈したものを以下に載せます。
[文字列]はマクロで見れば判りますが、EditTypeメソッドの指定になり、
その中の type が wdRegularText になります。
そのことから、Excelの[セルの書式設定]などの[標準]と同じ扱いだと
私は解釈しています。
なぜなら、Wordの文字列とは[数値]と[日付]、[計算式]の場合を除き、
すべての文字を対象にするからです。
[一般書式スイッチ]で[全角/半角]や[大文字/小文字]、[アラビア数字]
や[漢数字]などの指定をすることはあっても数字以外の文字を対象には
していません。
Excelのように表計算が主なものと違って、Wordは様々な文字を文章に
して作成するワープロですから、文字列の扱いが違うと思うのです。
思いつきで書き込んでいるので、上記説明が正しいとは決して思っては
いませんし、もっとWordのことをよく知る方々(専門家?)からの回答が
あれば、キチンとした内容で回答されると思います。
私もこの質問に興味がありますから、様々な意見を知りたいですね。
ご回答ありがとうございます!
そうなんです。「数値」や「日付」を指定した時に指定した以外のデータを入力すると
エラーメッセージが出たりきちんと表示されなかったりするのに
文字列に限ってはすべて有効なのがわからないんです。
マクロも記録マクロで下記の要領で試してみたところ「wdRegularText」との表示はありました。
文字列の概念がワードとエクセルでは違うということなんですね。
となると「数値」の概念も何だかあやふやになってきました…。
数値って計算対象になる数字と捉えていますが、これでいいのでしょうか?
例えば「1月」とか社員番号としての「1100」等は数字だけど文字列の扱いになると考えればいいのでしょうか。
引き続き、調べてみようと思います。どうもありがとうございました。
何かありましたら引き続きどうぞ宜しくお願いしますm(__)m
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.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さん
以外にここを見てくれているいるのか少し不安です。
ここの理念として、情報ベース化を目指しているようなので、他の回答
がいつか付くかもしれませんので、問題が解決するまではあえて閉じて
しまわなくてもよいでしょうね。
これは質問者さんの判断に任せます。私はしばらくこの質問への投稿は
しないと思います。
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は、やはり全体的に扱いが難しいなって感じます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Accessテキストボックス内に2つのフィールドの値を比較して大きい方の値を表示させる方法 1 2022/09/09 10:50
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで入力したデータの順...
-
差し込み文書のルールで if the...
-
Accessでボタンを押すと今日の...
-
【急いでます】コンボボックス...
-
アクセス Access 時間の引き算
-
フィールドの中のテキストを分...
-
ファイルメーカ Case("テキス...
-
ファイルメーカ 集計の表示
-
ファイルメーカー:ピクチャに...
-
ファイルメーカーでの指定桁数...
-
ファイルメーカーでの入力文字...
-
ファイルメーカーのデータをc...
-
ファイルメーカーでのカウント集計
-
ファイルメーカーでフィールド...
-
ファイルメーカー 一括追記し...
-
ファイルメーカ ブラウスモー...
-
ファイルメーカー8 参照元変更...
-
Word2016 分数入力したいがEqの...
-
WORD差し込み印刷:日付の処理 ...
-
MS-ACCESSで中央値(ME...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスで入力したデータの順...
-
「#エラー」の回避
-
差し込み文書のルールで if the...
-
accessのフィールドに10桁の数...
-
ExcelからAccessデータを検索す...
-
Accessで値がnullの場合は計算...
-
Accessでボタンを押すと今日の...
-
FileMakerで画像をまとめて書き...
-
WORD差し込み印刷:日付の処理 ...
-
Access フィールド内の値で、...
-
ACCESSでデータ変更箇所が分か...
-
FileMakerで、フィールドの値が...
-
MS-WORDで、あるフィールドに入...
-
access フィールドのサイズ(文...
-
フィールドの中のテキストを分...
-
Wordでページ番号を計算式で入...
-
FileMakerで外部保存PDFを開く方法
-
ファイルメーカーの集計方法を...
-
ワードでプルダウン項目を作りたい
-
Access フィールドに入力した...
おすすめ情報