Excel VBA質問箱 IV

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

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


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

【8619】別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 11:47 質問
【8621】Re:別のブックのUserFormのTextBoxの値を変更 INA 03/10/27(月) 13:20 回答
【8627】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 16:04 質問
【8629】Re:別のブックのUserFormのTextBoxの値を変更 INA 03/10/27(月) 16:13 回答
【8631】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 17:05 質問
【8632】Re:別のブックのUserFormのTextBoxの値を変更 INA 03/10/27(月) 17:42 回答
【8633】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 18:10 お礼
【8628】Re:別のブックのUserFormのTextBoxの値を変更 ichinose 03/10/27(月) 16:11 回答
【8630】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 17:00 質問
【8634】Re:別のブックのUserFormのTextBoxの値を変更 ichinose 03/10/27(月) 18:13 発言
【8635】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/27(月) 18:51 質問
【8638】Re:別のブックのUserFormのTextBoxの値を変更 ichinose 03/10/27(月) 21:16 発言
【8641】Re:別のブックのUserFormのTextBoxの値を変更 123 03/10/28(火) 11:05 お礼

【8619】別のブックのUserFormのTextBoxの値を変更
質問  123  - 03/10/27(月) 11:47 -

引用なし
パスワード
   みなさん こんにちは 123です。

またまた お助けください。

2つのブックがあります。
Book1のUserForm1にあるTextBox1の値を
Book2のUserForm1にあるTextBox1の値に変更したいのです。

2つのブックは開かれている状態です。

Book2の値はちょくちょく変わり、その都度変更したいのです。
(Book2のUserForm1には、コマンドボタンがあり、これにより
変更処理をしたいのです。)
可能なようでしたらご教示願います。

【8621】Re:別のブックのUserFormのTextBoxの値を...
回答  INA  - 03/10/27(月) 13:20 -

引用なし
パスワード
   Book2のセルにでも書き込んで、参照させるのが簡単だと思うけど・・

【8627】Re:別のブックのUserFormのTextBoxの値を...
質問  123  - 03/10/27(月) 16:04 -

引用なし
パスワード
   INA さん こんにちは

じつは、Book2のコマンドボタンを使って、
Book1の中身をいじろうとしています。

しかも、Book1は Application.Interactive=Falseにしてあります。

Book2のコマンドボタンで、
1. Book1を開き
2. 中身を変更して
3. 保存してBook1を閉じる
をやろうとしています。

* 会社の他の人(VBAを知らない人)でも、データの更新が
できるようにしようと思っています。

無理でしょうか?

【8628】Re:別のブックのUserFormのTextBoxの値を...
回答  ichinose  - 03/10/27(月) 16:11 -

引用なし
パスワード
   ▼123 さん:
こんにちは。

>またまた お助けください。
>
>2つのブックがあります。
>Book1のUserForm1にあるTextBox1の値を
>Book2のUserForm1にあるTextBox1の値に変更したいのです。
>
>2つのブックは開かれている状態です。
>
>Book2の値はちょくちょく変わり、その都度変更したいのです。
>(Book2のUserForm1には、コマンドボタンがあり、これにより
>変更処理をしたいのです。)
>可能なようでしたらご教示願います。
Book1.xlsの標準モジュールに以下のコードをコピーして、
'====================================================
Function get_frm()
  Set get_frm = UserForm1
End Function

book2.xlsのユーザーフォーム内のコマンドボタンのクリックイベントで
'======================================================
Private Sub CommandButton1_Click()
  TextBox1.Text = Application.Run("book1.xls!get_frm").TextBox1.Text
'   ↑は、book2.xlsのユーザーフォームにあるテキストボックスね!!
End Sub

参照したいデータがテキストボックス一つだけなら、INAさんがおっしゃっているように
セルを使用してデータを渡す方法が簡単かもしれませんが。

【8629】Re:別のブックのUserFormのTextBoxの値を...
回答  INA  - 03/10/27(月) 16:13 -

引用なし
パスワード
   このようなときは、たいていブックの保護を使っています。

あらかじめBook1を保護しておいて、
1.Book1を開く
2.保護を解除
3.中身を変更
4.保護を再設定
5.保存してBook1を閉じる

いかがでしょうか?

【8630】Re:別のブックのUserFormのTextBoxの値を...
質問  123  - 03/10/27(月) 17:00 -

引用なし
パスワード
   ichinose さん こんにちは。

すみません。ちょっと説明が下手で。

Book1のUserForm1にあるTextBox1のValue を genzai
にしたいのです。
genzai は Book2のUserForm1にあるTextBox1の値を変数に代入したものです。

ichinoseさんからご教示いただいたコードを条件に合うようにやってみましたが、
うまくいきません。
何が間違っているのでしょうか?


Book1.xlsの標準モジュール
'====================================================
Function get_frm()
  Set get_frm = UserForm1
End Function


book2.xlsのユーザーフォーム内のコマンドボタンのクリックイベントで
'======================================================
Private Sub CommandButton1_Click()

dim genzai as Sstring

  Application.Run("book1.xls!get_frm").TextBox1.Text = genzai
End Sub

【8631】Re:別のブックのUserFormのTextBoxの値を...
質問  123  - 03/10/27(月) 17:05 -

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

>あらかじめBook1を保護しておいて、
>1.Book1を開く
>2.保護を解除
>3.中身を変更
>4.保護を再設定
>5.保存してBook1を閉じる

3の中身を変更のところで、Book1のUserForm1にあるTextBox1の
値を変更したいのですが、VBAの知らない人に更新をさせるので、
ボタン一つで完了させてあげたいのです。
TextBox1の値を genzai (変数)に変更したいのです。
genzai は Book2のTextBox1の値を変数代入したものです。

