重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 以前に,エクセルファイルを閉じても,再度ファイルを開いたときに,閉じる前のユーザーフォームにあるチェックボックスやオプションボタンなどの選択結果を再表示させる方法をお教えいただき,そのご指導のもとコントロールの状態を、シートに保存しておく方法で作業を進めていました。
しかし,次の2点の問題が新たに出てきました(><)。いろいろと自分なりに考えて見ましたが,解決できず再度投稿させていただきました。
問題1.ユーザーフォームに「ラベル」・「イメージ」・「マルチページ」等があると,エラーが発生します。
問題2.「コンボボックス」は,保存したコントロール状態は再表示するのですが,リストを読み込まず,コンボボックスでほかのものが選択できない事になってしまいます。

大変、恐縮なのですが、どなたか解決策をお教えください。
何卒、よろしくお願いいたします。

例)UserForm1にチェックボックス、オプションボタン、トグルボタン、テキストボックス、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を作る。SHEET2のセル(E1:E5)にコンボボックスのリストを作る。こうしたユーザーフォームの結果をフォームを閉じる時にシート(dataという名前をつけています)に保存し、フォームを開く時に、値を読み込みこませるようにしました。(、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を省くと以下のコードで問題なく作動します。)

'☆標準モジュール
Sub test()
UserForm1.Show
UserForm1.ComboBox1.List = Sheets("sheet2").range("E1:E5").Value
End Sub

'☆ UserForm1のモジュール
Private Sub UserForm_Initialize()
Dim srcRange As Range
Dim myCell As Range

Set srcRange = ThisWorkbook.Sheets("data").Range("A1").CurrentRegion
For Each myCell In srcRange.Columns(1).Cells
Me.Controls(myCell.Value).Value = myCell.Offset(0, 1).Value
Next myCell
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim myCtrl As Control
Dim destRange As Range

Set destRange = ThisWorkbook.Sheets("data").Range("A1")
destRange.Parent.Cells.Clear
For Each myCtrl In Me.Controls
With destRange
.Value = myCtrl.Name
.Offset(0, 1).Value = myCtrl.Object.Value
End With
Set destRange = destRange.Offset(1, 0)
Next myCtrl
End Sub

A 回答 (1件)

回答がついてないようなので。

。。(^^;;;

----------------------------------------------------
>問題2.「コンボボックス」は,保存したコントロール状態は
再表示するのですが,リストを読み込まず
  >Sub test()
  >UserForm1.Show
  >UserForm1.ComboBox1.List = Sheets("sheet2").range("E1:E5").Value
  >End Sub

これではリストを読み込むことはできません。
>UserForm1.ComboBox1.List = Sheets("sheet2").range("E1:E5").Value

これは、UserForm_Initializeイベントのところに書かないといけません。
 
--------------------------------------------------------

>問題1.ユーザーフォームに「ラベル」・「イメージ」・「マルチページ」等があると,エラーが発生します。
>「ラベル」・「イメージ」・「マルチページ」「コンボボックス」を
省くと以下のコードで問題なく作動します
>UserForm1にチェックボックス、オプションボタン、トグルボタン
テキストボックス、「ラベル」・「イメージ」・「マルチページ」「コンボボックス」

何でもかんでもVALUEプロパティを使えばいいというものではありません。
「ラベル」・「イメージ」には、VALUEプロパティがありませんよね。
だから、エラーが出るわけです。


------------------------------------------------------------

コントロールの何を保存したいのかによって
使用するプロパティなどが変るわけですから、
コントロールを●区別●する必要があるわけです。

例えば、
ラベルに表示されている文字列を保存したければ
  Captionプロパティを使用
チェックボックスのOn,Offを保存したければ
  Valueプロパティを使用

以上です。
 
    • good
    • 0

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