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

解決済みの質問

Excel VBA セルの内容をTextBoxに

ExcelのVBAで質問があります。

複数のシートの表に入力した値の合計を出したいのですが、
その後の処理もあり、ユーザーフォームのテキストボックスに反映させたいと考えています。
Windows7のExcel2010で作っています。

試しにセルB1の値が変わった時、
テキストボックスに反映させるつもりで作ったコードは以下の通りですが、
上手くいきません。

Sub Z_test()
UserForm2.Show vbModeless
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "B1" Then

UserForm2.TextBox1.Value = Range("B1").Value '←※

End If
End Sub

※の行には他にも

UserForm2.Controls("TextBox1").Value = Range("B1").Value

と調べたコードを試してみたのですが、
セルの内容が全く反映されません。

セルB1には数式の「=SUM(C2:C1000)」
が入っており、表のC列に入力された値の合計を求めています。

どなたかお知恵を拝借できれば大変助かります。
宜しくお願い致します。
長文失礼しました。

投稿日時 - 2012-07-17 21:21:44

QNo.7596199

すぐに回答ほしいです

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

しばしば見かける勘違いですが、changeイベントは「セルを編集した」(=記入した、削除した)ときに、編集されたセルからトリガされるイベントです。「セルが変わった」ではありません。
B1セルには計算式が入っているので、イベントを駆動するには「その計算セルが変わるために編集(入力)したセル」でひっかけます。


作成例:
private sub worksheet_change(byval Target as excel.range)
if application.intersect(target, range("C2:C1000")) is nothing then exit sub
userform2.textbox1 = range("B1").value
end sub

投稿日時 - 2012-07-17 21:37:34

お礼

早速の回答ありがとうございます!
自分なりに色々触っていたら、仰る通りの勘違いに気が付きました。

その後作ったコードで上手くいきました。
Private Sub worksheet_change(ByVal Target As Range)
If Target.Column = 3 Then
UserForm2.TextBox1.Text = Range("B1").Value
End If
End Sub

ありがとうございました!

投稿日時 - 2012-07-17 21:53:28

ANo.1

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

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

回答(1)

あなたにオススメの質問