人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

自分のPC上で、Windowsタスクスケジューラーに VBAでロジックが書かれたExcelを登録して毎晩、夜中に実行しています。
ところが、Excelを起動したままにしていると、タスクスケジューラーから実行されたExcelが別スレッド(別のエクセルのフレーム)で起動されてしまい、「PERSONAL.XLS は編集のためロックされています。」というメッセージが現れExcelが止まってしまいます。
これを回避するにはどのようにしたらよいでしょう?
PERSONAL.XLSには必要なVBAが登録されているので、削除できません。

以下のいづれかの方法があれば、いいのかな?と思っているのですが、もちろん他の方法でも構いません。
(1) タスクスケジューラーからExcelを起動するときに、もしExcelが既に起動済みであれば、そのスレッド内で実行するようにする。
(2) タスクスケジューラーからExcelを起動するときだけ、PERSONAL.XLSを無効にする。
(3) タスクスケジューラーからExcelを起動するときだけ、PERSONAL.XLSを読み取り専用で開く。

よい解決方法があればご教授ください。
よろしくお願いします。

●質問者: beatgoeson
●カテゴリ:コンピュータ
✍キーワード:Excel pc VBA Windows xls
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● de6
●5ポイント

ただ単に、エクセル・VBAの問題だけではなく、他のソフトがたまたま邪魔をする場合があります、シンクロ時にほとくにそうなりがちです、代表例がソースネクストの驚速パソコンとかがあります、一度マイクロソフトに詳しい事情を話し、解決策があると思います。インシデントはとらないと思います。

http://q.hatena.ne.jp/1264473007

◎質問者からの返答

回答ありがとうございます。

これはExcel,VBAのテクニックの問題でした。


2 ● heke2mee
●20ポイント

やり方を2つ紹介します。たぶん今回のケースだとマクロを分ける方だと思いますが、

起動オプションの方は簡単なので試してください。


【起動オプションで読み取り専用で開く方法】

<Excelのパス>EXCEL.EXE" /r ブック名



【マクロをわける方法】

1.PERSONAL.XLSに書かれているマクロの中身をメモ帳に保存する。(バックアップとして)

2.新規ブックを開き「ツール」「マクロ」「Visual Baic Editor」を選択する。

3.プロジェクト内にある「ThisWorkbook」か「標準モジュール」に必要なマクロをコピーする。

4.自動実行させたいマクロのプロシージャ名はSub Workbook_Open() にする。

(たぶん、PERSONAL.XLSでそうしてるはず)

5.ブックに名前を付けて保存する。

(通常のブックにするか、テンプレートにするかはお任せします。テンプレートにする場合は

ファイルの種類をテンプレートにしてください。)

6.PERSONAL.XLSからマクロを削除する。(プロセスで当たるので使わないようにする。もしかしたらファイル削除かも)

7.タスクスケジューラーに今回作成したBookまたはテンプレートを登録する。

8.同じように、PERSONAL.XLSに残っているマクロを別のテンプレートにする。

(こちらは毎回使うのでテンプレート)


「テンプレート」とは

拡張子がxltになっているファイルです。このテンプレートを開くと新しいブックに内容が

コピーされて開きます。

◎質問者からの返答

回答ありがとうございます。

3の回答にありますとおり、起動オプション/r ではPERSONAL.XLSは読み取り専用にはなりませんでした。

マクロを分ける方法は、試してませんがアイデアとしてはいいかもしれません。


3 ● SALINGER
●55ポイント ベストアンサー

起動オプションで読み取り専用にしても、PERSONAL.xlsは読み取り専用で開けないような気がするのですが。

それでいろいろ試した結果、次の方法で(1)を実現できます。


テキストファイルに次のようなコードを書いて、ファイル名をtask.vbsのように変更します。

つまりvbsファイルからエクセルを起動しようというわけです。

Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "rundll32.exe url.dll,FileProtocolHandler C:\Documents and Settings\hogehoge\デスクトップ\task.xls", 1, False
Set objWShell = Nothing

※起動するブックのパスに変更してください。


このvbsファイルをタスクスケジューラから実行すると、Excelは同じスレッドで起動されるので回避できます。

◎質問者からの返答

回答ありがとうございます。

思うような動きになりました。助かりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