今までは、エクセル(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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
- Excel(エクセル) マクロVBA別Excelブックにデータ転記 2 2022/07/10 23:35
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
テキストボックス入力データの保持について
Visual Basic(VBA)
-
-
4
ユーザーフォームのデータをそのまま保存する方法
Excel(エクセル)
-
5
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
6
UserForm1.Showでエラーになります。
工学
-
7
ExcelVBAのユーザーフォームで一度保存したデータを同じフォームに呼び出して編集する方法
Visual Basic(VBA)
-
8
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
VBAのテキストボックスに文字列を貼り付ける方法
Access(アクセス)
-
11
テキストボックスの番号を使ったFor~Next文について
Visual Basic(VBA)
-
12
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
13
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
14
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
15
VBA フォームのテキストボックスにセルの値を表示させたいが改行していたら改行もあわせて表示させたい
Excel(エクセル)
-
16
VBAのフォームでTextBoxがいっぱいある時
Access(アクセス)
-
17
タブの色を変更する方法
Visual Basic(VBA)
-
18
テキストボックス(アクセス)内のテキストの保存
その他(データベース)
-
19
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
20
エクセルVBAでテキストボックスの値の取得と変更について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
検便についてです。 便は取れた...
-
甲状腺が腫れているが血液検査...
-
小数点以下を繰り上げたものを...
-
2つの数値のうち、数値が小さい...
-
エクセル指定した範囲からラン...
-
EXCELで条件付き書式で空白セル...
-
【Excelで「正弦波」のグラフを...
-
リンク先のファイルを開かなく...
-
これって喉仏ですか? 私は女性...
-
Excelで""で囲む方法
-
エクセルの質問。 対象範囲...
-
EXCELで式からグラフを描くには?
-
MIN関数で空白セルを無視したい...
-
エクセルのラベルの値(文字列...
-
値が入っているときだけ計算結...
-
エクセルのグラフで、値0のとき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
精子が黄色?
-
EXCELで条件付き書式で空白セル...
-
至急!尿検査前日にオナニーし...
-
これって喉仏ですか? 私は女性...
-
中出しをするとお腹が痛い・・・。
-
甲状腺が腫れているが血液検査...
-
2つの数値のうち、数値が小さい...
-
尿検査前日に自慰行為した時の...
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
ある範囲のセルから任意の値を...
-
口の中に黒い血の塊
-
【Excelで「正弦波」のグラフを...
-
エクセル指定した範囲からラン...
おすすめ情報