Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 09:15   #1
Sega22
 
Регистрация: 02.09.2009
Сообщений: 6
По умолчанию поиск в Excel

собственно сабж
поиск автофильтр работает нормально примерно цикла 4 потом начинаются сбои. в авто фильтр добавляются строчки абсолютно неотносящиеся к критерию посика

код
for i:=1 to 49 do begin
s:='';
i1:=1;
s:=MsExcel.Range['D'+inttostr(i1)];
if s=''then break
else
MsExcel.WorkBooks[1].WorkSheets[1].select;
MsExcel.ActiveWorkBook.WorkSheets[1].Cells[1, 1].AutoFilter(4,s,True);
MsExcel.WorkBooks[1].WorkSheets[1].Range['A1','F6600'].copy(EmptyParam);
MsExcel.WorkBooks[1].WorkSheets[2].select;
MsExcel.WorkBooks[1].WorkSheets[2].paste;
MsExcel.DisplayAlerts:=False;
MsExcel.WorkBooks[1].WorkSheets[1].select;
MsExcel.WorkBooks[1].Sheets[1].Cells[1,7].select;
MsExcel.WorkBooks[1].WorkSheets[1].Range['A1','F6600'].delete;

подскажите в чем ошибка
Sega22 вне форума Ответить с цитированием
Старый 31.05.2010, 09:55   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вообще, всё можно сделать намного проще и быстрее.

К сожалению, из вашего кода я не смог понять, что должна делать программа...

Я хоть и не знаю синтаксиса Delphi, мог бы набросать вам пример кода, если вы напишите, что надо сделать.

Что могу посоветовать:
1) не использовать метод SELECT:
вместо
Код:
MsExcel.WorkBooks[1].WorkSheets[1].Range['A1','F6600'].copy(EmptyParam);
MsExcel.WorkBooks[1].WorkSheets[2].select;
MsExcel.WorkBooks[1].WorkSheets[2].paste
можно написать что-то вроде
Код:
MsExcel.WorkBooks[1].WorkSheets[1].Range['A1','F6600'].copy(MsExcel.WorkBooks[1].WorkSheets[2].Cells[1,7]);
то есть сразу указать, куда вставлять данные, без активании листа

2) Автофильтр в данном случае лучше не использовать - поскольку в таблице нет строки заголовка.
Я бы поступил так: считал бы все данные с используемой области листа в двумерный массив (одна строка кода),
потом бы программно из него сформировал второй двумерный массив (для записи на лист), и опять же одной строкой кода записал бы этот массив на второй лист.
Это самый быстрый и надёжный метод.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск решения в Excel. santaIsAbsent Microsoft Office Excel 7 26.05.2010 11:25
поиск решения excel Романова Елена Microsoft Office Excel 5 04.05.2010 22:26
Поиск в Excel Tirendus Общие вопросы Delphi 3 21.01.2010 10:39
Поиск в Excel rti Microsoft Office Excel 2 16.01.2010 00:01
Поиск в Excel VVVasek Microsoft Office Excel 11 20.09.2008 17:47