![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сообщение об ошибке invalid variant operation
Сафаров © (2005-12-04 13:00:00)использую переменную типа вариант для работы с Экселом.
В разделе 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". Почему это происходит? Спасибо
Digitman (2005-12-08 09:04:00) [1]
> ExcelApp.Application.EnableEvents := false; //ускоряю вывод
> в Эксел
для получения ощутимого "ускорения" весьма желательно записывать данные не по одной ячейке за одну итерацию, а разом во все ячейки заполняемого диапазона
открываешь НД , определяешь кол-во записей, создаешь массив вариантов соотв.размерности, в цикле бежишь по НД и заполняешь массив, после этого Range(такой_то).Value := Подготовленный_заранее_массив_вариантов
Сафаров (2005-12-08 00:03:00) [2]Нашел ошибку. Не учел, что ProcessMessages возвращает управление в точку вызова. А переменная уже unAssigned.
Сафаров (2005-12-04 13:50:00) [3]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-04 13:40:00) [4]но адрес меняется с $0018c3ec на $0019a054
Сафаров (2005-12-04 13:35:00) [5]false
jack128 (2005-12-04 13:23:00) [6]Сафаров © (04.12.05 13:00)
Так вот на первой команде выдается сообщение "invalid variant operation". Почему это происходит? Спасибо
а ты когда на эту кнопку нажимаешь то?? Те что VarIsClear(ExcelApp) возвращает??