刻々と変更が生じるエクセルファイルを、離れた別PCで常時表示するため、

エクセルを変更する度に、「Webページとして保存」を行い、
離れた別PCではIEで表示し、10秒ごとに再表示をするVBスクリプトを作りました。

初めてですが、何とか動作するものは出来ましたが、
1,2週間経過すると正常に動作しておらず(再表示ができていない)、悩んでおります。

当初はキャッシュの関係もあり、「ページを表示する度に確認する」に変更し、
また、24時間起動PCでしたが、「システムリソースがいっぱい」とのメッセージがでていたことが
あった為、週1回スケジュールで再起動するようにしました。
(自動ログイン、タスクにIE表示VBS起動)

それでも、2週間程度で最新の状態に再表示されなくなります。
エラー処理をどの様に行えばよいのか、具体的にアドバイス頂けたらと思います。
恐れ入りますが、宜しくお願いします。

※エクセル、htmファイル共にサーバー上にあり、
各端末はドメインに参加しております。
インターネット一時ファイルのサイズは2Mにしてあります。
XP
excel 2000
IE6

回答の条件
  • 1人5回まで
  • 登録:2008/03/07 18:40:05
  • 終了:2008/03/14 18:45:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/03/07 20:06:24

ポイント35pt

いただいた情報だけでは状況がほとんど分からないのですが、WSHでExcelを駆動しているとしたら、シートを変更するためにExcelを起動していませんか? 複数個のExcelが立ち上がってリソース不足になっているような気がします。


参考サイト

id:seragullwing

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

エクセル操作はVBSではしておりません。

下記VBSにあるようにIEでhtmファイルを常時表示しています。

(再表示を繰り返し)

PCは立ち上げたままで他の人は操作は一切せず見るだけです。

refreshを繰り返すため、内部的に何かあるのかなと思っているぐらいで、

原因やエラー処理がよくわからないのです。

2008/03/07 21:01:14
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402008/03/08 13:10:19

ポイント35pt

>refreshを繰り返すため、内部的に何かあるのかなと思っているぐらいで

メモリーリークしてるか、

メモリーが断片化されてるのにガーベージコレクションがうまく動作してない

可能性があると思います。

(1)案1

http://www.thescripts.com/forum/thread468654.html

iframeを使って、EXCELから作成したHTMLを表示させる。

リロードは、HTML内でVBS(or Javascript)でタイマーで

動作させる。

WSHは、最初のIE起動だけ行ってほかは何もしない。

(2)案2

ループの中で定期的に

Ie = Nothing

Ws = Nothing

とかしてオブジェクトを開放して、でもって

再度オブジェクトを生成するようなロジックにしてみてはどうか?

(3)案3

1日ぐらいで、起動したWSHのスクリプトは終了させる。

終了する前にATコマンドで、WSHの起動を予約しておいて

再度WSHでIEを起動させる。

id:seragullwing

ありがとうございます。

知識がないので2,3あたりが対応できる範囲かなと思います。

やはりメモリ関係でなにか影響が出ている可能性が高いのですね。

