エクセルのマクロでクラスのプロパティについて
- エクセルのマクロでセルがダブルクリックされたらフォームを表示し、リストボックスのクリック時の値をクラスのプロパティに実装できるのか?
- 以前、仕事でそのようなクラスを呼び出して使ったことがある。
- フォーム側のListBox1_Clickでどうすれば良いか分からず、解決方法を探している。
- ベストアンサー
エクセルのマクロでクラスのプロパティについて
エクセルでセルがダブルクリックされたら フォームを表示し、フォーム内のリストボックス のクリック時の値をクラスのプロパティに実装 できるのでしょうか? 以前、仕事でそのようなクラスを呼び出して 使ったことがあるので。 エクセル側 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で どうすればよいか分からなくなりました。 根本的に間違っているのでしょうか? ネットでさがしたのですが参考になる サイトが見つかりません。 解決方法、宜しくお願い致します。
- sendaitaro
- お礼率67% (43/64)
- Visual Basic
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
WithEvents宣言で コンボボックスをクラスモジュールに宣言して Private WithEvents oCombo as CobBox ListSetメソッドで Set oCombo = UserForm1.ComboBo1 を実行 このオブジェクトのChangeイベントで if oCombo.MatchFound then ' コンボボックスのテキストとリスト項目が一致した場合 ' プロパティを変更 val = oCombo.Text end if といった具合にしてはいかがでしょう
関連するQ&A
- プロパティについて
長年他の言語をやってきまして、VB.NETでピンと来ていない点があります。どなたかご教授ください。 あるクラスのプロパティとセッターゲッターについて2通りの 書き方ができると思っています。 以下の1、2の違いはありますでしょうか?入門書やネット上を検索 すると1の例で記述されますが、経験上2のような書き方をしてしまうため気になっております。 1. Private _hoge As Integer = 0 Public Property Hoge() As Integer Get Return _hoge End Get Set(ByVal Value) _hoge = Value End Set End Property 2. Private _hoge As Integer = 0 Public Function getHoge() As Integer Return _hoge End Function Public Sub setHoge(ByVal val As Integr) _hoge = val End Sub
- ベストアンサー
- Visual Basic
- VB6.0のクラスで、自分自身のインスタンスを作成するメリット
クラスのメソッドで、自分自身のインスタンスを作成している、コードをよく見かけます。 どんなメリットがるのでしょうか? 簡単に、クラスファイルのコードを書きました。 【A.cls】 Option Explicit Dim pstrID As Long Dim pstrName As String Public Function fncCreate() As Object Set fncCreate = New clsA '★自分自身のインスタンスを作成する End Function Public Function fncID() As Boolean pstrName = "ID" End Function Public Function fncName() As Boolean pstrName = "STRING" End Function Private Sub Class_Initialize() pstrID = 0 pstrName = "" End Sub
- ベストアンサー
- Visual Basic
- プロパティープロシージャーについて
簡単な年齢計算プログラムです。 書籍のサンプルなのでうまく動いています。 クラスの変数がPrivate strnameだったりするので そこへアクセスするためにプロパティプロシージャーを使っているというところまでは 判ったような気がしますが、 getとsetの関係がわかりません。 まず、 1.何をGetしているのか 2.なぜGetが先に来るのか、 3.Setの前にGetのReturnで返してますが実態は何を返しているのでしょうか?普通に考えると逆のような気がします。 根本がわかっていないのだと思いますが、どなたかお教え願います。 呼ぶ方 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim person As New Class1() person.Name = TextBox1.Text person.Birthday = DateTimePicker1.Value.Date MessageBox.Show(person.Name & "さんの年齢は" & person.GetAge()) End Sub クラスの方。 Public Class Class1 Private strname As String Private datBirthday As Date Public Property Name() As String Get Return strname End Get Set(ByVal pro_name As String) strname = pro_name End Set End Property Public Property Birthday() As Date Get Return datBirthday End Get Set(ByVal pro_birthday As Date) datBirthday = pro_birthday End Set End Property Public Function GetAge() As Integer Return Int(DateTime.Today.Subtract(Birthday).Days / 365.25) End Function End Class
- ベストアンサー
- Visual Basic
- エクセルVBA ユーザーフォームのリストボックス
エクセルVBAのユーザーフォームのリストボックスについて教えてください。 現在、以下のようにコードがされています。 Private Sub UserForm_Initialize() With UserForm.ListBox1 .AddItem "ABC" .AddItem "DEF" .AddItem "GHI" .ListIndex = 0 End With End Sub Private Sub ListBox1_Click() With ListBox2 .Clear Select Case UserForm.ListBox1.List(ListBox1.ListIndex) Case "ABC" .AddItem "123" .AddItem "456" .AddItem "789" Case "DEF" .AddItem "456" .AddItem "789" Case "GHI" .AddItem "789" End Select .ListIndex = 0 End With End Sub それで、ユーザーフォームを起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択し、青く色がついている状態にすることは可能でしょうか。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELのマクロについて
以下のプロシージャの内容が理解出来ません。 Public Sub test() test.show End Sub Public Function te2(ByVal Val1 As Single, Typ As String) As list シート1の名前.Activate draht=test.suchtest(Val1,Typ) End Function 不明点は以下の通りです。 ・「show」は何の操作か?(関数でしょうか?) ・また、「test」とは何を指すものか? プロジェクト中には上記ステートメント以外で「test」の記載は 有りません。また、シート名ではなく、セル範囲の名前でも無い ようです。何か他のものでしょうか? ・As list のlistとは何か? 関数のデータ型を記載する場所にユーザが付けたと思われる名前を記 載して何故マクロが動くのか? ・draht=test.suchtest(Val1,Typ)は何が異なるのか?
- ベストアンサー
- オフィス系ソフト
- リストボックス
すいません以下の処理に困っております。 リストボックスで値を取得して他のリストボックスにその値を 出力したいのですがまったくできません。 <例> リストボックス1 a b c リストボックス2(上で選択した値を出力) a ちなみに構文は、 ------------------------------------------------------------ Private Sub btn選択_Click() ListBox2.Text = ListBox1.Text 'ListBox1.ListIndex + 1 & ": " & ListBox1.Text End Sub Private Sub CommandButton1_Click() End Sub Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean) btn選択_Click End Sub Private Sub UserForm_Initialize() With ListBox1 .AddItem "スケジューラ" .AddItem "データ変換" .AddItem "DWH Server" .AddItem "PPP Server" .AddItem "ファイヤーウォール" .AddItem "暗号オプション" End With End Sub ---------------------------------------------------- 初心者でまったくできません。 御教授をお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- VBAクラスで、プロパティを使わずに、データを受け渡すには?
はじめまして。 最近、クラスモジュールを使い始めたのですが、 別のクラスに、プロパティを使わずに、 データを受け渡すには、どうすればいいのでしょうか? たとえば、次の2つのクラスがあったとします。 (両方ともString型の読み取り専用のプロパティがある) 'クラスA Private m_Str_A as string Public Property Get Str_A() as String Str_A = m_Str_A End Property 'クラスB Private m_Str_B as string Public Property Get Str_B() as String Str_B = m_Str_B End Property ここで、クラスAで使用したm_Str_Aのデータを クラスBのm_Str_Bへ渡したいのですが、、、、。 別のプロパティを作ればいいだろうと考えたのですが、 それでは、値の変更が可能になってしまいます。 使用環境は、Excel2000 VBA、Windows2000です。 いろいろ調べてみたところ、他の言語か、VB.NETでない と無理そうなことが書かれていました。 仕事場では、他の言語は使用できないので、困ってます。 何か良い方法がありましたら、よろしくおねがいします。
- ベストアンサー
- Visual Basic
- ExcelのVBAについてです。
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) UserForm1.Show End Sub というコードで、シート上で右クリックしたら、ユーザーフォームを表示するようにしたんですが、ユーザーフォームを閉じると右クリックメニューが出てきます。これを出なくするにはどのようにしたらいいのでしょうか。教えてください。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- クラスの作成方法を教えてください
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1328191 標記の内容がわからなくうまくいきません 作成したいクラスの内容 ・CSVのデータ1行を表すクラス(CsvQueueクラスとする) ・メンバー変数は、 その1行のデータとCsvQueueクラスへのポインタ。 データは面倒ならPublic。 ・メンバー関数は、 PutData()とGetData()。 CsvQueueクラス Public strCsvData1 As String Public strCsvData2 As String Public strCsvData3 As String Private queNextData As CsvQueue 初歩的な質問ではございますが、 作成方法を教えてくださいます様、よろしくお願いいたします 以下、参考::::::::::::::::::::: Public Function PutData(ByVal q As CsvQueue) As Boolean If queNextData Is Nothing Then Set queNextData = q Exit Function End If PutData = queNextData.PutData(q) End Function Public Function GetData() As CsvData GetData = queNextData End Function CSV出力モジュール内(追加した行を++で表している) Private csvRoot As CsvData ' Nothingに初期化 Private Sub output(ByVal ofile As String) On Error GoTo trap handle = FreeFile() Open ofile For Append As #handle Do Until csvRoot Is Nothing (中略と同内容) csvRoot = csvRoot.GetData() Loop (中略) Print #handle, _ Close #handle Exit Sub trap: 'MsgBox Err.number & "," & Err.Description, vbInformation, "output" Dim csvTemp As New CsvData csvTemp.strCsvData1 = ... If csvRoot Is Nothing Then Set csvRoot = csvTemp Else csvRoot.PutData(csvTemp) End If End Sub
- 締切済み
- Visual Basic
- SerialPort処理でInvokeメソッドを使用するとエラーが発生。
はじめまして。こんばんわ。 同一プロジェクトの複数のフォームから、RS232C接続処理を行っております。 まったく同じ処理内容なので、クラスを使用しようとしております。 しかし、データ受信時、Invokeメソッドを使用して、各フォームのイベントをCALLしますと、『InvalidOperationException』が発生し、『ウィンドウ ハンドルが作成される前、コントロールで Invoke または BeginInvoke を呼び出せません。』というエラーメッセージが表示されてしまいます。 ソースを下記に記載いたします。どなたか、原因・対処方法がわかる方がいらっしゃいましたら、御手数をおかけいたしますが、ご教示の程、よろしくお願い申し上げます。 ============================== 呼び出し元フォーム ============================== Public Class Form1 Private cls232CIns As cls232C Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click cls232CIns.openport() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cls232CIns = New cls232C() End Sub Public Sub DispData(ByVal data As String) TextBox1.Text = data End Sub End Class ============================== SerialPort通信クラス ============================== Imports System.IO.Ports Public Class cls232C WithEvents SP1 As SerialPort Delegate Sub RecvDataDisp(ByVal dataR As String) Public Sub New() SP1 = New SerialPort("COM6", 9600) End Sub Public Sub openport() SP1.Open() End Sub Public Sub closeport() SP1.Close() End Sub Public Sub ReceiveData(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP1.DataReceived Dim getdata As String getdata = SP1.ReadLine Form1.Invoke(New RecvDataDisp(AddressOf Form1.DispData), getdata) ←ここでエラー発生 End Sub End Class
- ベストアンサー
- Visual Basic
お礼
有難うございました。(_ _) 一発でできました。 大変参考になりました。