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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 17:21   #1
Dus-F
 
Регистрация: 24.03.2010
Сообщений: 4
Вопрос Ecxel через Deiphi (Find)

Привет. Создаю эту тему потамучто... ну воще(((

Пишу программу редактирования документов в Ecxele (не буду углубляться). Одна из ее задач, найти нужную ячейку по содержащемуся в ней слову (с учетом регистра букв).
Алгоритм такой: Найти в заданном диапазоне ВСЕ совпадения и показать содержимое найденных ячеек (с этим проблем почти нет, но не в этом дело). Если не чего не найдено, выводится сообщенные. С последним проблема. Если совпадений с поиском нет. Уже в запущенной программе вылетает системное сообщение от Debugger Exception Notification:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00455F6B in module 'Project1.exe'. Read of address 00000000'. Process stoped. Use Step or Run to continue.
Ииии всё!...
Код:

Var
  Range, E :Variant;
  FirstAddress: string;

...\\ здесь программа открывает нужный файл.xls

try
  VarClear(Range);
  Range := E.Range['A25:G178'].Find(What:='Азоeта ',    
                                               LookIn:=xlValues,
                                               SearchDirection:=xlNext,                 
                                               MatchCase:=True);
  if not VarIsEmpty(Range)
    then
      begin
        FirstAddress := Range.Address;
        ShowMessage(Range.Value);
        ShowMessage(FirstAddress);
        repeat
          Range.Interior.ColorIndex := 37;
          Range := E.Range['A25:G178'].FindNext(After := Range);
          ShowMessage(Range.Value);
          ShowMessage(Range.Address);
        until FirstAddress = Range.Address;
      end
    else
      begin
        Showmessage('ничего не найдено');
      end;
  except
    raise Exception.Create('??????');
  end;

...//здесь продолжение программы.
Спасибо, заранее.
Dus-F вне форума Ответить с цитированием
Старый 26.03.2010, 10:05   #2
Dus-F
 
Регистрация: 24.03.2010
Сообщений: 4
По умолчанию

Забыл написать. После ошибки выделяет вот эту строчку:
FirstAddress := Range.Address;
Dus-F вне форума Ответить с цитированием
Старый 26.03.2010, 14:16   #3
Dus-F
 
Регистрация: 24.03.2010
Сообщений: 4
По умолчанию

Решение найдено!!!

VarIsClear() возвращает True если адрес поля $00000000.

Т.е. нужно заменить: if not VarIsEmpty(Range) на if not VarIsClear(Range).

Последний раз редактировалось Dus-F; 26.03.2010 в 14:18.
Dus-F вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
power point на форме в deiphi? tatiana74 Помощь студентам 3 24.02.2010 17:43
Управление Ecxel при помощи Delphi nikolai_P Общие вопросы Delphi 9 12.03.2009 09:00
Макрос. Найти текущую дату в колонке через Find Leanna Microsoft Office Excel 5 19.12.2008 17:06
Из Access записать данные в файл Ecxel roland_12 Microsoft Office Access 1 09.09.2008 05:51