Доброе время суток, господа!
Пишу класс по экспорту DBGridEh в Excel. Класс находится в отдельном модуле. Объявляю переменную типа этого класса, пытаюсь начать работать, но выдает сообщение об ошибке в какой то момент. Класс ошибки: EVariantBadVarType, сообщение: "Invaid variant type."
procedure TExpt.Init( aBeforeText, aAfterText : TMemo; aGrid : TDBGridEh; CreateImmediately, Colored : boolean );
var b : boolean;
begin
BeforeText := aBeforeText;
AfterText := aAfterText;
Grid := AGrid;
Excel := CreateOLEObject( 'Excel.Application' ); <--- Здесь выдает ошибку.
Excel.Application.EnableEvents := false;
Вызываю так:
procedure TForm1.Button1Click(Sender: TObject);
var exp : TExport;
begin
exp.Init(bt,at, dg,false, false);
end;
А>Подскажите, пожалуйста, в чем может быть ошибка.
Тип переменной Excel то у тебя скорее всего Variant (хоть ты и не привел объявление этой переменной), вот и ругается. Поставь нормальный тип, и все будет хорошо. Вернее не все будет хорошо, код мне что-то не нравится, но это мелочи
Re[2]: "Invaid variant type." при использовании класса.
Ну, да. Тип как раз таки вариант. И в листинге это показано.
А какой тогда тип должен быть? Всегда использую вариант при работе с экзелем. И в примерах тоже экзель, обычно.
Re[3]: "Invaid variant type." при использовании класса.
Здравствуйте, Азамат, Вы писали:
А>А какой тогда тип должен быть? Всегда использую вариант при работе с экзелем. И в примерах тоже экзель, обычно.
На самом деле я даже близко не дельфист, на дельфях писал один раз в жизни 6 лет назад, что-то подобное твоему . Я тогда контрол для работы с экселем использовал, а не Variant тип. Но вообще, по идее, CreateOLEObject( 'Excel.Application' ) должен возвращать указатель на IDispatch интерфейс. Уже вспомнить не могу, является ли это подтипом Variant, но кажись не является. Можно попробовать там в отладчике breakpoint попробовать поставить и в watch добавить CreateOLEObject('Excel.Application' ) посмотреть какой тип вернется, его и задать.
Re: "Invaid variant type." при использовании класса.