Excel VBA質問箱 IV

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

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


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

【33633】別のbookで開いたUserFormにデータを挿入したい mitu 06/1/17(火) 9:45 質問[未読]
【33634】Re:別のbookで開いたUserFormにデータを挿... Jaka 06/1/17(火) 9:56 発言[未読]
【33636】Re:別のbookで開いたUserFormにデータを挿... mitu 06/1/17(火) 11:30 発言[未読]
【33641】Re:別のbookで開いたUserFormにデータを挿... Jaka 06/1/17(火) 12:14 発言[未読]
【33685】一応。 Jaka 06/1/18(水) 11:35 発言[未読]
【33679】Re:別のbookで開いたUserFormにデータを挿... ichinose 06/1/18(水) 6:43 発言[未読]
【33721】Re:別のbookで開いたUserFormにデータを挿... mitu 06/1/19(木) 9:08 お礼[未読]

【33633】別のbookで開いたUserFormにデータを挿入...
質問  mitu  - 06/1/17(火) 9:45 -

引用なし
パスワード
   いつもお世話になっています。

1.book1で、UserForm1を作成し、Book1のアクティブシートのセルの内容を表示させています。

次に、この状態(UserForm1はアクティブのまま)で、2.Book2を開き、3.Book2のアクティブシートのセルの内容を、UserForm1のTextBox1に取り込みたいのです。


1.、2.までは、問題なくできたのですが、3.の処理ができません。

ご教授のほど、よろしくお願いします。

【33634】Re:別のbookで開いたUserFormにデータを...
発言  Jaka  - 06/1/17(火) 9:56 -

引用なし
パスワード
   Workbooks("Book2").Sheets("XXX").Range("A1").value
とか
ActiveSheet.range("B1").value
で、取得できますよ。
どうやって取得しているのでしょうか?

【33636】Re:別のbookで開いたUserFormにデータを...
発言  mitu  - 06/1/17(火) 11:30 -

引用なし
パスワード
   ▼Jaka さん:
早速の返答有難うございます。

>Workbooks("Book2").Sheets("XXX").Range("A1").value
>とか
>ActiveSheet.range("B1").value
>で、取得できますよ。
>どうやって取得しているのでしょうか?

Book2でセルを選択した情報を、Book1で開いたUserForm1に取り込むことができないのです。

Book2のPrivate Sub Workbook_SheetSelectionChange
の中に気持ち的には、
Workbooks("Book1").UserForm1.TextBox=activecell.value
のように記載したいのです。

【33641】Re:別のbookで開いたUserFormにデータを...
発言  Jaka  - 06/1/17(火) 12:14 -

引用なし
パスワード
   他ブックのフォームは操作できません。

方法としては、他ブックのマクロに変数を渡して、そこから実行すれば出来るかもしれないですがやった事無いです。。

【33679】Re:別のbookで開いたUserFormにデータを...
発言  ichinose  - 06/1/18(水) 6:43 -

引用なし
パスワード
   mitu さん,Jaka さん,おはようございます。

>
>>Workbooks("Book2").Sheets("XXX").Range("A1").value
>>とか
>>ActiveSheet.range("B1").value
>>で、取得できますよ。
>>どうやって取得しているのでしょうか?
>
>Book2でセルを選択した情報を、Book1で開いたUserForm1に取り込むことができないのです。
>
>Book2のPrivate Sub Workbook_SheetSelectionChange
>の中に気持ち的には、
>Workbooks("Book1").UserForm1.TextBox=activecell.value
>のように記載したいのです。

記述内容から推測すると、BOOK1のユーザーフォームはモーダレスで表示されて
いるということですね?

Jaka さんの方法をコードにすると・・・、

まずBook1のユーザーフォーム(Userform1)のセル内容を表示する
テキストボックスをTextbox1とします。

Book1のThisworkbookのモジュールに
'====================================================
Sub main()
  UserForm1.Show vbModeless
End Sub
'====================================================
Function getfrm(frmnm) As Object
  Dim frm As Object
  Set getfrm = Nothing
  For Each frm In UserForms
   If UCase(frm.Name) = UCase(frmnm) Then
    Set getfrm = frm
    Exit For
    End If
   Next
End Function


book2の対象シートモジュールに(仮にSheet1)
'==================================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim frm As Object
  Set frm = Workbooks("book1").getfrm("userform1")
  If Not frm Is Nothing Then
    frm.Controls("textbox1").Value = ActiveCell.Value
    End If
End Sub


これで試してみて下さい

【33685】一応。
発言  Jaka  - 06/1/18(水) 11:35 -

引用なし
パスワード
   ichinoseさんが書かれたようなコードじゃないのでおまけ程度で...。
尚、97だと普通にモードレスで起動出来ないのでテストしてないけど、昨日2000でテストした時は、こんな感じで動いてました。

別ブック(test.xls)の標準モジュール
(このブックのフォームがモードレスで起動済みとして)
Sub 転機1(変数)
  UserForm1.TextBox1.Value = 変数
End Sub

メインブック?のシートモジュールに
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  Application.Run ("test.xls!転機1"), Target.Value
End Sub

【33721】Re:別のbookで開いたUserFormにデータを...
お礼  mitu  - 06/1/19(木) 9:08 -

引用なし
パスワード
   ▼ichinose さん
早速ご丁寧にご教授いただきありがとうございました。

他のbookのUserFormには、簡単に操作できないとのことで、仕方なく自分なりに、
book1側にbook2のデータを挿入するマクロを記載しておき、それをbook2から都度呼び出すことで処理することを考えていました。

教えていただきましたスマートな方法で問題なく処理できました。
Set frm = Workbooks("book1").getfrm("userform1")
の用法が大変勉強になりました。

解決に苦闘しておりまして、拝見するのが遅れ御礼がおそくなりましたこと御容赦ねがいます。

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