VBScriptで描かれたファイルを使ってExcelのファイルを処理しています。今までこの処理を行うファイルはローカルドライブにあったのですが、セキュリティの関係でネットワーク上のファイルサーバにファイルを保管し、そこで処理を行うことになりました。
【問題】ネットワークドライブのファイルの処理が遅い!
今まで1分もかからずに終わっていたファイル処理が、ネットワーク上で行うと10~20分ほどかかります。おまけに処理中にWindowが消える場面があるため、もはや処理中なのかそうでないのかわからないようになってしまいました。
【原因特定】ファイルへの追記に原因があったっぽい
このVBScriptは処理の途中でいくつかの中間ファイルを作成し、投入されたExcelのファイルを分解して少しずつ中間ファイルに投入する処理を行います。処理したいExcelファイルがあるフォルダに中間ファイルや結果のファイルを保存するようになっていたので、ファイルサーバー上の中間ファイルに何度も何度も追記する過程で時間を要していたようでした。
【対応策】中間ファイルだけはローカルに
この処理では以下の部分で投入したファイルのフォルダを取得し、ここに中間ファイルを作るようになっていました。
DirName = ObjFST.ParentFolder
中間ファイルをローカルに作成するようにしたかったので、もう一つDirName2を定義し、以下のようにローカルのデスクトップのパスを取得するようにしました。
DirName2 = CreateObject(“Wscript.Shell”).SpecialFolders(“Desktop”)
最終ファイルの保存先はDirNameのままで、中間ファイルはDirName2に保存するようにした結果、ローカルとほぼ同じ速度で処理ができるようになりました。
※ローカルでの保存場所はデスクトップというものなんですので適宜調整します。
その他のフォルダを指定する場合は、以下が参考になります。
https://learn.microsoft.com/ja-jp/dotnet/api/system.environment.specialfolder?view=net-8.0
【メモ】VBAとVBSの違い
違いを述べられるほどの理解は無いんですが、どちらもよく聞きながら何が違うんだろうと思ってました。どちらも基本的には同じような構文みたいですが、それぞれだけのものもあるみたい。VBAのほうはExcel等のアプリの中からアクセスして使う、VBSはWindows上で動く間そんな違いがあるみたいです。細かいこといろいろ調べてみてください。