dポイントプレゼントキャンペーン実施中!

マクロを含むBook1のシート1上にボタンを配置。それぞれ下記のTestA,TestBを起動するようにしています。
やりたいことは、マクロを含むブックとは別のエクセルアプリケーションを立ち上げて、
Book1.xlsx・・・を開き、 後で、マクロを含むブックからBook1.xlsx・・・を呼び戻すことです。

TestAのマクロは、問題なく(多分)動きますが、TestBのマクロでは、Book1.xlsx が前面に表示されません。
別のエクセルの世界のブックを如何に掴み、且つ、制御する方法について、教えていただきたいのです。よろしくお願い致します。

Sub TestA()
Dim objExcel2
Set objExcel2 = CreateObject("Excel.Application")
objExcel2.Workbooks.Open "C:\Users\User1\ents\Book1.xlsx"
objExcel2.Visible = True
Set objExcel2 = Nothing

Dim objExcel3
Set objExcel3 = CreateObject("Excel.Application")
objExcel3.Workbooks.Open "C:\Users\User1\Documents\Book2.xlsx"
objExcel3.Visible = True
Set objExcel3 = Nothing

Dim objExcel4
Set objExcel4 = CreateObject("Excel.Application")
objExcel4.Workbooks.Open "C:\Users\User1\Documents\Book3.xlsx"
objExcel4.Visible = True
Set objExcel4 = Nothing
End Sub

Sub TestB()
Dim Myxl As Object
Set Myxl = GetObject("C:\Users\User1\Documents\Book1.xlsx", "Excel.Sheet")
Myxl.Activate 'エラーとはならないが、画面には、出てこない
Myxl.Application.Visible = True  'エラーとはならないが、画面には、出てこない
End Sub

尚、別のエクセルアプリケーションを立ち上げた理由は、ベースのエクセルシート(マクロを含むBook) を開いた状態で、小さなWindowで"book1.xlsx"・・・を表示させたかったからです。

A 回答 (1件)

こんばんは。


お久しぶりです。

>別のエクセルアプリケーションを立ち上げた理由は、ベースのエクセルシート(マクロを含むBook) を開いた状態で、小さなWindowで"book1.xlsx"・・・を表示させたかったからです。

何か、難しいことをされているようですが、再現性が得られません。もしかしたら、こういうことをおっしゃっているのでしょうか。ちゃんと理解しているわけではありませんが、この場合は、Aで非表示でも、Bのマクロは、前面にTest1.xlsxが出てきます。単独で、Bでも可能です。むしろ、Aのマクロは意味がありません。使わなくてもよいです。

しかし、オートメーション・オブジェクトを4つも作ったら、たぶん、いろんな所で支障がでるかもしれません。

'//
Sub TestA()
 Dim objExcel2 As Excel.Application
 Dim wb2 As Workbook
 Dim fn As String
 fn = "C:\Users\User1\My Documents\Test1.xlsx"
 Set objExcel2 = CreateObject("Excel.Application")
 'objExcel2.Visible = True
 Set wb2 = objExcel2.Workbooks.Open(fn)
 Set objExcel2 = Nothing
End Sub

Sub TestB()
 Dim wb2 As Excel.Workbook
 Dim objExcel2 As Excel.Application
 Dim fn As String
 fn = "C:\Users\User1\My Documents\Test1.xlsx"
 On Error Resume Next
  Set wb2 = GetObject(fn)
 Set objExcel2 = wb2.Application
 objExcel2.Visible = True
 If Err() <> 0 Then
  Set objExcel2 = CreateObject("Excel.Application")
  objExcel2.Visible = True
  Set wb2 = objExcel2.Workbooks.Open(fn)
 End If
 On Error GoTo 0
 With objExcel2
  .Width = 330
  .Height = 390
 End With
 Set wb2 = Nothing
 Set objExcel2 = Nothing
End Sub
'///
    • good
    • 0
この回答へのお礼

WindFallerさん
遅くなりました。ありがとうございます。
結論から言って、複雑にすることは止めることにしました。
苦労する割には、安定性に不安が残る感じがします。
ユーザーインターフェースの観点から、ボタンを押せば
参照エクセルブックが小さなウィンドウで現れ、
元に戻る時も、簡単なのかな・・・
でも、参照エクセルファイルにアクセスする時は、
画面下のアイコンを押せ・・・と定義すれば良いだけの話。

多数のオートメーション・オブジェクトを作ると云々、
便利ではあるが、それに寄り掛かりすぎるのもよろしくない、
という考えで、やっていきたいと思います。
ありがとうございました。

お礼日時:2015/10/31 17:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A