[[20091218102415]] 『片方の実行マクロをバックグラウンドで実行するに』(はな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『片方の実行マクロをバックグラウンドで実行するには』(はな)
以下のような他ブックのプロシージャを呼び出すマクロを作成したのですが、
呼び出し元と先のブックの表示が交互に表示されるのを回避したいのです。
やりたいことは呼び出し先のマクロはバックグラウンドで実行されるようなことをしたいです。

呼び出し元も呼び出し先もThisWorkbook.Activateを残したままにしたいというが大前提としてあるのですが、
呼び出し先だけを裏で動いているような(非表示)ことにすることは可能でしょうか?
ScreenUpdatingを使用してもあまり効果がないようです。

御教授お願い致します。
エクセル2003、OSはXPです。

【呼び出し側ブック】

Sub 他ブックのプロシージャ実行()

    With SoftMake
        Application.Run "'XXX.xls'!他のブックからプロシージャ実行", "シート1"
	ThisWorkbook.Activate
        .Cells(65, 5).Interior.Color = RGB(153, 153, 255)  '紫
        Application.Run "'XXX.xls'!他のブックからプロシージャ実行", "シート2"
	ThisWorkbook.Activate
        .Cells(71, 5).Interior.Color = RGB(153, 153, 255)  '紫
        Application.Run "'XXX.xls'!他のブックからプロシージャ実行", "シート3"
	ThisWorkbook.Activate
        .Cells(89, 5).Interior.Color = RGB(153, 153, 255)  '紫
    End With

End Sub

【呼び出し先ブック】

Sub 他のブックからプロシージャ実行(FileName As String)

    Dim WBk As Object
    Dim wkFlg As Boolean

    ThisWorkbook.Activate
    wkFlg = False   'シート存在しない

    For Each WBk In Sheets              '全てのシートを対象
        If WBk.Name = FileName Then     '同じ名前のシートある?...YES
            wkFlg = True  '存在した
            Exit For                    '終了
        End If
    Next WBk

    If (wkFlg = False) Then
        MsgBox "シート[" & FileName & "] は存在しません"
    End If

End Sub


 前回の質問
[[20091217153933]]『他ブックのプロシージャ呼び出を行い戻り値を取得するには?』(はな)
 でも書きましたが、なぜ他のブックのプロシージャを実行する必要があるのか?
 という事が疑問なのですが、シートが存在するかどうかでしたら自ブックから出来ますし。
 Select同様にActivateも必要ないと思います。
 どうしても・・・というのでしたらApplication.ScreenUpdate=Falseにしてから処理して
 終わりにTrueに戻せばよいですが、後々色々問題が出そうなロジックですね。
 (momo)

 (momo)さん、ご回答ありがとうございます。

なぜ他のブックのプロシージャを実行する必要があるのか?

説明不足で大変申し訳ありませんでした。

会社で使用しているツールの改造をしているのですが、

作成している途中で作成困難になった処理だけを抜き出して簡易的にお聞きしていました。

そこで、そのツール自体の機能を間単に説明いたしますと、

・あるデータを吐き出すツールです。

・データ自体は呼び出し先(子)でシート単位持っています

・呼び出し元(親)で、呼び出し先(子)のブック、シートを管理しますが、

 データの吐き出しは(子)のマクロで実行します。
 
・基本、親は子のブック、シートを指定し、子のマクロを呼び出すだけです。

もともとは親のほうでデータシートも持っていたのですが、

データ作成者が多数いるのと、データ自体のボリュームが膨大になってきたので、

データを一元管理するのに限界が生じてきたのが改造の理由です。

また、子のほうのデータ吐き出しマクロに

Application.ScreenUpdating = False

ThisWorkbook.Activate

 〜省略〜
Application.ScreenUpdating = True

としても子のほうで吐き出し中は何故か子のブックが表示されてしまいます。


 今のご説明ですと
 他のブックのプロシージャを呼び出す理由は無さそうですね。

 >・基本、親は子のブック、シートを指定し、子のマクロを呼び出すだけです。 

 そのような場合、普通は マクロブック と データブック に分けます。
 マクロブックは入出力も含めて処理のみ
 データブックはデータのみ
 これを基本として組み立てておかないとさらに大変な作業を強いられる事になりますよ

 ちなみに、今はなさんがやろうとしている事は全部親ブックから出来る作業だと思います。
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.