Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi OLE - Excel schließt sich nach Create (https://www.delphipraxis.net/160201-ole-excel-schliesst-sich-nach-create.html)

WizoHulk 2. Mai 2011 13:54

OLE - Excel schließt sich nach Create
 
hallo

ich bin hier schon am verzweifen.
Ich erstelle mir eine neue Excel Instanz mit diesem code
Delphi-Quellcode:
try
  Excel        := CreateOleObject('Excel.Application'); //Instanz wird erstellt
  Excel.Visible := True;                                //Ohne Worte
except
  ShowMessage(ERROR_MSG);
end;
aber sobald ich aus der procedure raus gehe schließt sich excel.
Hat jemand eine vermutung woran das liegen könnte?

Bernhard Geyer 2. Mai 2011 14:01

AW: OLE - Excel schließt sich nach Create
 
Wo ist die Variable Excel definiert.

Ich Tipp darauf das sie in der Methode definiert ist.

Bummi 2. Mai 2011 14:01

AW: OLE - Excel schließt sich nach Create
 
nimm mal die Variablendeklartion vom Stack, also irgendwo in den Private oder Public Bereich....

geskill 2. Mai 2011 14:08

AW: OLE - Excel schließt sich nach Create
 
Zitat:

Delphi-Quellcode:
uses ComObj, Excel2000;

procedure TAddInModule.test;
var
  IExcel: ExcelApplication;
begin
  IExcel := CreateOLEObject('Excel.Application') as ExcelApplication;
  if Assigned(IExcel) then
    try
      // TODO
      //IExcel.DoSomething
    finally
      IExcel := nil;
    end;
end;

Ich würde auch immer direkt mit dem Typ arbeiten. Über das Menü -> Komponente -> Komponente importieren... kannst du die entsprechende Typbibliothek importieren.

WizoHulk 2. Mai 2011 14:08

AW: OLE - Excel schließt sich nach Create
 
klappt wunderbar. Danke.
Was mich dann aber wundert das es bei Word funktioniert.

Bernhard Geyer 2. Mai 2011 14:12

AW: OLE - Excel schließt sich nach Create
 
Zitat:

Zitat von WizoHulk (Beitrag 1098328)
klappt wunderbar. Danke.
Was mich dann aber wundert das es bei Word funktioniert.

Da wurde von MS implementiert das ein erzeugte Instanz explizit per .Close-Aufruf geschlossen wird.

WizoHulk 2. Mai 2011 15:03

AW: OLE - Excel schließt sich nach Create
 
habe die Variablen jetzt im Privat bereich deklariert.
jetzt wirft er mir aber eine exception wenn ich excel oder word createn will.

hier mal mein code
Delphi-Quellcode:
//********************************************************************************************************
// Microsoft OLE *}
{*    Anfang    *}
type
  TOffice = class(TObject)
  private
 //   Excel : OleVariant;
//    Word : OleVariant;
  public
    Excel : OleVariant;
    Word : OleVariant;
    constructor Create;
    destructor destroy;override;
    procedure OeffneWord(NeuesDokument: Boolean = False);
    procedure OeffneExcel(NeueTabelle : Boolean = False);
  end;

{*     Ende     *}

implementation
//*********************************************************************************************************
//               MICROSOFT
//               *Anfang*
//*********************************************************************************************************

constructor TOffice.Create;
begin
// mach was
end;

destructor TOffice.destroy;
begin
//destroy
end;

procedure TOffice.OeffneExcel(NeueTabelle : Boolean = False);
const
  ERROR_MSG : string = 'Microsoft Excel kann nicht starten!';

begin
  try
    Excel := GetActiveOleObject('Excel.Application');
    Excel.Windowstate := wsNormal
  except
    {* Ist keine Vorhanden wird neu erstellt *}
    try
      screen.Cursor := crHourGlass;                         //SandUhr Aktiv
      Excel        := CreateOleObject('Excel.Application'); //Instanz wird erstellt
      Excel.Visible := True;                                //Ohne Worte
      if NeueTabelle then
        Excel.Workbooks.Add;                                  //ein Tabsheet wird hinzugefügt
      screen.Cursor :=crDefault;                            //Sanduhr Deaktiv
    except
      ShowMessage(ERROR_MSG);
    end;
  end;
  screen.cursor:=crDefault;
end;

procedure TOffice.OeffneWord(NeuesDokument: Boolean = False);
var
  Word     : OleVariant;
begin
 try
   {* Prüfe ob instanz vorhanden ist *}
   Word            := GetActiveOleObject('Word.Application');
   Word.WindowState := wsNormal;
 except
   try
     screen.Cursor := crHourGlass;
     Word         := CreateOleObject('Word.Application');
     Word.Visible := True;
     if NeuesDokument then
       Word.Documents.Add;
   except
     ShowMessage('Microsoft Word kann nicht starten.');
   end;
 end;
 screen.cursor:=crDefault;

end;

//*********************************************************************************************************
//                 MICROSOFT
//                  *Ende*
//*********************************************************************************************************

Bernhard Geyer 2. Mai 2011 15:08

AW: OLE - Excel schließt sich nach Create
 
Zitat:

Zitat von WizoHulk (Beitrag 1098343)
jetzt wirft er mir aber eine exception wenn ich excel oder word createn will.

Es wäre gut zu wissen wie der Text dieser Fehlermeldung aussieht.
Meine Glaskugel ist noch in den Osterferien

Bummi 2. Mai 2011 15:11

AW: OLE - Excel schließt sich nach Create
 
Hast Du eine Instanz von TOffice erzeugt und verwendest diese?

WizoHulk 2. Mai 2011 15:42

AW: OLE - Excel schließt sich nach Create
 
ohhh Kommando zurück. hatte im constructor und im destructor inherited vergessen.

WizoHulk 2. Mai 2011 15:45

AW: OLE - Excel schließt sich nach Create
 
muss ich nach den Aufruf von create öffneWord und/oder ÖffneExcel die Klasse wieder Freigeben?
denn wenn ich sie Freigeben schließt sich excel und/oder Word auch.

Bummi 2. Mai 2011 15:49

AW: OLE - Excel schließt sich nach Create
 
Wenn Du sie nicht mehr brauchst, freigeben....

WizoHulk 2. Mai 2011 15:55

AW: OLE - Excel schließt sich nach Create
 
Ja aber wenn ich das programm schließe, schließe ich gleichzeitig Word/Excel was es ja nicht soll.

WizoHulk 3. Mai 2011 07:59

AW: OLE - Excel schließt sich nach Create
 
Darf ich die klasse nicht mehr Freigeben?
Wird sie Freigeben schließt sich auch Excel.

Bernhard Geyer 3. Mai 2011 08:07

AW: OLE - Excel schließt sich nach Create
 
As Designed. Ein mit CreateOleObject erzeugtes Objekt soll sich so verhalten.

Du könntest Excel mit ShellExecute starten und dich dan mittels GetActiveOleObject verbinden. Dann dürfte sich Excel nicht beenden wenn dein Programm sich beendet.

WizoHulk 3. Mai 2011 15:35

AW: OLE - Excel schließt sich nach Create
 
Ich Öffne jetzt mein Excel mit
Delphi-Quellcode:
ShellExecute(Application.Handle,PChar('open'),PChar('Excel'),sParameter,PChar(''),SW_SHOWNORMAL);
Das Klappt ja soweit auch.
Wobei ich jetzt aber meine schwierigkeiten habe, ist wenn ich prüfe ob eine Instanz vorhanden ist und ich die in den Vordergrund holen will kommt bei mir diese Fehlermeldung : Variante referenziert kein Automatisierungsobjekt.
Delphi-Quellcode:
try
    Excel := GetActiveOleObject('Excel.Application');
    Excel := Unassigned;
    Excel.Windowstate := SW_SHOWNORMAL;
except
Wie kriege ich excel in den Vordergund?
Diese Anweisung haut bei Word prima hin.

Bernhard Geyer 3. Mai 2011 15:41

AW: OLE - Excel schließt sich nach Create
 
Überleg mal was die Zeile

Delphi-Quellcode:
 Excel := Unassigned;
für einen Sinn hat.

WizoHulk 3. Mai 2011 15:49

AW: OLE - Excel schließt sich nach Create
 
ohhh
die war eig. auskommentiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz