こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ユーザーフォームのデータをそのまま保存する方法

エクセルでユーザーフォームを作成し、エクセルのワークシート上のボタンからユーザーフォームを表示するようにしました。
ワークシート上のボタンをクリックして表示されたユーザーフォームにデータを入力してユーザーフォームを終了しワークシートを保存終了、再度そのワークシートを開いてボタンからユーザーフォームを表示すると入力したデータが消えてしまいます。
ユーザーフォームに入力したデータがそのまま保存できて次に開いたときにデータが残っている方法はありませんか?
今回、ユーザーフォームを作成をした目的は、ユーザーフォームに入力したデータを元に住所録等を作成するためではありません。ですからユーザーフォームに入力したデータはワークシートと連動させていません。
やりたいことは、ワークシート上に氏名一覧があり、個々の氏名欄にボタンを作成して、その人のデータ一覧をユーザーフォームで表示させるということです。
ユーザーフォームは、人数分を作成する予定です。

投稿日時 - 2015-01-15 17:49:49

QNo.8892460

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。

ふつうは、終了時に、ユーザーフォームのデータを、ワークシートに退避させるという方法を取ります。それをユーザーに感じさせないためには、多くの公開マクロを出す人たちは、そのシートを[隠しシート]にしてしまっています。

ワークシートに書き出す方法、こんなふうになります。

'//
Private Sub UserForm_Initialize()
With Worksheets("Sheet1")
 TextBox1.Text = .Cells(1, 1).Value
 TextBox2.Text = .Cells(2, 1).Value
End With
End Sub

Private Sub UserForm_Terminate()
With Worksheets("Sheet1")
 .Cells(1, 1).Value = TextBox1.Text
 .Cells(2, 1).Value = TextBox2.Text
End With
End Sub
'//

>ワークシート上に氏名一覧があり、個々の氏名欄にボタンを作成して、その人のデータ一覧をユーザーフォームで表示させるということです。

こういう場合は、ボタンよりも、イベント・ドリブン型マクロで、ダブルクリックや右クリックで、ユーザーフォームを出す方法が軽くなります。

>ユーザーフォームは、人数分を作成する予定です。
ただ、今の時代はどうか知りませんが、私は、ユーザーフォームの数は、作りすぎると、思わぬトラブル(クラッシュ)になることがありましたので、なるべく、ユーザーフォームの数は増やさないようにしています。

参考になれば幸いです。

投稿日時 - 2015-01-15 19:18:11

お礼

回答ありがとうございあした。
おかげさまで、保存終了することができました。
ボタンよりも、イベント・ドリブン型マクロがいいとのこと、
出来れば、
イベント・ドリブン型マクロの作成方法を教えていただけませんでしょうか?
よろしくお願いします。

投稿日時 - 2015-01-16 13:03:32

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは。
遅くなりました。
>イベント・ドリブン型マクロの作成方法を教えていただけませんでしょうか?
例えば、こんなふうに出来ます。
Sheet1
A列のA1から
 A列  B列 (B列は、同じ行なら、どこに置いてもよい)
東京   1
大阪   2
名古屋  3
福岡   4

Sheet2
 A列A1から
 A列
浅草雷門
梅田スカイビル
熱田神宮
太宰府天満宮

Sheet1 のモジュール

'//
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim i As Long
 Cancel = True
 If Target.Column <> 1 Then Exit Sub 'ダブルクリックの列が"A"列でない時
 If Target.Value = "" Then Exit Sub '対象セルが空白
 If IsNumeric(Cells(Target.Row, "B").Value) Then
  i = Cells(Target.Row, "B").Value '"B列
   With UserForm2
    .Show vbModeless
    .TextBox1.MultiLine = True '本来は、プロパティで処理してください。
    .TextBox1.Text = Worksheets("Sheet2").Cells(i, "A").Value
   End With
 End If
End Sub
'//

なーんだ、こんなものかと思われるでしょうが、
これに、インターネット(IE)を組み合わせることも可能です。

画面の都合上、あまり複雑な内容は書けませんが、
例えば、OkWaveであろうが、oshiete.gooであろうが、ここのサイトは、数値で管理されていますね。

つまり、
題名:●●●●●●● ,数字
題名と数字さえあれば、UserFormで同じようなことが可能だということが分かります。
strURL = "http://oshiete.goo.ne.jp/qa/" & i & ".html"
strURL = "http://okwave.jp/qa/q" & i &".html"
で、インターネットにアクセス出来ますし、ハイパーリンクなどは不要だと分かります。

なお、なぜ、ダブルクリックなのかという疑問に関しては、あまり深い意味はありませんが、ワンクリックで、何かの動作するのは、鬱陶しいからです。

それと
If Target.Column <> 1 Then Exit Sub 'ダブルクリックの列が"A"列でない時
を、If Target.Column = 1 Then に換えて、
ElseIf Target.Column =3 Then のように項目を増やすことによって、
同じダブルクリックなのに、別の動作をさせることも可能になります。

余計なお世話になってしまいましたが、実は、こういうスタイルで、ここの掲示板にアクセスしています。

投稿日時 - 2015-01-17 16:48:41

お礼

ありがとうございました。
VBAに詳しくない私には難しそうですが、がんばってみます。

投稿日時 - 2015-01-18 11:19:47

あなたにオススメの質問