Page 1 of 1
Die neue Zwischenablage
Posted: 29 Jul 2020, 16:22
by Meister Lampe
Hallo zusammen!
Seit kurzem fragen mich alle Computer und Laptops (auch die älteren) jedesmal beim Schließen einer Datei, in die ich etwas kopiert habe:
Sie haben viel Text in der Zwischenablage abgelegt. Soll dieser Text nach dem Beenden von Word [o.a.]78 anderen Anwendungen zur Verfügung stehen?
Ich habe mal gegoogelt und gefunden, daß das an einer neuen Struktur der Zwischenablage im neuen Office liegen soll. Mich wundert allerdings, daß die Abfrage auch kommt, wenn ich mit der älteren Version 2007 eine docx-Datei bearbeite.
Wie kriege ich das weg? Erstens ist es lästig, im normalen Alltag diese Meldung immer wieder wegklicken zu müssen und zweitens hemmt das mir den Ablauf der AHK-Scripte. Denn jedesmal, wenn dort mit
^c und
^p oder mit
clippaste gearbeitet wird, poppt während des Programmablaufs (!) diese Meldung auf und muß später manuell wieder entfernt werden.
Ich habe zwar auch gehört, daß man das angeblich über die Registry deaktivieren kann, aber dort komme ich nicht bei jedem Computer ran. Also zumindest für den reibungslosen Ablauf der AHK-Scripte brauche ich eine Lösung. Was muß ich da einbauen?
Viele Grüße von Meister Lampe
Re: Die neue Zwischenablage
Posted: 30 Jul 2020, 06:05
by BoBo
Allgemeine Aussage dazu: "das ClipBoard leeren". Also einfach im weiteren Verlauf (also unmittelbar nach dem pasting, und vor dem Verlassen von Word & Co) einfach clipboard := "". Das sollte helfen.
Re: Die neue Zwischenablage
Posted: 31 Jul 2020, 03:30
by Rohwedder
Ich habe alle 400 ms einen Timer (aktuell 670 Zeilen) laufen der unter anderen diese Warnungen erkennt und die richtigen Buttons betätigt.
Die Abschnitt "SchikaneFenster" wird nur ausführt wenn ein anderes Fenster aktiv wurde.
Re: Die neue Zwischenablage
Posted: 03 Aug 2020, 15:48
by Meister Lampe
Hallo Rohwedder & BoBo!
Also außerhalb des AHK-Scripts ist das halt schon total nervig, aber - wie schon angedeutet - innerhalb noch mehr.
Und ich habe dieses
clippaste in einer Schleife drin! Ihr könnt Euch vorstellen, was für einen Spaß das macht, wenn im Script die Schleifendurchgänge deswegen viel länger brauchen und ich anschließend auch noch dutzendweise diese aufgepoppten Fenster wieder manuell schließen darf.
Konkret handelt es sich um das Tool, das ich hier in diesem Thread
https://www.autohotkey.com/boards/viewtopic.php?f=9&t=67511&start=20 erstellt habe. Ich habe das jetzt etwas erweitert, damit man über die eine Eingabe auch mehrere solche "virtuellen Deckblätter" erstellen kann. Das hat dann auch ganz gut geklappt, genauso wie der ursprüngliche, es geht hier also nicht mehr um diesen Code an sich.
Nur, daß eben darin diese Zeilen stehen - und stehen müssen:
Code: Select all
Loop
{
...
Send, ^a
Send, ^c
...
Run, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg
...
}
Ich habe in die nächste Zeile nach dem
clippaste den Befehl
gesetzt, was aber nichts genützt hat. Das war bereits bevor ich hier angefragt habe.
Interessant ist noch eine Beobachtung, die ich gemacht habe:
Ich habe mehrere Word-Vorlagen erstellt, die ich im Sript verwende (aus denen wird dann herauskopiert!), weil ich unterschiedliche Schriftgrößen und Typen, Positionen der Textfelder etc. ausprobieren wollte. Die sind zwar alle im
.docx-Format, aber die die meisten hatte ich noch mit der älteren Office-Version erstellt und sind dann im neuen Laptop konvertiert worden. Die letzte habe ich gleich darauf angefertigt, und (nur) mit dieser kommt diese Meldung. Ich würde die aber gerne weiter nehmen, weil sie sich besser in den IrfanView übertragen läßt.
Viele Grüße von Meister Lampe
Re: Die neue Zwischenablage
Posted: 03 Aug 2020, 17:05
by BoBo
Wie schon gesagt, bei Verlassen einer Anwendung wird von dieser/oder dem System (?) die Existenz von Daten im ClipBoard abgefragt. Sofern dort vorhanden, kommt die Rückfrage ob diese ggf noch anderweitig verwendbar sein sollen. Würde also das Clipboard unmittelbar vor Verlassen der Anwendung geleert, wäre eine solche Rückfrage obsolet, ergo mission accomplished.
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 01:11
by Meister Lampe
Hallo BoBo!
Das ist ja gerade das Problem hier. Der Befehl hier macht ja beides: Er öffnet den IrfanView, um dorthinein das gerade zuvor aus dem Worddokument "Deckblattproben" kopierte Element einzufügen und es dann unter dem neuem Namen und Pfad "VD_NameNeu" abzuspeichern. In einem weiteren Schritt wird dann das Worddokument geschlossen und gelöscht. Dort hatte ich auch schon einmal versucht, den Befehl, das Clipboard zu löschen, einusetzen, aber ebenfalls ohne Erfolg.
Hier nochmals der vollständige Code der Schleife.
Code: Select all
Loop, %VD_LoopIndex%
{
oWord := ComObjCreate("Word.Application")
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName1).Select
oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
oDoc.Bookmarks(BookmarkName2).Select
oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
Send, {PGUP}
Send, ^a
Send, ^c
VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
VD_NameNeu := AktSign . "_" . VD_SignName
;~ MsgBox, %VD_NameNeu%
oWord.ActiveDocument.SaveAs(Deckblattproben . VD_NameNeu . ".docx")
;oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\VD_docDateien\" . VD_NameNeu . ".docx")
;oWord.ActiveDocument.SaveAs("id_ArbeitsFenster" . VD_NameNeu . ".docx")
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
oWord := ComObjActive("Word.Application")
oRange := oWord.ActiveDocument.Range.Copy
Run, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg
oWord.ActiveDocument.Close(0)
oWord.Quit()
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
;~ MsgBox, SignNeu ist z.Z. %VD_SignNeu%
VD_SignNeu := ++VD_SignNeu
}
Run, Deckblattproben
;~ MsgBox, SignNeu ist jetzt %VD_SignNeu%
return
Also wie und wo müßte ich das Clipboard lehren?
Viele Grüße von Meister Lampe
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 03:12
by LuckyJoe
Hi,
bei mir wird beim Beenden von Word mit "großer" Zwischenablage nachgefragt, ob ich die letzte Zwischenablage behalten möchte. Diese Anfrage kommt also dann nicht, wenn ich zuletzt in Word etwas "kleines" kopiert habe. Das heißt, du müsstest in deinem Script vor dem Schließen von Word noch etwas anderes kopieren. Das muss aber innerhalb des Word-Objectes geschehen:
oRange := oWord.ActiveDocument.Range.Copy
Suche dir doch ein einzelnes Zeichen aus, dass du innerhalb von Word kopierst, bevor du Word schließt.
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 04:14
by just me
Moin,
es tut mir leid, aber ich kann nicht widerstehen:
Also wie und wo müßte ich das Clipboard lehren?
Es muss heißen:
Also was müßte ich das Clipboard lehren?
Zurück zum Thema:
Hast Du es mal mit dem guten alten
versucht? Und außerdem, warum erstellst Du zwischendurch ein neues Word-Objekt?
Code: Select all
oWord := ComObjActive("Word.Application")
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 04:58
by BoBo
Motto der Berufschullehrer der Entsorgungswirtschaft: "Leeren lehren!"
Vom Hochsitz gefallener Jäger: "Kaum das ich wieder steh, kann ich kaum widerstehn den Widder wieder widerstehn zu sehn!"
Mike Tyson nach dem Niederschlag durch Roy Jones Jr. zum Kampfrichter: "Sorry, ich kann nicht wieder stehn!"
Ach Gesprech von Deutscheland is schon geil
... (Ooops,
@gregster kommt mit Schild umme Ecke
)
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 12:35
by Meister Lampe
Hallo just me!
Vielen Dank für die Beleerung
!
Ich habe das
Code: Select all
oWord := ComObjActive("Word.Application")
jetzt entfernt und die Sache funktioniert immernoch, das scheint also wirklich nicht notwendig gewesen zu sein. Aber der Fehler bzw. die Störung durch diese Office-Meldung besteht weiterhin.
Ich habe auch an den verschiedenen Stellen, wo ich es mit
clipboard := "" versucht hatte, jetzt mal Deinen Vorschlag eingefügt, was aber auch keinen Unterschied gemacht hat. Wo genau der stehen müßte, weiß ich nicht.
Mir ist aber noch etwas Anderes aufgefallen. Nach dem
clippaste wird die neu erstellte und abgespeicherte
.jpg-Datei nicht wieder geschlossen, sondern jeweils die letzte bleibt offen. Meinst Du, es könnte daran liegen?
Das war in den älteren Versionen des Scripts nicht so, dort brauchte ich noch eine Zeile am Ende mit
Code: Select all
RunWait %Arbeitsdateien%\%VD_NameNeu%.jpg
damit ich die neue Datei gleich anschauen konnte. Letztlich ist das aber nur zu Testzwecken gedacht, ich habe es ja jetzt auch so eingerichtet, daß die erstellten Dateien in einem separaten Ordner gesammelt werden, der nach Ablauf der Schleife geöffnet wird.
Viele Grüße von Meister Lampe
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 12:52
by LuckyJoe
Hallo Meister Lampe,
vielleicht hast du meinen Hinweis ja übersehen, aber probiere doch mal folgende Zeile:
oRange := oDoc.Bookmarks(BookmarkName2).Range.Copy
oder: oDoc.Bookmarks(BookmarkName2).Range.Text.Copy?
vor der Zeile:
oWord.ActiveDocument.Close(0)
einzufügen (ungetestet, bin mir nicht sicher, welches der "richtige" Copy-Befehl ist). Ich bin überzeugt, dass du den Hinweis mit der Zwischenablage nicht mehr bekommst, wenn sie nicht mehr so groß ist.
Re: Die neue Zwischenablage
Posted: 04 Aug 2020, 16:42
by Meister Lampe
Hallo Lucky!
Ich habe das jetzt mal versucht, mit beiden Variationen. Aber verändert hat sich nichts.
Ich habe in dem Script mittlerweile mehr auskommentierte Versuche und Umänderungen, als eigentlichen Code...
Viele Grüße aus Baden,
Meister Lampe
Re: Die neue Zwischenablage
Posted: 05 Aug 2020, 04:52
by just me
Meister Lampe wrote:Wo genau der stehen müßte, weiß ich nicht.
Du kannst das immer nach der Zeile einfügen, die ein neues
Word.Application Objekt erzeugt:
Code: Select all
...
oWord := ComObjCreate("Word.Application")
oWord.DisplayAlerts := 0
...
Das muss aber Deine Meldung nicht zwangsläufig unterdrücken.
wird meiner Meinung nach eher nicht helfen, weil Office noch die Hand auf der Zwischenablage hat.
Re: Die neue Zwischenablage
Posted: 06 Aug 2020, 14:37
by Meister Lampe
Hallo just me & Lucky!
Ich habe den Code jetzt zuerst von all den alten auskommentierten Versuchen (bis auf die letzten von Euch empfohlenen) und den überflüssigen Befehlen befreit. Ich hatte nämlich noch min. 2 Zeilen gefunden, die auch nicht nötig waren bzw. den Ablauf eher verlangsamten. Jetzt ist das zumindest übersichtlicher zu lesen und ich setze ihn hier nochmals herein.
Code: Select all
F11::
VirtuellesDeckblatt:
I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe"
IF !FileExist(I_view_exe)
{
Warnung_IViewText =
(
Zum Erstellen eines virtuellen Deckblattes
benötigen Sie das Bildprogramm IrfanView!
)
MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
Return
}
If !(ModulAuswahl = 4 or ModulAuswahl = 0)
{
MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
IfMsgBox Ok
{
Gosub Auswahlfenster
ModulAuswahl := 4
return
}
else
return
}
else
ModulAuswahl := 4
Clipboard := ""
VD_IBoxText =
(
Ein virtuelles Deckblatt zum
Bestand %AktSign% wird erstellt.
Geben Sie die Aktensignatur ein!
)
InputBox, VD_SignBox, Virtuelles Deckblatt, %VD_IBoxText%, ,240, 185,
If ErrorLevel
return
else
If InStr(VD_SignBox, "-")
{
VD_Array := StrSplit(VD_SignBox, "-")
VD_SignNeu := VD_Array[1]
VD_LoopEnd := VD_Array[2]
}
else
{
VD_SignNeu := VD_SignBox
VD_LoopEnd := VD_SignBox
}
VD_LoopIndex := VD_LoopEnd-VD_SignNeu+1
;~ Index := O
IndexStellen := StellenIndex
Index := Format("{:0" . IndexStellen . "}", 0)
;~ MsgBox, VD_LoopIndex ist %VD_LoopIndex%
VD_AktSign := StrReplace(AktSign, "--", "/")
;MsgBox %VD_AktSign%
DocumentPath := VD_Vorlage
BookmarkName1 := "AktSign_Marke"
BookmarkName2 := "Signatur_Marke"
Loop, %VD_LoopIndex%
{
oWord := ComObjCreate("Word.Application")
oWord.DisplayAlerts := 0
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName1).Select
oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
oDoc.Bookmarks(BookmarkName2).Select
oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
Send, {PGUP}
Send, ^a
Send, ^c
VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
VD_NameNeu := AktSign . "_" . VD_SignName . "-" . Index
;~ MsgBox, %VD_NameNeu%
oWord.ActiveDocument.SaveAs(Deckblattproben . VD_NameNeu . ".docx")
;oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\VD_docDateien\" . VD_NameNeu . ".docx")
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
;~ oWord := ComObjActive("Word.Application")
;~ oRange := oWord.ActiveDocument.Range.Copy
;~ oWord.DisplayAlerts := 0
;Run, %I_view_exe% /clippaste /convert=c:\test\test.jpg
Run, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg
WinClose, I_view_exe
WinClose, Word
;~ oWord.ActiveDocument.Close(0)
;~ oWord.Quit()
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
;~ MsgBox, SignNeu ist z.Z. %VD_SignNeu%
VD_SignNeu := ++VD_SignNeu
}
;~ WinClose, I_view_exe
;~ WinClose, Word
Run, Deckblattproben
;~ MsgBox, SignNeu ist jetzt %VD_SignNeu%
return
Mit diesem Code habe ich es durch herumprobieren zumindest soweit gebracht, daß die Meldung am Schluß nur noch einmal kommt und nicht mehr - wenn ich mehrere erstelle - für jede Datei einzeln weggeklickt werden muß. Dafür werden aber 1. die nachher nicht mehr benötigten Word-Dateien jetzt nicht mehr gelöscht wie früher, obwohl nach dem clippaste weiterhin die Zeile steht:
Code: Select all
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
Dafür kommt weiter die Meldung vom IrfanView
Error! Can't load: '%1'
Die erstellten Dateien werden aber schön abgespeichert, die Word-Dateien bleiben offen. Ausgerechnet, dann, wenn ich dieses
WinClose, Word (innerhalb der Schleife)
nicht auskommentiere! Tue ich das aber, dann werden die Word-Dateien zwar geschlossen aber ebenfalls abgespeichert, die IrfanView-Fehlermeldung erscheint ebenfalls, aber die Bild-Datei wird dann gar nicht erst erstellt.
Ich bin jetzt wirklich ein bißchen konfus.
Viele Grüße von Meister Lampe
PS.: Die Zeilen, die ich - wie oben erwähnt herausgenommen habe, enthielten Befehle zur Anlegung eines weiteren Worddokuments und einen weiteren Copy-Befehl, weshalb ich dachte, damit könnte ich diese lästige Meldung wegbekommen.
Re: Die neue Zwischenablage
Posted: 07 Aug 2020, 04:55
by just me
Moin,
Anmerkung 1 -> IrfanView:
Am Anfang der Routine prüfst Du, ob IrfanView_32 auf einem 64-Bit System installiert ist. Wenn das nicht so ist, ist nach einer Fehlermeldung Schluss:
Code: Select all
I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe" ; 32-Bit I_View auf 64-Bit System
IF !FileExist(I_view_exe)
{
Warnung_IViewText =
(LTrim
Zum Erstellen eines virtuellen Deckblattes
benötigen Sie das Bildprogramm IrfanView!
)
MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
Return
}
Später versuchst Du, das installierte I_View über die Registrierung zu ermitteln.
Code: Select all
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
Der ursprüngliche Eintrag in der Variablen
I_view_exe wird dabei überschrieben. Der aus der Registrierung ausgelesene Parameter
"%1" wird aber (wenn das überhaupt so klappt) nur für I_View 64-Bit entfernt.
Ich würde mal vermuten, dass sich die IrfanView-Installation während der Ausführung Deines Skripts nicht ändern wird. Die einmalige Suche nach der
I_VIEW_EXE zu Beginn des Skripts sollte deshalb ausreichen.
Anmerkung 2 -> Einrückungen:
Deine Einrückungen erschließen sich mir nicht. Man kann die Ablaufstruktur nicht erkennen, ohne den kompletten Code zu lesen.
Folgendes ist für mich deutlich übersichtlicher:
Code: Select all
#NoEnv
F11::
VirtuellesDeckblatt:
I_view_exe := "C:\Program Files (x86)\IrfanView\i_view32.exe"
IF !FileExist(I_view_exe)
{
Warnung_IViewText =
(LTrim
Zum Erstellen eines virtuellen Deckblattes
benötigen Sie das Bildprogramm IrfanView!
)
MsgBox, 16, IrfanView nicht installiert, %Warnung_IViewText%
Return
}
If !(ModulAuswahl = 4 or ModulAuswahl = 0)
{
MsgBox, 17, Keine Bestandsvorlage!, Sie müssen zuerst eine Bestandsvorlage auswählen!
IfMsgBox Ok
{
Gosub Auswahlfenster
ModulAuswahl := 4
return
}
else
return
}
else
ModulAuswahl := 4
Clipboard := ""
VD_IBoxText =
(LTrim
Ein virtuelles Deckblatt zum
Bestand %AktSign% wird erstellt.
Geben Sie die Aktensignatur ein!
)
InputBox, VD_SignBox, Virtuelles Deckblatt, %VD_IBoxText%, ,240, 185,
If ErrorLevel
return
else
If InStr(VD_SignBox, "-")
{
VD_Array := StrSplit(VD_SignBox, "-")
VD_SignNeu := VD_Array[1]
VD_LoopEnd := VD_Array[2]
}
else
{
VD_SignNeu := VD_SignBox
VD_LoopEnd := VD_SignBox
}
VD_LoopIndex := VD_LoopEnd-VD_SignNeu+1
;~ Index := O
IndexStellen := StellenIndex
Index := Format("{:0" . IndexStellen . "}", 0)
;~ MsgBox, VD_LoopIndex ist %VD_LoopIndex%
VD_AktSign := StrReplace(AktSign, "--", "/")
;MsgBox %VD_AktSign%
DocumentPath := VD_Vorlage
BookmarkName1 := "AktSign_Marke"
BookmarkName2 := "Signatur_Marke"
Loop, %VD_LoopIndex%
{
oWord := ComObjCreate("Word.Application")
oWord.DisplayAlerts := 0
oDoc := oWord.Documents.Open(DocumentPath)
oWord.Visible := 1, oWord.Activate
oDoc.Bookmarks(BookmarkName1).Select
oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
oDoc.Bookmarks(BookmarkName2).Select
oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
Send, {PGUP}
Send, ^a
Send, ^c
VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
VD_NameNeu := AktSign . "_" . VD_SignName . "-" . Index
;~ MsgBox, %VD_NameNeu%
oWord.ActiveDocument.SaveAs(Deckblattproben . VD_NameNeu . ".docx")
;oWord.ActiveDocument.SaveAs(A_ScriptDir . "\Arbeitsdateien AHK-Tool StAF\VD_docDateien\" . VD_NameNeu . ".docx")
RegRead, I_view_exe, HKCR\Applications\i_view32.exe\shell\open\command
IF !(I_view_exe)
{
RegRead, I_view_exe, HKCR\Applications\i_view64.exe\shell\open\command
RegexMatch(I_view_exe, "(?P<>""[^""]*"")", I_view_exe) ;erste "..."-Gruppe
}
;~ oWord := ComObjActive("Word.Application")
;~ oRange := oWord.ActiveDocument.Range.Copy
;~ oWord.DisplayAlerts := 0
;Run, %I_view_exe% /clippaste /convert=c:\test\test.jpg
Run, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg
WinClose, I_view_exe
WinClose, Word
;~ oWord.ActiveDocument.Close(0)
;~ oWord.Quit()
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
;~ MsgBox, SignNeu ist z.Z. %VD_SignNeu%
VD_SignNeu := ++VD_SignNeu
}
;~ WinClose, I_view_exe
;~ WinClose, Word
Run, Deckblattproben
;~ MsgBox, SignNeu ist jetzt %VD_SignNeu%
return
Re: Die neue Zwischenablage
Posted: 07 Aug 2020, 05:55
by just me
So, vielleicht klappt Folgendes besser. I_view_exe musst Du vorher schon bestimmen:
Code: Select all
; Deckblatt/blätter verarbeiten ----------------------------------------------------------------------------------------
oWord := ComObjCreate("Word.Application") ; keine Fehhlerbehandlung !!!
oWord.DisplayAlerts := 0
oWord.Visible := 1
oWord.Activate
Loop, %VD_LoopIndex%
{
VD_SignName := Format("{:0" . StellenSign . "}", VD_SignNeu)
VD_NameNeu := AktSign . "_" . VD_SignName . "-" . Index
oDoc := oWord.Documents.Open(DocumentPath) ; keine Fehhlerbehandlung !!!
oDoc.Bookmarks(BookmarkName1).Select
oDoc.Bookmarks(BookmarkName1).Range.Text := VD_AktSign
oDoc.Bookmarks(BookmarkName2).Select
oDoc.Bookmarks(BookmarkName2).Range.Text := VD_SignNeu
oDoc.SaveAs(Deckblattproben . VD_NameNeu . ".docx") ; ??? wozu auch immer ???
; IrfanView
Clipboard := ""
Send, {PGUP}
Send, ^a
Send, ^c
ClipWait, 1 ; keine Fehhlerbehandlung !!!
RunWait, %I_view_exe% /clippaste /convert=%Deckblattproben%\%VD_NameNeu%.jpg ; RunWait
Clipboard := ""
oDoc.Close(0)
FileDelete, %Deckblattproben%\%VD_NameNeu%.docx
VD_SignNeu++
}
oWord.Quit()
Run, Deckblattproben
return
Re: Die neue Zwischenablage
Posted: 14 Aug 2020, 12:56
by Meister Lampe
Hallo just me!
Vielen Dank, ganz besonders für den letzten Code. Jetzt klappt es prima.
Du hast gesehen, daß man noch mehr Befehle aus der Schleife herausnehmen kann, die dann vorher nur einmal durchlaufen müssen. Jetzt läuft das ganze Script auch viel schneller. Ich habe jetzt lediglich noch auf Deinen Hinweis hin die Abspeicherung des Word-Dokuments herausgenommen und das dann ebenfalls nicht mehr benötigte
FileDelete.
Ich konnte das Script mittlerweile sogar auf unterschiedlichen Computern testen, bei denen es dann jedesmal funktionierte.
Vielen Dank und viele Grüße von Meister Lampe