|
こんばんは。
>テキストボックスの表示方法について悩んでおります。
↑これがご質問の主題だと思っていました。
よって、そのプログラムは、ユーザーフォームというオブジェクトのモジュール内に
SetTXt1というインターフェース(プロパティ)を追加してテキストボックスにデータを設定すればよい という投稿でした。インターフェースも
>With userform1
> .SetTxt1=Worksheets("シート2").range("a1").value
> .Show
>End with
↑このような使用方法で と記述しました。
>【プロパティ名】とは【オブジェクト名】のことでよろしいのでしょうか。
違います。Excel/VBAは、主にExcelをオブジェクトというユニットに分けられ、
そのオブジェクトを操作することでプログラムを作成します。
それぞれのオブジェクトは、プロパティとメソッドという手続き(インターフェース)を
使って、操作します。
例えば、
Range(“A1”).Value=123
は、RangeオブジェクトのValueプロパティを使って、セルA1に値123を設定しています。
又、
Range("A1").Copy Range("B1")
は、RangeオブジェクトのCopyメソッドを使って、セルA1をコピーし、セルB1に貼り付けています。
プロパティは、主にオブジェクトの性質を指定したり、取得するインターフェース、
メソッドは、オブジェクトの動作を指定するインターフェースですが、実際には、プログラムの書式の指定によるところはあり、プロパティとメソッドの位置付けがあいまいなものもあります。
で、今回の対象のオブジェクトは、テキストボックス(仮にTextBox1)を貼り付けたユーザーフォーム(仮にUserForm1)ですね。つまり、taroさんは、UserForm1という独自オブジェクトを作成していることになります。そして、前回の投稿では、そのUserForm1という独自オブジェクトにSetTxt1 というプロパティを
独自に設定してみてはいかがですか? という提案でした。
例えば・・・・、新規ブックにユーザーフォーム(UserForm1)を作成してください。
このUserForm1には、テキストボックス(TextBox1)を一つ貼り付けてください。
このUserformのモジュール(この場所は、自分で調べてください)に
Option Explicit
Property Let SetTxt1(ByVal myvalue As Variant)
TextBox1.Value = myvalue
End Property
次に標準モジュール(Module1)に
Option Explicit
Sub test()
Range("a1").Value = "ichinose"
With UserForm1
.SetTxt1 = Range("a1").Value
.Show
End With
End Sub
標準モジュールの作成は、VBEにて、「挿入」----「標準モジュール」とクリックすれば作成されます。
以上ですが、UserForm1のモジュールに
Property Let SetTxt1(ByVal myvalue As Variant)
TextBox1.Value = myvalue
End Property
というインターフェースを追加すれば、どのプログラムからも
With UserForm1
.SetTxt1 = Range("a1").Value
.Show
End With
という呼び出しを行えば、UserForm1のテキストボックスに指定されたデータを設定できるということです
分からないところは、ここだと思ったので上記の記述をしたのです。
>シート2上に入力した数値 仮にA1セルに1、B2セルに2が入力してあるとします。
>
>それをシート1のA2をクリックしたときに【1】を、C1をクリックしたときに【2】を作成したユーザーフォーム上のテキストボックスを出現させ表示させたいのですがどうすればいいでしょうか
この質問を二つのポイントに分けると、
1 シートをクリックしたときにプログラムを起動させる方法
2 テキストボックスに指定したデータを表示させる方法
です。
2については、記述した通りです。
1は・・・、
Excelのオブジェクトの中には、オペレータの操作をきっかけに作動するプログラムが用意されているものがあります。この操作をイベントと呼び、実行されるプログラムをイベントプロシジャーと呼んでいます。
セルをクリックした時のイベントはないので、セルをダブルクリックした時のイベントを利用してみてはいかがですか?
シート1のモジュールに以下のコードを記述してみてください
(シート1のモジュールは、シート1のタブにマウスを合わせ、その状態で右クリック---コードの表示 とクリックし、表示されたモジュールです)。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = Range("A1").Address Then
MsgBox "A1がダブルクリックされました"
Cancel = True
ElseIf Target.Address = Range("C1").Address Then
MsgBox "C1がダブルクリックされました"
Cancel = True
End If
End Sub
上記のコードは、セルA1をダブルクリックすれば、
「A1がダブルクリックされました」と表示し、C1をダブルクリックすれば、
「C1がダブルクリックされました」と表示するコードです。
これで1も解決ですよね!!
方法が分かれば、仕様に合わせて
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
というプロシジャーを修正してください。
|
|