みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

エクセルのマクロでクラスのプロパティについて

エクセルでセルがダブルクリックされたら
フォームを表示し、フォーム内のリストボックス
のクリック時の値をクラスのプロパティに実装
できるのでしょうか?
以前、仕事でそのようなクラスを呼び出して
使ったことがあるので。
エクセル側
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim cls As New Class1
'
cls.ListSet
'
End Sub
↑フォームの表示まで

クラスモジュール
Option Explicit
Public listVal As String
Public Function ListSet() As Boolean
'
On Error GoTo ErrFunc
'
ListSet = True
'
With UserForm1
With .ListBox1
.AddItem "a"
.AddItem "b"
.AddItem "c"
End With
'
.Show
'
End With
'
Exit Function
'
ErrFunc:
ListSet = False
End Function

Public Property Let val(ByVal data As String)
listVal = data
End Property

Public Property Get val() As String
val = listVal
End Property

フォーム側のListBox1_Clickで
どうすればよいか分からなくなりました。
根本的に間違っているのでしょうか?
ネットでさがしたのですが参考になる
サイトが見つかりません。
解決方法、宜しくお願い致します。

投稿日時 - 2007-12-13 18:41:42

QNo.3595667

困ってます

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

WithEvents宣言で コンボボックスをクラスモジュールに宣言して
Private WithEvents oCombo as CobBox

ListSetメソッドで
Set oCombo = UserForm1.ComboBo1
を実行

このオブジェクトのChangeイベントで
if oCombo.MatchFound then
  ' コンボボックスのテキストとリスト項目が一致した場合
  ' プロパティを変更
  val = oCombo.Text
end if
といった具合にしてはいかがでしょう

投稿日時 - 2007-12-13 23:18:58

お礼

有難うございました。(_ _)
一発でできました。
大変参考になりました。

投稿日時 - 2007-12-15 20:19:36

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

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

回答(1)

あなたにオススメの質問