ほとんどのユーザーが行っていないOffice2016にアップグレードしたところ、ユーザーがスクリプトを実行しようとすると新しいエラーが発生します。
「コンパイルエラー、プロジェクトまたはライブラリが見つかりません」
参照を調べたところ、「Microsoft Word 16.0オブジェクトライブラリ」を参照しようとしているようで、Office 2013を実行しているマシンにありません。参照を2013バージョンに変更するオプションが表示されず、表示されません。全員をアップグレードせずにユーザーに2016リファレンスへのアクセスを許可する方法を知っている(現時点ではオプションではありません)。
このエラーは、コードの最初の実行可能行で発生します
Set app = Range("A2")
このようにExcel.Range( "A2")を使用するには、Excel 15.0オブジェクトライブラリを含めるか、以下に示すように遅延バインディングを使用する必要があります。
Dim excelApp As object, r as object
Set excelApp = CreateObject("Excel.Application")
Set r = excelApp.Range("A2")
VBAプロジェクトがOfficeアプリを参照するOfficeドキュメントは、それ以降のOfficeバージョンでも機能します。それ以降のバージョンでそれらを開くと、それらはその新しいバージョンを参照しているように見えます。
ただし、そのようなファイルを新しいバージョンのOfficeで保存してから、元のOfficeバージョンで開くと、ファイルが属するOfficeアプリ以外のOfficeアプリへの参照がMISSING:
になります。
つまり、ExcelとWordを参照するExcelファイルがある場合、Office 2016で再保存してから、Office 2013で開くと、Excelへの参照は問題ありませんが、Wordへの参照はMISSING:
。
これを回避するには、サポートしている最も古いOfficeバージョンでファイルを常に保存するか、他のOfficeアプリへの参照を完全に削除し、 遅延バインディング を使用してそれらを呼び出します。