Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Вниз

сообщение об ошибке 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
14-1134578163
Pazitron_Brain
2005-12-14 19:36
2006.01.08
Химия


14-1134644004
Pazitron_Brain
2005-12-15 13:53
2006.01.08
Я


14-1134407867
Ксардас
2005-12-12 20:17
2006.01.08
Не повезло Англии...


1-1134031136
lyohaR
2005-12-08 11:38
2006.01.08
TQuickReport проблемы


1-1133955846
Aleksandr.
2005-12-07 14:44
2006.01.08
Как определить видимость дочернего окна?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский