
今までは、エクセル(VBA)で、フォームを作成しテキストボックスを貼り付け入力された値の保存が必要な場合、シートに複写して保存しておき、フォームのイニシャライズの時に値を設定する。ってなことをしていました。ところが、ふと気づいたのですが、VBEでプロパティを直接設定(入力)した値は、シートに保存しておかなくとも、また、イニシャライズ時に値を設定しなくとも値が自動的に再設定されますよね?
あれを、VBAから実現できないのでしょうか?必ずどこかに値の保存が自動的にされていると思うのですが・・・・?
Me.TextBox1.Text = "test"ってVBA中で設定しても、値は保存されません。ところが、VBEでTextプロパティに直接入力した値は、次に、UserForm.showとした時に自動的に表示されます。なぜですか?
どなたか?詳しい方いらっしゃいましたら保存する方法を教えてください。よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
こんばんは。
>このfrxファイルって我々は使えないのでしょうか?
もちろんできますが、非常に特殊で、Frxの中にしか存在しない情報を取得するときにしか使わない、非常にレアなマクロです。しかし、それをインポートすれば、UserForm は二重になってしまいますが、UserForm をいったん削除することになりますが、おそらくは、オブジェクトを失ってしまいエラーが発生するかもしれません。それに、いちいち、エクスポートしたファイルを読み出すなんていうのは、面倒でしょうがないです。
VB経験者ですと、その情報を、テキストファイルや、 ini ファイルに出力します。しかし、中身を見られないように、ランダムファイルにするかのも考えます。
しかし、Excelに詳しい人なら、非表示ワークシートや、CustomDocumentProperties なり、内部で、終了のTerminate のときに保存できるのではありませんか?Intialize のときに、そこに書き込みがあれば、それを呼ぶようなコードを書けばよいと思います。そのほうがずっと簡単だと思います。
簡単な方法は、非表示(SheetVeryHidden)ワークシートに出力します。
私は、CustomDocumentPropertiesを使っています。
例:
Private Sub UserForm_Initialize()
'起動時
On Error Resume Next
TextBox1.Text = ThisWorkbook.CustomDocumentProperties("MyString").Value
On Error GoTo 0
End Sub
Private Sub UserForm_Terminate()
'終了時
On Error GoTo ErrHandelr
ThisWorkbook.CustomDocumentProperties("MyString").Value = TextBox1.Text
Exit Sub
ErrHandelr:
'初回だけ働きます。ダミーを入れます。
With ThisWorkbook.CustomDocumentProperties
.Add Name:="MyString", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=""
End With
Resume
End Sub
CustomDocumentPropertiesって全く知りませんでした。というよりも、私の持っているVBAの辞典にも載っておりません。プロは、辞書に載っていないのも知っているんですね!!恐れ入ります。
教えて頂いたサンプルは、内容をよく理解した上で活用していきたいと思います。
ありがとうございました。
No.5
- 回答日時:
No4、kobouzuです。
Wendy02さんの回答を読み、第3の質問を無視していたことに気づきましので
それも踏まえ今回の質問の回答を簡潔に纏めてみたいと思います。
質問1.プロパティウィンドウの値はどこにあるか?
回答1.Userform.frxファイルに保持されている
--------------------------------------------------------------------
質問2.frxファイルは扱えるか
回答2.バイナリーエディタ等で扱えるがレイアウトが不明なので扱い禁止
---------------------------------------------------------------------
質問3.TextBoxの値を次回のデフォルト値にしたい
回答3.
●Textプロパティに手動で設定した値は【何もしなくても】次回もデフォルト値になるが、他のプロパティなどを利用してそのような動作をさせる方法はない
●コードにより前回の値をデフォルト値としたい場合は、Wendy02さんの回答にもあるように、隠しシートであれ、何であれ、その値を保持しておく場所を【自分で確保】しておき、次回は、Userform_Initializeイベント等で【自分で確保した場所】の値を、改めてTextBoxに設定しなければならない。
こんなことではないでしょうか。
重ね重ね教えて頂きありがとうございます。
基本的には、今までやってきたことで正しいのがわかりました。でも、frxファイルなんて今まで、全く気付きませんでした。
教えて頂いたことを、今後に活用していきたいと思います。
今後ともよろしくお願いいたします。
No.4
- 回答日時:
こんばんは。
No2,kobouzuです。>何かのプロパティ-をTrueにすると、.Textに代入した値をfrxファイルに保存するとか?ってのは無いのでしょうか?
そういったものはありません。
Userform.frxファイルに保存されるものは、VBEのプロパティウィンドウで手動で設定したものだけです。
ですから、例えば、質問のTextプロパティやTextのフォントなどをコードで設定してもそれは保存されません。
また、Userform.frxはバイナリー形式のファイルですから、バイナリーエディターで読み込めば、実際どういう形で格納されてるかメモ帳で開くよりも少しばかり詳しく分かります。
また、Textプロパティへの文字の設定も同じ長さの文字列であれば修正も可能です。
が、仰るようにfrxの仕組みを理解しないままの修正はしない方がいいです。と言うよりするべきではありません。
興味があれば、Vectorのサイトからフリーのバイナリーエディタをダウンロードして、UserForm.frxを読み込んで覗いてみてください。
因みに、UserForm.frmはテキストファイルですからメモ帳でもちゃんと表示されます。
それから、TextBoxへのデフォルト文字列の設定は、UserForm_Initializeイベントで行うか、手動でTextプロパティに設定するのがふつうです。
No.2
- 回答日時:
こんにちは。
Userformのプロパティ値は、UserForm.frxファイルに保存されます。
試しに新しいブックで以下を試してください。
新しいブックでVBEを開きUserFormを挿入
TextBoxをひとつ配置
TextBoxのプロパティ画面で、Textプロパティに手動で、"abc333"と半角の文字列を入れる
プロジェクトエクスプロラーのUserForm1を右クリック
フィルのエクスポートをクリック
適当なフォルダーを選択して保存
エクセルを終了
その保存したフォルダーを開く
UserForm1.frmとUserform1.frxの2つのファイルが保存されている
メモ帳でもいいので、そのUserform.frxを開く
最後の方に、TextBoxのTextプロパティに設定した値が保存されているのが分かる
序に、後学の為にUserform1.frmもメモ帳で開いてみましょう。
早速の回答ありがとうございます。
早速、メモ帳で開いてみました。なるほど!って思いました。貴重な情報の提供本当にありがとうございます。
ついでってわけではないのですが、もし、宜しければもうひとつ教えて頂けないでしょうか?このfrxファイルって我々は使えないのでしょうか?当然、ファイルに直接書き込もうなんて恐れ多いことを考えているのではありません。
何かのプロパティ-をTrueにすると、.Textに代入した値をfrxファイルに保存するとか?ってのは無いのでしょうか?重ね重ね教えて頂けないでしょうか?よろしくお願いいたします。
No.1
- 回答日時:
Me.TextBox1.Text = "test"
と
VBEでTextプロパティ
は同じだと思うのですが。
この回答への補足
私も、そう思っていたのですが、現実は、VBEでTextプロパティに入力した値は、ブックを閉じて再度フォームを表示しても、同じように表示されます。途中で、Me.TextBox1.Text = "test"と変更して終了させても、その前の値にリセットされます。
一度、VBEでTextプロパティに”1回目”と入力して、ブックを保存し、再びブックを読み込み、フォームを表示すると。Textボックスには、”1回目”と表示されます。その時に、VBEを起動して、Textプロパティに”2回目”と入力して、ブックを保存すると、次にブックを開き、フォームを表示すると”2回目”と表示されます。どこかに値が保存されているようです。
ところが、”1回目”と表示されている時に、VBAで、Me.TextBox1.Text = "test"と入力(VBEでTextプロパティに入力するのと同じたど考えてた)して、ブックを保存しても、次のときには、”1回目”と表示されてしまいます。
なぜでしょうか?よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
テキストボックス入力データの保持について
Visual Basic(VBA)
-
-
4
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
8
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
9
ユーザーフォームのデータをそのまま保存する方法
Excel(エクセル)
-
10
UserForm1.Showでエラーになります。
工学
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
Excel 数値の前の「 ' 」を一括...
-
VLOOKUP関数を使用時、検索する...
-
小数点以下を繰り上げたものを...
-
彼女のことが好きすぎて彼女の...
-
血液検査の結果が悪くefgrの値...
-
2つの数値のうち、数値が小さい...
-
コロナでもインフルでもなかっ...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
MIN関数で空白セルを無視したい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
増減表のプラスマイナスの符号...
-
風俗店へ行く前のご飯
-
検便を取ったのですが、棒から...
-
EXCELで式からグラフを描くには?
-
Excel 0目標に対して数字があ...
-
腕を見たら黄色くなってる部分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
検便についてです。 便は取れた...
-
血小板増加について
-
彼女のことが好きすぎて彼女の...
-
Excel 数値の前の「 ' 」を一括...
-
病院側から早く来てくださいと...
-
VLOOKUP関数を使用時、検索する...
-
腕を見たら黄色くなってる部分...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
MIN関数で空白セルを無視したい...
-
勃起する時って痛いんですか? ...
-
エクセルで空白セルを含む列の...
-
増減表のプラスマイナスの符号...
-
【Excelで「正弦波」のグラフを...
-
エクセルで数式の答えを数値と...
おすすめ情報