2008/03/10 20:43:16
  • id:seragullwing
    作成したVBSです。

    Option Explicit
    On Error Resume Next

    Dim Ws,Ie

    Set Ws = CreateObject("WScript.Shell")
    Set Ie = WScript.CreateObject("InternetExplorer.Application")

    Ie.Navigate "\\サーバー名\フォルダA\表示するファイル.htm"
    Ie.Document.Title = "タイトル名"
    Ie.ToolBar = 0
    Ie.StatusBar = 0
    Ie.Width=1024
    Ie.Height = 735
    Ie.Left = 0
    Ie.Top = 0
    Ie.Visible = 1
    Ws.AppActivate("タイトル名")

    Do While Ie.Busy
    WScript.Sleep 100
    Loop

    Do While true
    WScript.Sleep 10000
    Ie.Refresh()
    Ie.Document.Title = "タイトル名"
    Loop

    Ie = Nothing
    Ws = Nothing
  • id:haruo-31
    まず On Error Resume Next を取り除いて、
    どこかでエラーが出ないか確認した方が良いです。

    「エラーが出るから、スルーしている」というやり方だと、
    現在ぶつかっている問題などの原因になりやすいですよ。
    基本的にエラーが出ないという書き方は重要です。
  • id:KUROX
    >10秒ごとに再表示をするVBスクリプトを作りました。
    支障がないのなら、20秒ごとに変えてみては?

  • id:seragullwing
    ありがとうございます。
    On Error ~ は決まり文句かと思っていました。
    取り除いて様子をみます。
  • id:seragullwing
    ありがとうございます。
    頻繁にrefreshが何かあるのでしょうか?
    30秒ぐらいにしてみます。
  • id:haruo-31
    むしろ更新間隔を5秒とか3秒とかにして、挙動が変わるか確認した方がいいかも知れません。
    あと、短くすることで動かなくなるまでの時間が変わるかなども見るべきでしょう。
  • id:pahoo
    #1で回答した者です。
    WSHでIEを動かしているようですが、無限ループはマズイです。スクリプトはワンショットで終わらせないと、システムリソース不足を起こします。
    Web保存したExcelコンテンツに meta name="refresh タグを付加し、IE側で自動更新するようにしてはいかがでしょうか。
  • id:ardarim
    質問から読み取れなかったのですが、そもそも「システムリソースがいっぱい」の状態になってしまうのは、Excelを稼動している方のPCなのでしょうか?
    それともIEで更新表示を行っているPCなのでしょうか?

    また現象が出た時に、タスクマネージャでメモリやプロセス状態など見てみてはいかがでしょう。
  • id:haruo-31
    >pahooさん

    無限ループは確かに良くないですが、別に無限ループするからといって必ずしもシステムリソースの不足につながるとは言えません。
    要はどう書くかです。おそらくseragullwingさんは元のHTMLファイルを運用の理由か何かで修正したくないのでしょう。
    meta name=refreshといえば、よく考えたらWSH要らなくね?と思ってしまいましたが、それは回答者に委ね…

  • id:seragullwing
    いろいろと頂きありがとうございます。
    説明不足が多々あり申し訳ないです。

    エクセル変更者はその都度、「ファイル」-「Webページで保存」をし、
    htmファイルへ上書きしています。(後にマクロ化予定)

    表示専用のPCはofficeがないため、上記htmファイルをIEで
    常時表示するようにしてあります。
    こちらでループ処理となる為、「システムリソース不足」が出ていたことがあります。
    現在は週1で再起動としたため、それは出ないのですが、日数が経つと更新がとまってす。

    meta name=refresh はhtmファイルのソースを変更ということでしょうか。
    上記で書いたようにhtmファイルへエクセルを上書きしてますので、
    別にhtmファイルを表示するhtmが必要ということでしょうか。
    タグなどの知識が皆無なので、少し調べて見ます。

    いろいろありがとうございます。
  • id:ardarim
    meta name=refreshによる更新は、お手軽ですが、今回のようにずっとループで更新させることを期待すると思わぬ問題が出ることがあります。
    ほんの一瞬でもネットワーク障害とかファイルアクセス中(Excelから書き込む瞬間)などでリフレッシュできなかった場合、IEのエラーページに切り替わってしまい、以降リフレッシュできなくなってしまうからです。(連続運転試験などでこういう方法を使うことがありますが、たまにおきます)

    やるとしたら、ローカルでフレームつきのページを作っておいて、フレーム1に更新スクリプトを、フレーム2に表示させるURLを入れる。
    フレーム1側でスクリプトを使って定期的にフレーム2をリフレッシュする、というのが現実的かなと思います。
  • id:seragullwing
    HTMLで基本的なものを作って、refreshしてみました。
    自動更新できていたので、こんな簡単な方法があったのかと
    思いましたが、常時起動では同じように問題があるのですね・・。

    フレームを二つという方法は私にはちょっと敷居が高いのかなと・・
    もう少し勉強してみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません