加藤 (2011年5月20日 18:30) 企画開発部
Dim loCreateWorkbook As Workbook '// 新たなブックを作成する Set loCreateWorkbook = Workbooks.Add '// Excel2007以上の場合、Excel97 - 2003形式でBookを保存する If Application.Version > 11 Then loCreateWorkbook.SaveAs Filename:="C:\test\hoge.xls" _ , FileFormat:=56 Else loCreateWorkbook.SaveAs Filename:="C:\test\hoge.xls" End If '// 一度、保存して閉じて開き直すことにより '// Excel2007以上の場合の互換モードでのレスポンスを改善 Application.DisplayAlerts = False loCreateWorkbook.Save loCreateWorkbook.Close Application.DisplayAlerts = True Set loCreateWorkbook = Nothing Set loCreateWorkbook = Workbooks.Open("C:\test\hoge.xls")
Excel2003以前のバージョンで作成したマクロを、Excel2007以降のバージョンで実行する場合の注意点 「マクロから新しいブックを作成し、データを書き込もうとするとレスポンスが悪化する」
加藤 (2011年5月20日 18:30)
企画開発部
Excel2007以降のバージョンで実行する場合の注意点をご紹介します。
Excel2003以前のバージョンで、新しいブックを作成するマクロを実装します。
そのマクロが実装されているExcelファイルをExcel2007以降で開き、
互換モードでマクロを実行した場合、以下のような問題が発生します。
マクロから作成した新規ブックに対して、
そのままマクロでデータの書き込みを行おうとすると
レスポンスが著しく悪化します。
上記の問題に対して、以下のような方法で対処しました。
まず、マクロから作成したブックを保存して閉じてしまいます。
その後、すぐに先ほど閉じたブックを開き直し、
データを書き込むようにします。
すると、レスポンスが改善されます。
実装例を以下に記載しております。
Dim loCreateWorkbook As Workbook '// 新たなブックを作成する Set loCreateWorkbook = Workbooks.Add '// Excel2007以上の場合、Excel97 - 2003形式でBookを保存する If Application.Version > 11 Then loCreateWorkbook.SaveAs Filename:="C:\test\hoge.xls" _ , FileFormat:=56 Else loCreateWorkbook.SaveAs Filename:="C:\test\hoge.xls" End If '// 一度、保存して閉じて開き直すことにより '// Excel2007以上の場合の互換モードでのレスポンスを改善 Application.DisplayAlerts = False loCreateWorkbook.Save loCreateWorkbook.Close Application.DisplayAlerts = True Set loCreateWorkbook = Nothing Set loCreateWorkbook = Workbooks.Open("C:\test\hoge.xls")Excel2003以前のバージョンで作成したマクロで、
新しいブックを作成する処理を実装していた場合、
ユーザの環境がExcel2007以降のバージョンに変更になった際には、
上記の問題が必ず発生します。