1

Excelファイルが開いているかどうかを確認しようとしています。既存の開いているファイルを使用している場合。そうでない場合は、ファイルを開きたいです。

このコードは空白の msgbox を与えるだけです:

SetTitleMatchMode 2
xlWB := "MyExcelWorkbookTitle"

if(!WinExist(xlWB)) {
  xl := ComObjCreate("Excel.Application")
  FileSelectFile, Path
  xl.Workbooks.Open(Path)
  xl.Visible := True
  WinActivate %xlWB%
} else {
  xl := ComObjCreate("Excel.Application")
  WinActivate %xlWB%
}

rowCount := xl.ActiveSheet.UsedRange.Rows.Count - 1
MsgBox %rowCount%

ここで何が間違っていますか?

編集: 明確にするために、これはワークブックが開いていないときに正しく機能しますが、既に開いているブックがある場合は、別のブックを読み取り専用として開きます。

簡単に言えば、これを実行したいのです。ファイル名の最初の x 文字が定義済みの文字列と一致するブックが開いている場合は、そのブックを使用し、それ以外の場合は新しいブックを開きます。

EDIT2: 私がコーディングしようとしている状況についても言及する価値があると思いました。ユーザーが最初にスクリプトを実行すると、Excel ワークブックが開き、Web ページの値が更新されます。その過程で失敗し、スクリプトが終了する場合があります。その時点で、ユーザーは、スクリプトが失敗する前に実行した行のエントリが保存されていない開いたブックを残します。

スクリプトを再実行し、既存の開いているワークブックを com オブジェクトにアタッチして、スクリプトを通常どおり実行できるようにしたいと考えています。

これを行うより良い方法はありますか?Web サイトの更新で問題が発生した場合は、スクリプトを保存してブックを閉じる必要がありますか?

または、スクリプトを終了せずにループを繰り返し、次の Excel 行で再試行するようにスクリプトをコーディングしますか?

4

1 に答える 1