by Meister Lampe » 06 Aug 2020, 14:37
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.
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]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[/code]
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]FileDelete, %Deckblattproben%\%VD_NameNeu%.docx[/code]
Dafür kommt weiter die Meldung vom IrfanView [quote]Error! Can't load: '%1'[/quote]Die erstellten Dateien werden aber schön abgespeichert, die Word-Dateien bleiben offen. Ausgerechnet, dann, wenn ich dieses [c]WinClose, Word[/c] (innerhalb der Schleife) [i]nicht[/i] 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.