Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1394 / 13646 ツリー ←次へ | 前へ→

【74739】テキストボックスとセルのリンク設定について minota 13/9/5(木) 18:05 質問[未読]
【74740】Re:テキストボックスとセルのリンク設定に... ichinose 13/9/5(木) 18:48 発言[未読]
【74742】Re:テキストボックスとセルのリンク設定に... minota 13/9/5(木) 19:13 お礼[未読]
【74744】Re:テキストボックスとセルのリンク設定に... kanabun 13/9/5(木) 20:36 発言[未読]
【74745】Re:テキストボックスとセルのリンク設定に... ichinose@ 13/9/5(木) 22:29 発言[未読]
【74746】Re:テキストボックスとセルのリンク設定に... minota 13/9/6(金) 5:54 お礼[未読]
【74741】Re:テキストボックスとセルのリンク設定に... kanabun 13/9/5(木) 18:53 発言[未読]

【74739】テキストボックスとセルのリンク設定につ...
質問  minota  - 13/9/5(木) 18:05 -

引用なし
パスワード
   こんにちは。質問させてください。当方EXCEL2003です

ユーザーフォームからシート上の各セルへ入力したいと思っています。

TextBox1 = Worksheets("Sheet1").Range("A1")

では、入力済みのセルの修正ができないので、ControlSourceでリンクさせようと思い、
ネットで調べて、この様なコードを入れてみましたが、全くリンクしません。

Sub UserForm1_Initialize()
 UserForm1.TextBox1.ControlSource = "A1"
End Sub

どうすればいいのでしょうか?

また、UserForm1に上記のコードをかきましたが、そこから間違っているのでしょうか・・・?

【74740】Re:テキストボックスとセルのリンク設定...
発言  ichinose  - 13/9/5(木) 18:48 -

引用なし
パスワード
   こんばんは。

>
>ユーザーフォームからシート上の各セルへ入力したいと思っています。
>
>TextBox1 = Worksheets("Sheet1").Range("A1")
>
>では、入力済みのセルの修正ができないので、ControlSourceでリンクさせようと思い、
これで、入力済みのデータをテキストボックスに戻して、入力完了後に
今度は逆にセルに戻せばよいのですけどねえ・・・。
入力完了後というタイミングは、イベントで管理します。
これは、一例ですが・・・。

Private Sub TextBox1_Enter() 
  TextBox1.Value = Worksheets("Sheet1").Range("A1").Value
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Worksheets("Sheet1").Range("A1").Value = TextBox1.Value
End Sub


>ネットで調べて、この様なコードを入れてみましたが、全くリンクしません。
>
>Sub UserForm1_Initialize()
> UserForm1.TextBox1.ControlSource = "A1"
>End Sub
これは、アクティブシートのセルA1と結ばれていますけど、よろしいですか?

>Sub UserForm1_Initialize()
 UserForm1.TextBox1.ControlSource = "Sheet1!A1"

>End Sub
より正確には、上記でしょうか?

書き込みは、Textbox1から、フォーカスが移るタイミングですから、
テストでは、コマンドボタンも作成しておいて、フォーカスがこのコマンドボタン
に移ったタイミングでセルに反映されます。
コマンドボタンというのは、例ですから、別のテキストボックスを作成して
試しても大丈夫です。

ControlSource を使う場合は、
イベントを使うなら、TextBox1_BeforeUpdateでしょうけど、これは、余計な話でした。

【74741】Re:テキストボックスとセルのリンク設定...
発言  kanabun  - 13/9/5(木) 18:53 -

引用なし
パスワード
   ▼minota さん:

ControlSourceでリンクさせようと思い、
>ネットで調べて、この様なコードを入れてみましたが、全くリンクしません。
>
>Sub UserForm1_Initialize()
> UserForm1.TextBox1.ControlSource = "A1"
>End Sub
>
>どうすればいいのでしょうか?

こうしてください

Sub UserForm_Initialize()  'UserForm1 ではなく UserForm です
 TextBox1.ControlSource = "A1" '自UserForm 内のコントロールですから
                ' Me.TextBox1 または Me 不要です。
End Sub

【74742】Re:テキストボックスとセルのリンク設定...
お礼  minota  - 13/9/5(木) 19:13 -

引用なし
パスワード
   ichinose さん ありがとうございます。

>これは、一例ですが・・・。

このコードで思った動作をしました。

ですが、次の問題はこのようなセルのリンク箇所が、ざっと80ヶ近くあるのです・・・。
全テキストボックスにこのコード追加するのは・・

また項目を後々追加する可能性もあるので、ControlSource構文で
offsetを使って処理できないかな、と思っていますが・・・無謀でしょうか?

>これは、アクティブシートのセルA1と結ばれていますけど
アクティブシートのコマンドボタンからフォームを立ち上げてリンクしたいので
OKです。

> UserForm1.TextBox1.ControlSource = "Sheet1!A1"
>より正確には、上記でしょうか?

こちらのコードでは、やはり動きませんでした。
ちなみに、ユーザーフォームにはテキストボックスが複数あり、フォーカスが
移っても無反応でした。

プロパティのControlSourceに直接指定すれば良いのでしょうが、
後々の操作性と、入力の手間が掛かり過ぎるのでコードでひとまとめにしたいのですが
無理な相談でしょうか・・・・?

【74744】Re:テキストボックスとセルのリンク設定...
発言  kanabun  - 13/9/5(木) 20:36 -

引用なし
パスワード
   ▼minota さん:よこからすみません m(_ _)m

>こちらのコードでは、やはり動きませんでした。

気が付いていらっしゃらないといけないので、しゃしゃり出ました ...
くりかえします。

> Sub UserForm1_Initialize()
 TextBox1.ControlSource = "A1"
End Sub

がいけないので、
そこを

Sub UserForm_Initialize()
 TextBox1.ControlSource = "A1"
End Sub

と直せば、TextBox1が更新されたら シートの[A1]セルが連動して更新され
るし、シートの[A1]セルに変更があれば、TextBox1のTextがリアルタイムで
更新されると思いますよ!!

【74745】Re:テキストボックスとセルのリンク設定...
発言  ichinose@  - 13/9/5(木) 22:29 -

引用なし
パスワード
   >
>> Sub UserForm1_Initialize()
> TextBox1.ControlSource = "A1"
>End Sub
>
>がいけないので、
>そこを
>
>Sub UserForm_Initialize()
> TextBox1.ControlSource = "A1"
>End Sub

原因は、これでしたねえ!!
気が付きませんでした。

テキストボックスを使って、エラー処理がないなら、もうこれで
コードは簡単ですね!!
80個のControlSourceの設定は、
dim i as long
i=1

Controls("textbox" & i).ControlSource = "A" & i

これも一例ですが、上記コードから、iを使って ループ(For〜Next、Do〜Loop文)させればOKですね!!

【74746】Re:テキストボックスとセルのリンク設定...
お礼  minota  - 13/9/6(金) 5:54 -

引用なし
パスワード
   遅くなって申し訳ありません

>ichinose@ さん
> kanabun さん

ありがとうございました。
希望する動作ができました。

For〜NEXT を使って ループさせる事もできました。

初歩的な質問に回答してくださってありがとうございました。

1394 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free