|
初投稿なので失礼があるかもしれませんが宜しくお願いいたします。
【開発環境】
Excel 2016
【目的】
開かれているすべてのブックのシートの一覧リストが表示されるユーザーフォームを作成しています(アドインファイル)。最終的にはリスト上のシート名をクリックすると,そのシートに移動するようなものを作りたいと考えております。
【問題点】
今,ブックAとブックBが開かれており,ブックA上でアドインファイルのユーザーフォームを起動します。ブックA内のシート間の移動は簡単なのですが,ブックBのシートに移動する際に問題があります。というのも,ブックB上の対象シートのアクティブは容易なのですが,ユーザーフォームはブックAで開かれているため,ブックBがアクティブになった時点でユーザーフォームが隠れてしまします。
【質問】
ブックAで起動したユーザーフォームをブックBに引継くないし,ブックBで再起動したいのですが,何か方法はありますでしょうか。
なおブックAおよびブックBには何もマクロは記述せず,すべてアドインファイルのモジュールに記述しなくてはなりません。
助言のほど宜しくお願いいたします。
現在のコードを簡単にすると以下のようになります。参考になれば幸いです。
アドインファイル
【標準モジュール】
Sub Callback_QuickSheetAccess(Control As IRibbonControl)
UserForm1.Show vbModeless
'アドインファイルがインストールされた時点ですでに新規タブにリボンが作成されている。
End Sub
【ユーザーフォーム】
Private Sub UserForm_Initialize()
dim ws, wb
With Listbox1
.Clear
For Each wb In Workbooks
.AddItem wb.Name
For Each ws In wb.WorkSheets
.AddItem " " & ws.Name
'1マス開けることでツリービューを再現しているつもり
Next
Next
End With
End Sub
Private Sub Listbox1_Click()
Dim Cnt, BookName, SheetName
With Listbox1
'シート名以外がクリックされていた場合は終了
If Left(.Value, 1) <> " " Then Exit Sub
'ブック名の取得
Cnt = .ListIndex
Do While Left(.List(Cnt), 1) = " "
Cnt = Cnt - 1
Loop
BookName = .List(Cnt)
'シート名の取得(先頭の" "を除外するため次のようになる)
SheetName = Right(.Value, Len(.Value) - 1)
'移動
Workbooks(BookName).Activate
Workbooks(BookName).Worksheets(SheetName).Activate
'このままでは移動はできるがユーザーフォームが別ブックに引き継げない…
'Application.Run ブック名!プロシージャ名ではブックAからアドインファイルのマクロを呼ぶだけなので目的が果たせませんでした
End With
End Sub
|
|