Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

сообщение об ошибке invalid variant operation   Найти похожие ветки 

 
Сафаров ©   (2005-12-04 13:00) [0]

использую переменную типа вариант для работы с Экселом.
В разделе private формы:
ExcelApp:variant;
в процедуре:
ExcelApp := CreateOleObject ("Excel.Application");
ExcelApp.WorkBooks.Add;   //далее идут отобранные поля
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[1,1] := "Наименование";
// и т.д.
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;
все работает.
Чуть -чуть усложняю задачу. Пытаюсь дать пользователю возможность прервать выполнение экспорта. Вставляю на форму кнопку, на событие onClick которой вставляю код:
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;
Так вот на первой команде выдается сообщение "invalid variant operation". Почему это происходит? Спасибо


 
jack128 ©   (2005-12-04 13:23) [1]

Сафаров ©   (04.12.05 13:00)
Так вот на первой команде выдается сообщение "invalid variant operation". Почему это происходит? Спасибо

а ты когда на эту кнопку нажимаешь то?? Те что VarIsClear(ExcelApp) возвращает??


 
Сафаров ©   (2005-12-04 13:35) [2]

false


 
Сафаров ©   (2005-12-04 13:40) [3]

но адрес меняется с $0018c3ec на $0019a054


 
Сафаров ©   (2005-12-04 13:50) [4]

try
   ExcelApp := CreateOleObject ("Excel.Application");
except
  MessageDlg("Не могу загрузить Microsoft Excel", mtError, [mbOK], 0);
  Exit;
end;
ExcelApp.Application.EnableEvents := false; //ускоряю вывод в Эксел
ExcelApp.WorkBooks.Add;   //далее идут отобранные поля
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[1,1] := "Наименование";
qMain.Close;  //запрос к базе
qMain.Open;
m:= qMain.RecordCount;
ProgressBar1.Max:=m;
for i:=1 to m do
  begin
   ExcelApp.ActiveWorkBook.WorkSheets[1].Cells[i+1,1]:=datamodule1.qMainname.AsString;
   Application.ProcessMessages;
   ProgressBar1.Position:=i;
   Refresh;
   Datamodule1.qMain.Next
  end;
ExcelApp.ActiveWorkBook.WorkSheets[1].Cells.select; //выделяем весь лист
ExcelApp.Selection.WrapText:=True;    //включаем перенос строк в ячейках
ExcelApp.Selection.Rows.AutoFit;      //включаем автоподбор высоты строк
ExcelApp.Selection.VerticalAlignment:=1;
ExcelApp.Visible:=true;
ExcelApp := UnAssigned;


 
Сафаров ©   (2005-12-08 00:03) [5]

Нашел ошибку. Не учел, что ProcessMessages возвращает управление в точку вызова. А переменная уже unAssigned.


 
Digitman ©   (2005-12-08 09:04) [6]


> ExcelApp.Application.EnableEvents := false; //ускоряю вывод
> в Эксел


для получения ощутимого "ускорения" весьма желательно записывать данные не по одной ячейке за одну итерацию, а разом во все ячейки заполняемого диапазона

открываешь НД , определяешь кол-во записей, создаешь массив вариантов соотв.размерности, в цикле бежишь по НД и заполняешь массив, после этого Range(такой_то).Value := Подготовленный_заранее_массив_вариантов



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
14-1134584063
lookin
2005-12-14 21:14
2006.01.08
Еще новость


2-1134922994
Arazel
2005-12-18 19:23
2006.01.08
Как отсортировать название файлов/папок ListBox как Explorer?


1-1134038878
dracula
2005-12-08 13:47
2006.01.08
Unicod > ANSI конвертация.


14-1133896573
@BraIN
2005-12-06 22:16
2006.01.08
Ура! Таки-упал жесткий диск :о)


2-1134833592
dude
2005-12-17 18:33
2006.01.08
что в Delphi называется словом ?