Excel VBA質問箱 IV

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

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


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

【52156】他ブックのユーザーフォームを呼ぶ acch 07/10/25(木) 15:09 質問[未読]
【52157】Re:他ブックのユーザーフォームを呼ぶ Jaka 07/10/25(木) 15:55 発言[未読]
【52237】Re:他ブックのユーザーフォームを呼ぶ acch 07/11/2(金) 22:21 質問[未読]
【52238】Re:他ブックのユーザーフォームを呼ぶ そ... ichinose 07/11/3(土) 8:02 発言[未読]
【52239】Re:他ブックのユーザーフォームを呼ぶ そ... ichinose 07/11/3(土) 8:40 発言[未読]
【52241】Re:他ブックのユーザーフォームを呼ぶ そ... acch 07/11/3(土) 17:52 お礼[未読]

【52156】他ブックのユーザーフォームを呼ぶ
質問  acch  - 07/10/25(木) 15:09 -

引用なし
パスワード
   教えてください。
ブックAのユーザーフォーム1からブックBのシートBを呼び出し、コントロールでブックAのユーザーフォーム1に戻ろうと思います。しかし、ブックBのシートBのPrivate Sub commandButton_Click()に useform1.show と記述しましたが、ブックAのユーザーフォーム1を記述したせいか、Useform1.Show にならず、当然のことながら、実行時にエラーになります。どうしたらいいのでしょうか。

【52157】Re:他ブックのユーザーフォームを呼ぶ
発言  Jaka  - 07/10/25(木) 15:55 -

引用なし
パスワード
   tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=33633;id=excel
【33633】別のbookで開いたUserFormにデータを挿入したい
  ↑
下の記事番号にこれを打ち込んでも行けます。(トップだけど)

【52237】Re:他ブックのユーザーフォームを呼ぶ
質問  acch  - 07/11/2(金) 22:21 -

引用なし
パスワード
   book1上のUserform1 をクリックすると boo2のUserform1 が起動するようにしたいのです。


試しに下記のように記述してみましたが、動きません。
どこに問題がありますか?????

' Sub main() を起動
' Userform1 が表示される
 --- ここまでは動作しているようです --------  

’==== 以下、Book1 の ThisWorkbook に記述   =
Sub main()
 Call book1_opn '対象のブックをオープン
 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.xls").getfrm("userform1")
 If Not frm Is Nothing Then
 frm.Show
 End If
End Sub

【52238】Re:他ブックのユーザーフォームを呼ぶ ...
発言  ichinose  - 07/11/3(土) 8:02 -

引用なし
パスワード
   ▼acch さん:
おはようございます。

>book1上のUserform1 をクリックすると boo2のUserform1 が起動するようにしたいのです。

↑という仕様ならば・・・、

>
>試しに下記のように記述してみましたが、動きません。
>どこに問題がありますか?????

提示されたコードでは、仕様とまったく違います。
>
>' Sub main() を起動
>' Userform1 が表示される
> --- ここまでは動作しているようです --------  
>
>’==== 以下、Book1 の ThisWorkbook に記述   =
>Sub main()
> Call book1_opn '対象のブックをオープン
> UserForm1.Show vbModeless
>End Sub


>Function getfrm(frmnm) As Object
'このFunctionは、Book1にあるロードされているユーザーフォームが対象です
> 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)
'このイベントプロシジャー、 
'冒頭の仕様で記述された
'「book1上のUserform1 をクリックすると boo2のUserform1 が起動するようにしたいのです。」

'仕様とは関係ないプロシジャーですよね!!

> Dim frm As Object
> Set frm = Workbooks("book1.xls").getfrm("userform1")
'↑これで取得できるは、Book1のUserform1ですよね?(ロードされていれば)
> If Not frm Is Nothing Then
> frm.Show
> End If
>End Sub

私には、仕様とコードの関係がよくわかりません。

次投稿に続く。

【52239】Re:他ブックのユーザーフォームを呼ぶ ...
発言  ichinose  - 07/11/3(土) 8:40 -

引用なし
パスワード
   ちょっと仕様を変更して

「Book1.xls上のUserform1上にあるコマンドボタンをクリックすると Book2.xlsのUserform1 が起動するようにする」という例題で考えます。

新規にBook1.Xls、Boo2.Xlsを作成します。

Book1.Xls及び、Book2.Xlsは同じフォルダ上に保存することとします。

