Главная страница
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.021 c
3-1131922025
mfender
2005-11-14 01:47
2006.01.08
Empty Dataset, новая запись и Stack Overflow...


2-1134849713
Энди
2005-12-17 23:01
2006.01.08
Запуск приложений из программы


14-1134370442
wal
2005-12-12 09:54
2006.01.08
Как в России любят слуг народа.


4-1130680933
GuAV
2005-10-30 17:02
2006.01.08
Printer.Canvas с LOGPIXELSX <> LOGPIXELSY, что с Pen.Width ?


2-1135157933
Новенькая
2005-12-21 12:38
2006.01.08
опять treeview