今日、すこしハマってびっくりしたこと。
Excel操作ライブラリで急にブックの開き直しされるようになった。
なんか、途中まで編集したやつも問答無用で開き直しされてリセットされるー!!!
特に、エラーが出る訳でもない。実行ッてやったらすごい勢いでExcelが再起動する。
なんじゃこりゃ????てなった。
原因は、拡張子抜けてるだけだった。
拡張子が抜けてると、スクリプトの中で
「開いてればそれつかう、開いてなければ新規で開く」っていう処理が空振りして
毎回新規で開こうとするから強制終了して開き直しになってしまうみたいだ?
' ====指定されたファイルを開く====================================================
' ファイルのパスをフルパスに変換する
Set fso = CreateObject("Scripting.FileSystemObject")
filePath = fso.GetAbsolutePathName(!ファイル名!)
' workbookオブジェクトを取得する
Set workbook = Nothing
On Error Resume Next
' 既存のエクセルが起動されていれば警告を抑制する
Set existingXlsApp = Nothing
Set existingXlsApp = GetObject(, "Excel.Application")
existingXlsApp.DisplayAlerts = False
' 一先ずWorkbookオブジェクトをGetObjectしてみる
Set workbook = GetObject(filePath)
Set xlsApp = workbook.Parent
' GetObjectによって新規に開かれたWorkbookなら
' 変数にNothingを代入することで参照が0になるため
' 自動的に閉じられる。
Set workbook = Nothing
' Workbookがまだ存在するか確認する
For Each book In xlsApp.Workbooks
If StrComp(book.FullName, filePath, 1) = 0 Then
' Workbookがまだ存在するので、このWorkbookは既に開かれていたもの
Set workbook = book
xlsApp.Visible = True
End If
Next
' Workbookが存在しない場合は、新たに開く。
If workbook Is Nothing Then
Set xlsApp = Nothing
' Excelが既に開かれていたならそれを再利用する
If Not existingXlsApp Is Nothing Then
Set xlsApp = existingXlsApp
xlsApp.Visible = True
Else
Set xlsApp = CreateObject("Excel.Application")
xlsApp.Visible = True
End If
Set workbook = xlsApp.Workbooks.Open(filePath)
End If
' 警告の抑制を元に戻す
existingXlsApp.DisplayAlerts = True
Set existingXlsApp = Nothing
On Error Goto 0
If workbook Is Nothing Then
Err.Raise 1, "", "指定されたファイルを開くことができません。"
End If
普段なら拡張子抜けの凡ミスとかなかなか発生しないんだけども、システムから「名前付けて保存」する時に拡張子絞り込み入ってたから拡張子なしのフルパス使って、そのままExcelライブラリのファイル名にそれ使ったらこうなった?
ショボいけど、自分でこれハマったら結構焦るぜ?