0

私は、ワークシートをロードするExcelのインスタンスとロードしないExcelのインスタンスを区別する方法を見つけようとしてきました。

現在、コードを使用して、次のような既存のファイルを開きます。

Dim wkbWorkBook as Excel.Workbook
Dim objExcel As Excel.Application

wkbWorkBook = System.Runtime.InteropServices.Marshal.BindToMoniker(filename) 
objExcel = wkbWorkBook.Parent

'To make the excel app visible while working with it: 
objExcel.Visible  = true

このコードを使用しているときに気付いたのは、存在するがExcelで開かないファイルを開いた場合、Excelアプリケーションを表示すると、ワークシートは表示されませんが、存在します(アクセスできます)ワークシート.countおよび適切な数のシートがあります)

Worksheets.Visibleを使用してみましたが、「Visible」の値が表示される場所にHRESULTエラーしかないことに気付きました。 コード内のエラーはワークシートのプロパティに表示されます

ワークシートが表示されている場合でもVisibleプロパティを取得しようとすると、同じエラーが発生します(現在Excelで開いているファイルをBindToMoniker()にした場合)。

私の質問の一部は、なぜBindToMoniker()+ Application = workbook.Parentが、シートがロードされていないExcelアプリケーションを常に提供してくれるのかということです。

4

1 に答える 1

0

保証はありませんが、worksheets.visible->は機能しません。これは、worksheetsがワークシートのリストを提供するためです。

その上に.visibleを適用することはできません->worksheets(1).visibleを使用する必要があります

さらに、ワークシートがない場合、これはとにかく失敗するはずです。最初にワークシートの数を確認する必要があります。

もう1つのこと-相互運用機能を備えたvb.netでこれが可能かどうかはわかりませんが、内部コード名を使用して特定のワークシートにアクセスできる可能性があります-次のようになります。

pobjExcel.table1.visible
于 2012-09-11T14:34:06.610 に答える