プロが教えるわが家の防犯対策術!

Excelでユーザーフォームを作りました。

ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。

テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。
「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。


Private Sub Tbox1_Change()
a = Tbox1.Value
End Sub
----------------------------
Private Sub Tbox2_Change()
b = Tbox2.Value
End Sub
----------------------------
Sub 記入Button_Click()
'入力値をSheet1に転記
Dim a As Range
Dim b As Range
Sheets("Sheet1").Select
Set a = Range("C24")
Set b = Range("C25")
End Sub

A 回答 (4件)

こんにちは。



>Sheet1のセル"C24","C25"に転記
なら、単に、TextBox のそれぞれのControlSource に、Sheet1!C24, Shee1!C25
と書けばよいのですが。

ただ、#2さんも触れていますが、初歩的な基礎がまだ足りないようですね。1週間もすれば、この程度のコードは書けるようになりますから、何か、適当な参考書を手に入れて参照したほうがよいです。

変数のプロパティ ← 値
Set オブジェクトの変数 =実際のセル

こうして変数に格納されます。
    • good
    • 0
この回答へのお礼

Wendy02さん ありがとうございました。簡単なんですね。
ControlSourceをまだ知りませんでした。勉強いたします。

次にボタン2 の Control に移ります。またよろしくお願いします。

お礼日時:2007/06/15 09:09

Rangeの概念はよく分からないのですが、


気が付いたのは、

・a,bがプロシャージャーレベル変数であるので、
プロシャージャ[記入Button_Click(])内でしか使えず
Tbox■_changeで使用するためには、モジュールレベル変数にして、
そのモジュール全体で使用できる必要があると思います.

・オブジェクト型変数 Renge に value は代入できないのでは?
(こっちが微妙)
valueで代入するなら、変数宣言をintegerにしてみてはいかがでしょうか?

と思います.
よって、私が直したモジュールは、

---------------------------------------
Dim a As Integer'モジュールレベル変数
Dim b As Integer

Private Sub TBox1_Change()
a = TBox1.Value
End Sub

Private Sub TBox2_Change()
b = TBox2.Value
End Sub

Private Sub 記入Button_Click()

Sheets("Sheet1").Select
Range("C24") = a
Range("C25") = b
End Sub
-------------------------------------
また、今回の処理では、TBox■_Change()はあまり意味をなしません.
さらに、changeで毎回監視をしている場合、複雑な処理をする時に、
コンピュータがさらに遅くなる場合があります.
よって、tbox■_change()のプロシャージャは消去して
-----------------------------------------
Private Sub 記入Button_Click()
Dim a As Integer
Dim b As Integer
Sheets("Sheet1").Select
b = TextBox2.Value
a = TextBox1.Value
Range("C24") = a
Range("C25") = b
End Sub
-------------------------------------
または
-------------------------------------
Private Sub 記入Button_Click()
Dim a As Integer
Dim b As Integer
Sheets("Sheet1").Select
Range("C24") = TBox1.Value
Range("C25") = TBox2.Value
End Sub
-------------------------------------
だけでも良いと思います

もちろん、#1さんの形がプログラムとして一番奇麗だと思います
#1さんの Tbox1 と Tbox2 の後に.value を付けたら、数字として使用できると思います.(未確認)
    • good
    • 0
この回答へのお礼

J2Jさん ありがとうございました。
ControlSource の記述で、とりあえずの問題は片付きました。

お礼日時:2007/06/15 09:07

何も動かないのではなく、指示された通りに動作しただけです。



>「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。

変数の使い方、使われ方の理解が無いですね。

>a = Tbox1.Value

「Sub Tbox1_Change()」内部で定義した a と言う変数に値を格納。し、プロシージャの終了とともに消滅。

>Set a = Range("C24")

「Sub 記入Button_Click()」内部で定義した a と言う変数にセルC24を定義(セット)し、プロシージャの終了とともに消滅。

双方の a と言う変数は全く無関係な変数なので、同じ値を共有する事は出来ません。
また、双方とも変数への格納なので、変数の値をどこかに格納する記述がありません。

プロシージャ間で変数を共有する場合は「グローバル変数」を定義する必要があります。
    • good
    • 1
この回答へのお礼

hana-hana3さん ありがとうございました。
ControlSource の記述で、とりあえずの問題は片付きました。

変数のこと、いただいた解説でだんだんわかってきました。勉強いたします。

お礼日時:2007/06/15 09:10

Sub 記入Button_Click()


  '入力値をSheet1に転記
  Worksheets("Sheet1").Range("C24")=Me.Tbox1
  Worksheets("Sheet1").Range("C25")=Me.Tbox2
End Sub
だけで良いのでは?(未確認)
    • good
    • 0
この回答へのお礼

bonaronさん ありがとうございました。
ControlSource の記述で、とりあえずの問題は片付きました。

お礼日時:2007/06/15 09:12

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