わんすけに聞いてみる WinActor [WinActor]Excelライブラリでブックが開き直される

[WinActor]Excelライブラリでブックが開き直される

今日、すこしハマってびっくりしたこと。

 

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ライブラリのファイル名にそれ使ったらこうなった?

ショボいけど、自分でこれハマったら結構焦るぜ?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Related Post