Guten Morgen,
ich will Daten in eine (bereits geöffnete) Excel-Tabelle eingeben. Dazu soll mein Programm zunächst mal die Zeile der Tabelle finden, in der sich eine bestimmte Objektnummer befindet, die ich in Edit1 eingebe (übergebe ich an die String-Variable "ObjNr").
Mein Prog liefert mir die Fehlermeldung:
...raised
exception class EVariantError with message "Invalid variant type conversion"...
Das komische ist: Nach dieser Fehlermeldung funzt Excel nicht mehr, wenn ich eine beliebige ".xls" Datei anklicke. Selbst wenn mein Prog bzw. Delphi geschlossen ist. Es geht erst wieder nach Neustart.
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Excel2000, OleServer, StdCtrls, ComCtrls, Clipbrd;
...
type
...
ExcelQueryTable1: TExcelQueryTable;
ExcelApplication1: TExcelApplication;
ExcelChart1: TExcelChart;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
ExcelOLEObject1: TExcelOLEObject;
...
procedure TForm1.Button1Click(Sender: TObject);
var
vArray, WS : OleVariant;
aRange : Range;
i, lc: Integer;
ObjNr, adr, temp: String;
begin
ExcelApplication1.Connect;
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveSheet as _Worksheet);
WS := ExcelApplication1.ActiveSheet as _Worksheet;
If Edit1.Text <> '' then begin
ObjNr := Edit1.Text;
zeile := 1;
spalte := 2;
repeat
inc(zeile);
until
(WS.Cells.Item[zeile,spalte].Value = ObjNr) or (WS.Cells.Item[zeile,spalte].Value = 'xx');
If (WS.Cells.Item[zeile,spalte].Value = ObjNr) then Edit2.Text := WS.Cells.Item[zeile,4].Value +' '+WS.Cells.Item[zeile,5].Value;
end else begin
If Edit2.Text <> '' then begin
adr := Edit2.Text;
//zeile := 1;
spalte := 4;
repeat
inc(zeile);
until
(Pos(adr,WS.Cells.Item[zeile,spalte].Value) > 0) or (WS.Cells.Item[zeile,spalte].Value = 'xx');
If (Pos(adr,WS.Cells.Item[zeile,spalte].Value) > 0) then begin
Edit2.Text := WS.Cells.Item[zeile,4].Value +' '+WS.Cells.Item[zeile,5].Value;
Edit1.Text := WS.Cells.Item[zeile,2].Value;
end;
end;
end;
Label1.Caption := WS.Cells.Item[zeile,20].Value;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
end;
Was mache ich falsch?
Gibt es einen Befehl, mit dem man bei derartigen Fehlern Excel wieder zum laufen bringt, ohne den Rechner neu starten zu müssen?
Gruß, Stephan.