今日、すこしハマってびっくりしたこと。
Excel操作ライブラリで急にブックの開き直しされるようになった。
なんか、途中まで編集したやつも問答無用で開き直しされてリセットされるー!!!
特に、エラーが出る訳でもない。実行ッてやったらすごい勢いでExcelが再起動する。
なんじゃこりゃ????てなった。
原因は、拡張子抜けてるだけだった。
拡張子が抜けてると、スクリプトの中で
「開いてればそれつかう、開いてなければ新規で開く」っていう処理が空振りして
毎回新規で開こうとするから強制終了して開き直しになってしまうみたいだ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
' ====指定されたファイルを開く==================================================== ' ファイルのパスをフルパスに変換する 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ライブラリのファイル名にそれ使ったらこうなった?
ショボいけど、自分でこれハマったら結構焦るぜ?