説明が下手ですみません。

【8632】Re:別のブックのUserFormのTextBoxの値を...
回答  INA  - 03/10/27(月) 17:42 -

引用なし
パスワード
   >3の中身を変更のところで、Book1のUserForm1にあるTextBox1の
>値を変更したいのですが、VBAの知らない人に更新をさせるので、
>ボタン一つで完了させてあげたいのです。
>TextBox1の値を genzai (変数)に変更したいのです。
>genzai は Book2のTextBox1の値を変数代入したものです。

ichinoseさんの方法で出来ますよ?

【8633】Re:別のブックのUserFormのTextBoxの値を...
お礼  123  - 03/10/27(月) 18:10 -

引用なし
パスワード
   INA さん

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

またよろしくお願い致します。

【8634】Re:別のブックのUserFormのTextBoxの値を...
発言  ichinose  - 03/10/27(月) 18:13 -

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

>すみません。ちょっと説明が下手で。
いいえ、私が間違えていたようですが・・・。
但し、
>  Application.Run("book1.xls!get_frm").TextBox1.Text = genzai
↑さえ、修正すれば、動いていますけどね。


>genzai は Book2のUserForm1にあるTextBox1の値を変数に代入したものです。
>
>ichinoseさんからご教示いただいたコードを条件に合うようにやってみましたが、
>うまくいきません。
本当は、どのようにうまくいかないのか知りたいのですが・・(何々のエラーでここで止まるとか、エラーにはならないけど、正しく表示されないとか)。

Book1.xlsのユーザーフォーム(userform1)もbook2.xlsのユーザーフォーム(userform1)も共にモーダーレスモードで表示されている状態で動いています。


>何が間違っているのでしょうか?
>
>
>Book1.xlsの標準モジュール
>'====================================================
>Function get_frm()
>  Set get_frm = UserForm1
>End Function
>
>
>book2.xlsのユーザーフォーム内のコマンドボタンのクリックイベントで
>'======================================================
>Private Sub CommandButton1_Click()
>
>dim genzai as String
   genzai=textbox1.text
>  Application.Run("book1.xls!get_frm").TextBox1.Text = genzai
>End Sub

【8635】Re:別のブックのUserFormのTextBoxの値を...
質問  123  - 03/10/27(月) 18:51 -

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

Book1が表示されている時は
TextBox1の値が表示されているのですが、
それを保存して、再度Book1を開いてみると
また、元のTextに戻っています。
プロパティのTextに何も入れなければよいのかと
思いましたが、同じことでした。

プロパティ内のTextを直接書き換えなければいけないのでしょうか?

閉じなければOKだったのですが...

【8638】Re:別のブックのUserFormのTextBoxの値を...
発言  ichinose  - 03/10/27(月) 21:16 -

引用なし
パスワード
   ▼123 さん:
こんばんは。
>
>Book1が表示されている時は
>TextBox1の値が表示されているのですが、
>それを保存して、再度Book1を開いてみると
>また、元のTextに戻っています。

book1.xlsのUserform1のTextbox1のTextプロパティを書き換えて保存しても
再度Book1.xlsを開けば、書き換えた内容は表示されませんよ。


>プロパティ内のTextを直接書き換えなければいけないのでしょうか?
↑そういうことです。

お奨めはしませんが、情報として、
例えば、Book2.xlsのユーザーフォーム(Userform1)には、
テキストボックス(Textbox1)と変更ボタン(Commandbutton1)と
決定ボタン(CommandButton2)を用意してみましょう。
フォームモジュールに
'===========================================================
Dim frm
'=================================================
Private Sub CommandButton1_Click()
'Book1.xlsのTextbox1を変更する
  Dim genzai As String
  genzai = TextBox1.Text
  Set frm = Application.Run("book1.xls!get_frm")
  frm.TextBox1.Text = genzai
End Sub
'==================================================
Private Sub CommandButton2_Click()
'変更を確定する
  Dim genzai As String
  genzai = frm.TextBox1.Text
  Unload frm
  Set frm = Nothing
  Call set_vbp_textbox(Workbooks("book1.xls"), "UserForm1", "TextBox1", genzai)
End Sub
'=======================================================================
Sub set_vbp_textbox(wk As Workbook, formname As String, tbx_nm As String, set_data)
'ユーザーフォームのテキストボックスを書き換える
  Dim vbc
  With wk.VBProject
    Set vbc = .VBComponents(formname)
    vbc.Designer.Controls(tbx_nm).Text = set_data
    End With
End Sub


Book1.xlsの保存するコードは省略しますが、これでbook1.xlsのテキストボックスの内容が変更されると思います。
ただ、これは、Book1.Xlsのプログラムを書き変えることになってしまいます。
(私は、このようなコードは、作成したプログラムの編集用にしか使用していません)
たぶん、私が123 さんだったら、上記のようなコードにはしないと思います。

変更したbook1.xlsのTextbox1の内容をbook1.xlsの所定のセルに入れてから保存する。
ユーザーフォームを表示するときにその所定のセルから逆にTexbox1へ設定する。
という方法がよいと思いますがいかがでしょうか?

【8641】Re:別のブックのUserFormのTextBoxの値を...
お礼  123  - 03/10/28(火) 11:05 -

引用なし
パスワード
   ichinose さん こんにちは

いろいろとありがとうございました。

>変更したbook1.xlsのTextbox1の内容をbook1.xlsの所定のセルに入れてから保存する。
>ユーザーフォームを表示するときにその所定のセルから逆にTexbox1へ設定する。
>という方法がよいと思いますがいかがでしょうか?

そうですね やはり、Book1の見えない場所に書き込んでから保存させ、Book1のTextBox1の表示時に読み込ませることにしました。

お手数をおかけいたしました。

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