アプリ版:「スタンプのみでお礼する」機能のリリースについて

QNo.3774822 「EXCELのマクロでBook1立ち上げ時に自動で別のBookを起動するには」(http://oshiete1.goo.ne.jp/qa3774822.html)でお世話になった者です。その節は多くの方にご回答いただき有難うございました。

前質問ではANo.6にて必要な回答が得られたため締め切り手続きを行ったのですが、この間にANo.7の回答をいただきました。この内容は私にとって大変興味深いもので早速試してみたのですが、私には高度な内容でうまく動作させられませんでした。既に締めていたため新たな質問もできず、こちらに質問させていただく次第です。

次のコードを正しく実行するための記述の仕方をアドバイスいただければ幸いです。

以下ANo.7のご回答者様の回答の抜粋です。

'=============================================
以下は、ほんのお遊びにしか過ぎませんが、こんなことが可能です。
なお、Book1... のような名称というのは、仮の名称であって、特に、それ自体が存在しているとはいえません。

Book1... のSheet1 のA1 に、hirakegoma と入ったときにだけ、別のファイルが開きますが、以下の「待ち時間」の4秒後を過ぎると、何も起こりません。4秒後に入れたものには何も起こりません。開いたと同時では、場合によってはマクロの検索は利かないはずです。

以下のマクロは、カプセル化もしておりませんし、本格的な内容ではありませんが、このようなことが可能です。また、別のソフトのインスタンス生成自体では、Excelのアプリケーションがどのような反応をするかは分かりません。

個人の場合は、"PERSONAL.XLS" ですが、他人に配布する場合は、アドインになると思います。

また、Excelが起動したときに、ブックの中身やブックの名称を全部調べるという方法も可能だと思います。

ループで、
For Each wb In Workbooks
 If wb.Name Like "Book#*" Then
   Workbooks.Open "Abc.xls"
 End If
Next

'-------------------------------------
'Class1
'-------------------------------------
Public WithEvents App As Application

Private Sub App_NewWorkbook(ByVal Wb As Workbook)
'待ち時間
Const TIMELAG As Integer = 4
  Set NewWb = Wb
  Application.OnTime Now + TimeValue("00:00:" & CStr(TIMELAG)), "OpenSesame"
End Sub

'--------------------------------------
'標準モジュール
'--------------------------------------
Public myClass As New Class1
Public NewWb As Workbook
Public Sub OpenSesame()
'添付用のブック
Const MYBOOK As String = "Test1.xls"
With NewWb.Worksheets(1)
 If StrComp(.Range("A1").Value, "HirakeGoma", 1) = 0 Then
  If Dir(MYBOOK) <> "" Then
   Workbooks.Open "Test1.xls"
  Else
   MsgBox MYBOOK & "のワークブックが見当たりません。", 48
  End If
 End If
End With
Set NewWb = Nothing
End Sub


'--------------------------------------
'ThisWorkbookモジュール
'--------------------------------------

Private Sub Workbook_Open()
 Set myClass.App = Application
End Sub

'標準モジュールのAuto_Openの場合は、オートメーションでは、そこを通らない可能性があるから、ThisWorkbook モジュールに入れたほうがよいです。Auto_Open は、あくまで、Excelを単独に開いたときだけです。

A 回答 (2件)

こんばんは。



前回の回答者です。

そのコード自体は、元は一般のブックのみで試されたものです。

うまく行かなかったとなると、一度、それを検査してみないと分からないのです。

せっかく、私宛にご質問をいただいたので、もう一度、きちんとお尋ねいたします。
たぶん、今は、私はイベントの種類を間違えのような気がしています。Open イベントではありませんが。

一つ質問なのは、
・その「別のアプリ」からExcel用のBook1 が現れたときには、それまでは、Excelは、立ち上がっていないのでしょうか?自動的にExcelが立ち上がるというものでしょうか?
つまり、Excelを持っていない人には使えない、というものでしょうか?

Excelが立ち上がったときに、そのデータが入れられたブックのみがあるという感じですか?

実は、私の考えの中の解決方法には、いくつか種類があるのですが、かといって、クラス-インタンスという形にひきづられてしまい、今回のお話は、厳密には確認していないのです。データの入り方には、大きく大別すると、2種類あるのですが、今回は今の形の延長の場合で良いような気がします。

本来は、どのようにデータが出てくるか、見れば分かるはずですが、どのようにしたらよいか、もう一度、検討してみます。今の予想では、あまり、複雑なことにはならないはずです。
    • good
    • 0
この回答へのお礼

早速ご回答いただき有難うございます。前回は大変お世話になりました。引き続き宜しくお願い申し上げます。

>その「別のアプリ」からExcel用のBook1 が現れたときには、それまでは、Excelは、立ち上がっていないのでしょうか?
>自動的にExcelが立ち上がるというものでしょうか?
>つまり、Excelを持っていない人には使えない、というものでしょうか?
>Excelが立ち上がったときに、そのデータが入れられたブックのみがあるという感じですか?

全てそのとおりです。使用するPCは1台のみで複数のスタッフが交代で使用します。

ところで、先ほど現物のソフトで色々試していたところ、吐き出した際に立ち上がるEXCELには個人用マクロブック(PERSONAL.XLS)が存在しないようです。プログラムがEXCELを立ち上げているからでしょうか。

EXCELは奥が深いですね。どうぞ宜しくお願いいたします。

お礼日時:2008/02/15 22:27

こんばんは。



>吐き出した際に立ち上がるEXCELには個人用マクロブック(PERSONAL.XLS)が存在しないようです。
>プログラムがEXCELを立ち上げているからでしょうか。

期待をさせて大変にすみません。ご指摘の通りでした。その立ち上がりが、オートメーションといって、

Set objExcel = CreateObject("Excel.Application")

こういうスタイルで、呼び出されているのではないか、ということに気がつきました。

Shell で呼び出しされているのなら可能ですが、その可能性は薄いです。理由は、データの吐きだしが利かないからです。

そうすると、例えば、アドインなども呼び出されてはいないはずです。本来、そのオートメーション側がある程度書き換えることが可能なら、この先の展開も可能なのですが、この場合は、自動起動するマクロ自体が、そのオートメーション側から呼び出さない限りは、使えないのです。

ただし、PESONAL.XLS 等に登録した、コマンドボタンの呼び出しだけには応じるようです。

だから、アドインでコマンドボタン自体を取り付けることは可能(XL2003以下)ですが、そのまま、自動起動というわけにはいかないようです。思うようにいかなくて、すみません。

この回答への補足

おはようございます。
とても丁寧な解説をいただき有難うございます。

やはり特殊な方法で呼び出されていたのですね。
この場合でも個人用マクロブックをボタンから呼び出せることが
わかっただけでも大きな収穫です。

面倒くさい質問に最後までお付き合いいただき有難うございました。
お陰さまでまた一歩前進することができました。

補足日時:2008/02/18 11:36
    • good
    • 0
この回答へのお礼

(お礼を補足につけてしまい失礼いたしました。)

おはようございます。
とても丁寧な解説をいただき有難うございます。

やはり特殊な方法で呼び出されていたのですね。
この場合でも個人用マクロブックをボタンから呼び出せることが
わかっただけでも大きな収穫です。

面倒くさい質問に最後までお付き合いいただき有難うございました。
お陰さまでまた一歩前進することができました。

お礼日時:2008/02/18 11:43

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