Book1.Xlsには、ユーザーフォーム(Userform1)ひとつ作成してください。
  Userform1の構成
    テキストボックス(Textbox1)をひとつ配置
    コマンドボタン(Commnadbutton1)をひとつ配置
    ↑このボタンのクリックでBook2.XlsのUserform1を表示します

Book1.XlsのThisWorkBookのモジュールに
'===================================================
Option Explicit
Public bk2 As Workbook
Sub main()
 Set bk2 = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
 UserForm1.Show vbModeless
End Sub

UserForm1のモジュールに
'===============================================================
Private Sub CommandButton1_Click()
  ThisWorkbook.bk2.get_frm.Show vbModeless
End Sub


'*************************************************************************

Book2.Xlsには、ユーザーフォーム(Userform1)ひとつ作成してください。
  Userform1の構成
    テキストボックスをふたつ配置(Textbox1,Textbox2)
    ↑このテキストボックスに意味はありませんが、Book1.XlsのUserForm1と
     区別するためにテキストボックスの数を変えました。


Book2.XlsのThisWorkBookのモジュールに
'====================================================================
Function get_frm() As Object
  Set get_frm = UserForm1
End Function


これで準備完了です。

一度、Book1.Xls、Book2.Xls共に閉じた後、
Book1.Xlsのみを開いてください。

Book1.XlsのThisWorkbook.mainを実行してください。

Book2.Xlsを開いた後に
Book1.XlsのUserform1が表示されます。

Commandbutton1をクリックしてください
Book2.XlsのUserform1が表示されます。
(Book1.XlsのUseform1が隠れてしまいますが、
Book2.XlsのUserfrom1をずらしてふたつのユーザーフォームが表示されていることを
確認してみてください)


これがうまくいくようなら、実際の対象となるブックに応用してください

【52241】Re:他ブックのユーザーフォームを呼ぶ ...
お礼  acch  - 07/11/3(土) 17:52 -

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

早速の回答ありがとうございます。
試しにやって見ました。私の希望する動きのようです。


応用してみて、うまく解決できましたらあらためてお礼を申し上げます。


>ちょっと仕様を変更して
>
>「Book1.xls上のUserform1上にあるコマンドボタンをクリックすると Book2.xlsのUserform1 が起動するようにする」という例題で考えます。
>
>新規にBook1.Xls、Boo2.Xlsを作成します。
>
>Book1.Xls及び、Book2.Xlsは同じフォルダ上に保存することとします。
>
>Book1.Xlsには、ユーザーフォーム(Userform1)ひとつ作成してください。
>  Userform1の構成
>    テキストボックス(Textbox1)をひとつ配置
>    コマンドボタン(Commnadbutton1)をひとつ配置
>    ↑このボタンのクリックでBook2.XlsのUserform1を表示します
>
>Book1.XlsのThisWorkBookのモジュールに
>'===================================================
>Option Explicit
>Public bk2 As Workbook
>Sub main()
> Set bk2 = Workbooks.Open(ThisWorkbook.Path & "\book2.xls")
> UserForm1.Show vbModeless
>End Sub
>
>UserForm1のモジュールに
>'===============================================================
>Private Sub CommandButton1_Click()
>  ThisWorkbook.bk2.get_frm.Show vbModeless
>End Sub
>
>
>'*************************************************************************
>
>Book2.Xlsには、ユーザーフォーム(Userform1)ひとつ作成してください。
>  Userform1の構成
>    テキストボックスをふたつ配置(Textbox1,Textbox2)
>    ↑このテキストボックスに意味はありませんが、Book1.XlsのUserForm1と
>     区別するためにテキストボックスの数を変えました。
>
>
>Book2.XlsのThisWorkBookのモジュールに
>'====================================================================
>Function get_frm() As Object
>  Set get_frm = UserForm1
>End Function
>
>
>これで準備完了です。
>
>一度、Book1.Xls、Book2.Xls共に閉じた後、
>Book1.Xlsのみを開いてください。
>
>Book1.XlsのThisWorkbook.mainを実行してください。
>
>Book2.Xlsを開いた後に
>Book1.XlsのUserform1が表示されます。
>
>Commandbutton1をクリックしてください
>Book2.XlsのUserform1が表示されます。
>(Book1.XlsのUseform1が隠れてしまいますが、
>Book2.XlsのUserfrom1をずらしてふたつのユーザーフォームが表示されていることを
>確認してみてください)
>
>
>これがうまくいくようなら、実際の対象となるブックに応用してください

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