Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.12.2012, 22:11
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию Бред какой-то...

У меня уже мозги поехали...
В прошлых версях исходника прога хотя бы открывала документы всегда
без исключения когда я открывал их кнопкой Открыть.
Потом оказалось что если вставить абсолютно одинаковый код в
speedbutton и в простой button то на второй раз speedbutton начинает
выдавать olevarianterror, в то время как button продолжает открывать
их нормально. С этим не стал заморачиваться, пожертвовал интерфейсом ради работоспособности.
Но сейчас вообще не пойму в чем дело.
Кнопка Открыть работает ровно через раз. Один раз нормально
открывает, другой получаем invalid variant operation. Потом опять нормально, потом опять...
Если сначала закрыть открытый документ кнопкой Закрыть. И потом
открыть новый то ошибки не возникает.
И вот то что меня сводит с ума - это факт что в кнопке Открыть
вызывается метод кнопки Закрыть! Почему она не хочет работать таким
образом? Почему ее обязательно надо нажать руками?

Код:
//кнопка открыть
procedure TFrameXLT.Button4Click(Sender: TObject);
Var
  MyBitmap: TBitmap;
begin
  if OpenDialog1.Execute then
    try
      FilePath := OpenDialog1.FileName;
      Button1Click(self);
      OleContainer1.CreateObjectFromFile(FilePath, false);
      ReadExcelFile;
      RefreshDocClick(self);
      OleContainer1.SetFocus;
      lSourceDocument.Caption := 'Открытый документ: ' + FilePath;
      lSourceDocument.Visible := true;
      CanSave := false;
      CanSave:=true;
      ChangeSaveIcon;
    except
      on E: exception do
      begin
        lExcelError.Caption := 'Ошибка открытия документа: '+E.message;
        lExcelError.Visible := true;
        Timer1.Enabled:=true;
      end;
    end;
end;

//кнопка закрыть
procedure TFrameXLT.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  if (OleContainer1.State=osEmpty) or (OleContainer1.State=osLoaded) then exit;
  AskSaveDocument;
  //OleContainer1.OleObject.DisplayAlerts:=False;
  OleContainer1.SetFocus;
  ExApp.ActiveWorkbook.close;
  if not VarIsEmpty(ExApp) then
  begin
    ExApp.Quit;
    // FreeAndNil(ExApp);
  end;
  OleContainer1.Close;
  OleContainer1.DestroyObject;

  lSourceDocument.Visible := false;

  ExApp := Unassigned;
  ExBook := Unassigned;
  ExSheet := Unassigned;
  ExURng := Unassigned;

  for i:=1 to SGRepeats.RowCount-1 do
    SGRepeats.Rows[i].Clear;

  for i:=1 to SGData.RowCount-1 do
    SGData.Rows[i].Clear;

  for i:=1 to SGAutoInc.RowCount-1 do
    SGAutoInc.Rows[i].Clear;

  EditCommonAdr.Text:='';
  SetCommonAddress.Enabled:=false;
  ChResume.Checked:=false;
end;

procedure TFrameXLT.ReadExcelFile;
begin
  try
    OleContainer1.SetFocus;
    ExApp := GetActiveOleObject('excel.application');
    ExBook := ExApp.ActiveWorkbook;
    ExSheet := ExBook.ActiveSheet;
    ExURng := ExSheet.UsedRange; // используемый диапазон ячеек

  except
    on E: exception do
    begin
      lExcelError.Caption := 'Ошибка чтения документа: '+E.message;
      lExcelError.Visible := true;
      Timer1.Enabled:=true;
    end;
  end;
end;

Ошибка invalid variant operation на строчке

ExApp := GetActiveOleObject('excel.application');

Как такое возможно?((
Подскажите что-нибудь.
Ответить с цитированием
 


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter