AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Vorgang nicht verfügbar bei Word Doc öffnen
Thema durchsuchen
Ansicht
Themen-Optionen

Vorgang nicht verfügbar bei Word Doc öffnen

Ein Thema von Overclocker · begonnen am 8. Sep 2008 · letzter Beitrag vom 10. Sep 2008
Antwort Antwort
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#1

Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 16:53
Hi,

folgender Code verursacht bei mir einen Fehler:
Delphi-Quellcode:
sql1 := 'select * from `Profil`';
         sql2 := 'where id_user in ('+userids+')'; //userids ist eine stringlist mit lauter IDs


         dbquelle := ExtractFilePath (ParamStr(0))+'Bewerbermanagement.mdb';

         dm.brief_oeffnen(strtoint(DBGrid1.DataSource.DataSet.Fields.Fields[0].AsString)); //hier öffne ich den brief mit einer bestimmten ID

// hier der code von "brief_oeffnen"

procedure Tdm.brief_oeffnen(id_vorlage:integer);
var
pfad:string;

begin
with varqry4 do
        begin
        close;
        sql.clear;
        sql.text := 'select pfad from vorlagen where id_vorlage='+inttostr(id_vorlage);
        open;
        pfad := datasource4.dataset.fieldbyname('vorlagenpfad').asstring;

        ShellExecute(application.handle, 'open', PChar(pfad), '', Pchar(ExtractFileDir(pfad)), SW_SHOW);
        end;
end;
//
         Word:=GetActiveOleObject('Word.Application');

         //Dokument als normales Dokument einrichten, Serienbrieffunktion sozusagen entfernen

         Word.ActiveDocument.MailMerge.MainDocumentType:= wdNotAMergeDocument;
         
         //Dokument wieder als Serienbrief einrichten
         Word.ActiveDocument.MailMerge.MainDocumentType:= wdFormLetters;



         Word.ActiveDocument.MailMerge.OpenDataSource(dbquelle,
         ConfirmConversions :=False, ReadOnly:=False, LinkToSource:=True,
         AddToRecentFiles:=False, PasswordDocument:='', PasswordTemplate:='',
         WritePasswordDocument:='', WritePasswordTemplate:='', Revert:=False,
         Format:=wdOpenFormatAuto, Connection:=
         'Provider=Microsoft.Jet.OLEDB.4.0;Password='''';User ID=Admin;Data Source='+dbquelle+';Mode=Read;Extended Properties='''';Jet OLEDB:System database='''';Jet OLEDB:Registry Path='''';Jet OLEDB:Database Password='''
         , SQLStatement:=SQL1, SQLStatement1:=SQL2);
         word.ActiveDocument.MailMerge.ViewMailMergeFieldCodes := wdToggle;

Problem jetzt: immer wenn ich den brief öffne kommt ein fehler bei
Word.ActiveDocument.MailMerge.MainDocumentType:= wdNotAMergeDocument; //vorgang nicht verfügbar

wieso nimmt er denn
Word:=GetActiveOleObject('Word.Application'); nicht an und macht aus dem brief ein normalen brief...

ich komme nicht weiter


bei word 2002 funktioniert der code soweit, bei word 2003 kommt der fehler ://

danke für die hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 17:42
Hallo Overclock,

Word:=GetActiveOleObject('Word.Application'); Ich bin jetzt nicht ein MSWord-Spezialist, aber mit dieser Anweisung wird keine Instanc von MSWord erstellt, sondern eine Verbindung zu einer geöffneten MSWord-Instanc hergestellt.
Wenn Du eine MSWord-Instanc öffnen will’s, so geht das mit:

Word:= CreateOleObject('Word.Application'); Außerdem kann es beim Ausprobieren dazukommen dass schon eine Instanc offen ist, man sie aber nur im Taskmanger sieht.

Zum Testen sollte man die MSWord-Instanc sichtbar machen.

Word.Visible:= TRUE; Es reicht nicht aus mit:

Word.Quit; Word zu Schließen, sondern mal sollte auch die Verbindung kappen

Word:= Unassigned; Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#3

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 17:44
hi, das mit geoleobject hast du natürlich recht

aber wenn du dir mal die procedure ansiehst, dann wird hier VORHER ein word dokument via shellexecute geöffnet, d. h. es MUSS eine wordinstanz bereits offen sein und ist es auch trotzdem danke für den hinweis.

nur wieso funktioniert das mit word2002 und mit word 2003 nicht

gibt es schon units für word 2003 oder ähnliches (in meiner ist ja noch word 2000 mit drinnen, aber müsste doch kompatibel sein oder?)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 17:51
Zitat von Overclocker:
aber wenn du dir mal die procedure ansiehst, dann wird hier VORHER ein word dokument via shellexecute geöffnet, d. h. es MUSS eine wordinstanz bereits offen sein und ist es auch trotzdem danke für den hinweis.
Hallo, warum dann nicht gleich CreateOleObject() verwenden?
Thomas
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 17:52
Hallo,

gugg mal hier:
http://support.microsoft.com/default...b;en-us;825765

bzw probier mal, was passiert, wenn du ein Serienbriefdokument per Hand in Word öffnest, ob du dort eine Fehlerausschrift bekommst.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 17:54
Hallo Overclock,

dann Teste mal ob eine MSWord-Instans offen ist.

Delphi-Quellcode:
function TOLEObj.OleObjAktive(strApplicationsName: String): boolean;
var
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  try
    ClassID := ProgIDToClassID(strApplicationsName);
    Result := GetActiveObject(ClassID, nil, Unknown) = S_OK;
  except
    Result := False;
  end;
end;
Delphi-Quellcode:
If OleObjAktive('Word.Application') then
  ShowMessage('Alles Klar')
else
 ShowMessage('Nicht offen')

Word:=GetActiveOleObject('Word.Application');
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#7

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 8. Sep 2008, 19:30
@toms: wozu createoleobject? ich öffne ja einfach einen serienbrief/normalen brief, sollte egal sein --> somit istauch eine word instanz offen, und mit shellexecute geht das ja ruck zuck mit 1 befehl

@Keldorn: die meldung kenne ich. wenn ich das dokument öffne klicke ich auch auf nein damit es sozusagen ein serienbrief "ohne" datenquelle ist. falls es aber manchmal vorkommt, dass die serienquelle trotzdem mit dran hängt, möchte ich einfach mit dem befehl den brief als "normalen brief" einstellen und dann sozuasgen im anschluss wieder einen serienbrief mit MEINER datenquelle machen

@Chemiker: werde ich morgen dann mal testen weil ich hier nur ein word 2002 drauf habe, aber danke.

so wie ich es bis jetzt rausgelesen habe liegt es also nicht an der kompatibilität mit word (nutze delphi 6 mit uses win2000);

danke für die hilfe schonmal
  Mit Zitat antworten Zitat
Overclocker

Registriert seit: 10. Jan 2007
215 Beiträge
 
#8

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 9. Sep 2008, 17:51
Hi zusammen,

also habe mal den code von chemiker ausprobiert und es kam folgendes dabei raus:

NEIN, es ist keine Instanz offen (warum auch immer?) --> Also Message "Nicht offen"


Jetzt das Komische: Ich habe bei der IF Abfrage beide Messages geändert auf: "Brief wird nun geöffnet und kann bearbeitet und gedruckt werden"

Jetzt öffnet der einen Brief, gibt anstatt "Nicht offen" meine neue Message zurück und auf einmal funktioniert der brief??

Lasse ich beide showmessage befehle weg, kommt der fehler wieder????

also erst mal bin ich froh dass es jetzt funktioniert, allerdings möchte ich nun gerne wissen wieso das so ist

jemand ne idee?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#9

Re: Vorgang nicht verfügbar bei Word Doc öffnen

  Alt 10. Sep 2008, 19:25
Zitat von Overclocker:
@toms: wozu createoleobject? ich öffne ja einfach einen serienbrief/normalen brief, sollte egal sein --> somit istauch eine word instanz offen, und mit shellexecute geht das ja ruck zuck mit 1 befehl
Wenn du ShellExecute ausführst und gleich danach GetActiveOleObject aufrufst kann ja Word noch nicht gestartet sein.
Das Problem ist dann - in deinen Worten - dass es zu "ruck zuck" ist.

Darum ziehe ich ein Öffnen per CreateOleObject vor.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz