3

私はVB6アプリケーションを何年も実行しています。このアプリケーションは、過去に XLS ファイルを作成するために常に Excel 2003 を参照していました。ここで、2003 の代わりに Excel 2010 を使用したいと考えています。そのため、別の開発用コンピューターに Excel 2010 のみをインストールし、vb6 プロジェクトをロードしました。

アプリを実行すると、「Microsoft Excel 10.0 Object Library」が見つからないというエラーが表示されました。これは、このコンピューターに Excel 2010 のみがインストールされており、Excel 2003 がインストールされていないためです。

問題は、正しい参照が必要なときに、「Microsoft Excel 14.0 Object Library」またはこの参照を置き換える同等のものを見つけられなかったことです。

なにか提案を?

ありがとう。

4

1 に答える 1

2

アーリー バインドされた参照は "バインド" されており (しゃれを許してください)、異なる Excel バージョンのユーザーにアプリケーションを配布する際に問題が発生します。

サポートする予定の最も古いバージョンの Excel の遅延バインディングとコーディングを使用することが解決策です。たとえば、Excel 2000 をサポートしている場合、アプリケーションは Excel 2000 でサポートされているメソッドのみを使用します。

ただし、コードが遅延バインドされている場合は、あいまいなメソッド呼び出しを使用してローカル バージョンを検出し、実行するコードを決定できます。

元:

Dim excelVersion As Long  
Dim xl As Object

' get a reference to Excel.Application maybe from AddinInstance_OnConnection()?  
excelVersion = Val(xl.Version)

Select Case excelVersion 
Case 11 ' Excel 2003
  ' Excel 2003-only methods here
  ' ex: xl.FileSearch
Case 12 ' Excel 2007
  ' Excel 2007-only methods here
Case 14 ' Excel 2010
  ' Excel 2010-only methods here
  ' ex: something with Slicers
End Select

コードはレイト バインド (つまり、オブジェクトから派生) であるため、Excel 2010 でのみ有効なメソッドを指定でき、コードは引き続きコンパイルされます。コードが Excel 2003 に早期にバインドされていた場合、コンパイルされません。実行時に、使用するメソッドを決定するためにバージョンを決定します。

Excel 2010 固有の機能を使用している場合は、アプリケーションのさまざまなバージョンをコンパイルすることも検討してください。それが可能かどうかはあなただけが知っているでしょう。

また、この回答を書いた後にこれを考えましたが、アプリで Excel 2010 を参照できませんか。以前のバージョンの Excel を搭載したコンピューターにインストールされている場合、参照は Excel のバージョンに自動的に調整されませんか?インストールされていますか?

于 2012-06-29T22:53:05.570 に答える