私はWindows 10、Delphi Berlin、およびMicrosoft Office 2007を使用します。開いているExcelウィンドウの数を取得しようとします。 Excelファイルをダウンロードして開くと別のExcelが実行されるため、1つのExcelウィンドウに1つのブックしか存在しません。Excel Application.Windows.Countは0を返します
Microsoft Office 12.0 Object Libraryをインポートして2つの手順を書きました。 Button1ClickはtExcelApplicationで動作し、Button2ClickはCreateOleObject( 'excel.application')で動作します。私がExcelを実行した後、前者はうまく機能しますが、Countはエディタだけでエラーとして認識され、後者は0を返します。
どのように迷惑なエラーメッセージを取り除くことができますか?あなたが遅延バインディングCOMを使用しているため
type
TForm1 = class(TForm)
ExcelApplication1: TExcelApplication;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption := IntToStr(ExcelApplication1.Windows.Count);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
_Excel: Variant;
begin
_Excel := CreateOleObject('excel.application');
Button2.Caption := _Excel.windows.count;
end;
同じ状況では、2つのプロシージャは異なる戻り値を生成します。 –
質問の2番目の部分は、なぜ後期バインドコードがゼロを返すのかです。それとも、初期バインドコードがゼロを返すのでしょうか?あなたは本当にウインドウがあることを100%確信していますか?エクセルは間違った価値を与えますか?信じがたい。 –
@JOS GetActiveOleObjectを試してみると、新しいExcelプロセスを起動している可能性があります。 –