37414
Goto Top

Text per Batchdatei kopieren und einfügen

Hallo,

ich würde gerne für meine Kollegen eine kleine Hilfe basteln...
Wir nutzen ein Programm, in dem auch Memos in ein Textfeld geschrieben werden.
Dieser Text soll jeweils möglichst einfach in eine Word-Datei kopiert und diese dann in einem bestimmten Verzeichnis und unter einem bestimmten Dateinamen (Nummer) abgespeichert werden.

Dazu müßten folgende Schritte per Batchdatei (od. sonstigem Script) ausgeführt werden:

- den Text aus dem Memofeld komplett kopieren (quasi Strg + A / Strg + C)

- dann ein neues Word-Dokument öffnen

- nun den eben kopierten Text dort einfügen

- nun das Dokument im Verzeichnis "S:\MV\Memos" speichern inkl. Vergabe eines Dateinamens (eine Nummer)

Wäre sowas umsetzbar?
Oder gibt es ein kleines Programm, welches einfach all diese Schritte aufzeichnet und womit man diese dann per Klick ausführen kann?

Danke und Gruss,
imebro

Content-Key: 281981

Url: https://administrator.de/contentid/281981

Printed on: April 25, 2024 at 01:04 o'clock

Mitglied: 114757
114757 Sep 04, 2015 updated at 10:29:26 (UTC)
Goto Top
Wäre sowas umsetzbar?
Ja, kein Problem. Würde ich schnell mit Auto-It als EXE / VBS / Powershell umsetzen damit kannst du das gewünschte Fenster der Anwendung aktivieren Text kopieren und via COM-Object neues Word-Dokument anlegen.
Dazu müsste man hier aber wissen wie der Titel des Anwendungsfensters oder der Prozessname heißt.

Gruß jodel32

Für absolute Programmierdaus gibts auch das hier:
https://www.jitbit.com/macro-recorder/
Mitglied: 37414
37414 Sep 04, 2015 at 11:21:11 (UTC)
Goto Top
Danke Dir...

Der Macro-Recorder ist nur für 30 Tage lauffähig.
Habe den Teil nach dem copy & paste jetzt mal mit einem VB-Script (Word-Makro) gelöst.
Das läuft gut... aber wie mache ich das, dass dieses Makro an der Stelle, wo die Nummer eingegeben werden muss, wartet und nach der Eingabe weiter läuft?

Danke und Gruss,
imebro
Mitglied: 114757
114757 Sep 04, 2015 at 11:24:36 (UTC)
Goto Top
Zitat von @37414:
Das läuft gut... aber wie mache ich das, dass dieses Makro an der Stelle, wo die Nummer eingegeben werden muss, wartet und nach der Eingabe weiter läuft?
nummer = InputBox("Bitte Nummer eingeben:")
Mitglied: 37414
37414 Sep 04, 2015 at 11:36:22 (UTC)
Goto Top
Danke nochmals...

Ich habe Deinen Code einfach über "bearbeiten" in das Script eingefügt - hinter "FileName:=".
Es erscheint zwar ein Fenster zur Eingabe der Nummer, aber wenn ich dann auf OK klicke, kommt eine Debugging-Fehlermeldung.

Hier mal mein Code aus dem VB-Script:

Selection.Paste
    ChangeFileOpenDirectory "S:\ARCHIV\Mittelvergabe\Memos\"  
    ActiveDocument.SaveAs FileName:=nummer = InputBox("Bitte Nummer eingeben:"), FileFormat:=wdFormatDocument, _  
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _  
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _  
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False
    Application.Quit

LG
imebro
Mitglied: 114757
114757 Sep 04, 2015 at 11:41:39 (UTC)
Goto Top
Och nö ... das musst du vorher in eine separate Zeile einsetzen und noch in den Dateinamen mit einbauen !
Mit meiner Zeile weißt du die Nummer ja nur einer Variablen zu !
Mitglied: 37414
37414 Sep 04, 2015 at 11:44:16 (UTC)
Goto Top
...sorry, aber kannst Du mir das nochmal etwas genauer erklären oder ggf. einfach in meinen Code einfügen?

Verstehe nicht, wie Du das mit der separaten Zeile meinst, bzw. was genau ich dort einsetzen muss?
Diese Eingabe-Abfrage muss ja dann kommen, wenn Word die Datei speichern will... wenn also die Abfrage des Dateinamens von Word kommt.

Danke und Gruss,
imebro
Mitglied: 114757
114757 Sep 04, 2015 updated at 12:23:43 (UTC)
Goto Top
    nummer = InputBox("Bitte Nummer eingeben:")
    fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".docx"
    ActiveDocument.SaveAs FileName:=fname , FileFormat:=wdFormatXMLDocument, _
        LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
        :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
        SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
        False
    Application.Quit
Mitglied: 37414
37414 Sep 04, 2015 updated at 12:10:42 (UTC)
Goto Top
Funktioniert im Grunde.
Allerdings wird es als Dokumententyp "Office Open XML-Dokument" gespeichert.
Zwar mit ".docx" am Ende, aber offenbar nicht korrekt.

Es erscheint die folgende Fehlermeldung, wenn ich es dann öffne:

Das Dokument kann nicht geöffnet werden.
Das Dokument ist entweder beschädigt,
oder es ist unter der Rechteverwaltung geschützt.

Hier der komplette jetzige Code:

Selection.Paste
    nummer = InputBox("Bitte Nummer eingeben:")  
    fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".docx"  
    ActiveDocument.SaveAs FileName:=fname, FileFormat:=wdFormatDocument, _
    LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _  
    :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _  
    SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    False
    Application.Quit

LG
imebro
Mitglied: 114757
114757 Sep 04, 2015 updated at 12:24:12 (UTC)
Goto Top
Wenn du im Dokument selber Makros hast musst du als docm speichern, sollte eigentlich klar sein ...

Einfach mal in die Doku reinschauen anstatt jeden Furz nachzufragen.
https://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.doc ...

Für Docx
FileFormat:=wdFormatXMLDocument
bei Makros mit docm:
wdFormatXMLDocumentMacroEnabled
Mitglied: 37414
37414 Sep 04, 2015 at 12:25:19 (UTC)
Goto Top
Sorry... war ein doofer Denkfehler face-wink

Jetzt funktioniert es perfekt.

Vielen Dank,
imebro
Mitglied: 37414
37414 Sep 04, 2015 at 13:02:38 (UTC)
Goto Top
Leider habe ich keinen Makrorecorder gefunden, der OpenSource ist und der auch funktioniert.

Hast Du (oder sonst Jemand) noch eine Idee, wie ich den Text aus dem Memofeld des Programms komplett markieren und kopieren (copy & paste), dann Word öffnen und anschließend den Inhalt der Zwischenablage dort einfügen kann?
Bestenfalls dann automatischer Start des Scriptes (siehe oben)?

Das wäre natürlich die perfekte Lösung face-wink

LG
imebro
Mitglied: 122990
122990 Sep 04, 2015 updated at 13:11:42 (UTC)
Goto Top
AutoIT ist für sowas sehr gut geeignet, trotzdem sollte man ein Minimum an Programmierfähigkeiten mitbringen. Mit Klicki-Bunti ist es da nicht getan wenn man das vernünftig und zuverlässig machen will.

Aber hier kennt ja keiner deine ominöse Anwendung so dass man dir ein Beispiel posten könnte. Was erwartest du also...

Gruß grexit
Mitglied: 37414
37414 Sep 07, 2015 at 07:30:22 (UTC)
Goto Top
Hallo und danke,

habe mir AutoIT runtergeladen. Ist aber nicht so wirklich selbsterklärend face-smile

Im Grunde möchte ich folgende Schritte umsetzen:

- Text aus dem Textfenster des Programms komplett markieren und kopieren (Strg A, Strg C)
- dann Word (Word 2000) öffnen
- anschließend dann das Word-VBScript starten

Wie kann ich das mit AutoIT umsetzen?

Danke und schöne Grüße,
imebro
Mitglied: 122990
122990 Sep 07, 2015 updated at 07:47:50 (UTC)
Goto Top
Moin,
ließt du unsere Posts eigentlich mal genau ? face-sad
Ohne deine uns unbekannte Anwendung zu kennen, wissen wir ja gar nicht welchen Prozess oder Fenster wir in den Vordergrund holen müssen um dann noch das "richtige" Steuerelement auszuwählen, den Text zu markieren und zu kopieren. Das ist essentiell zum Schreiben eines solchen Skriptes!!!
Also bei AutoIT gibt es ein Tool das heißt WindowInfo, damit kann man sich die von uns für ein Beispiel benötigten Infos zum Fenster anzeigen lassen.
Auf dieser Basis kann man hier dann ein Beispiel Posten, aber so ganz ohne Info von dir ist das leider nur im Blindflug möglich, das sollte dir eigentlich klar sein.

Gruß grexit

p.s. Ihr arbeitet nicht wirklich noch mit Word 2000 ? face-big-smile
Mitglied: 37414
37414 Sep 07, 2015 at 08:11:47 (UTC)
Goto Top
Ja, ich lese die Posts face-smile

Aber ich hatte ja oben schon geschrieben, dass es ein ganz individuell für uns geschriebenes Programm ist. Es nützt also nichts, wenn ich hier angebe, wie das Programm heißt...

Im AutoIT habe ich jetzt nach "WindowInfo" (o.ä.) gesucht, aber nichts gefunden.
Wie komme ich denn an dieses Tool und wie setze ich das ein, um Euch die benötigten Infos geben zu können?

LG
imebro
Mitglied: 122990
122990 Sep 07, 2015 updated at 08:20:24 (UTC)
Goto Top
Zitat von @37414:
ist. Es nützt also nichts, wenn ich hier angebe, wie das Programm heißt...
Du hast keine Ahnung von AutoIT aber weißt was wir nicht benötigen, das nenn ich mal ganz schlau ! Kopfschüttel ...
Im AutoIT habe ich jetzt nach "WindowInfo" (o.ä.) gesucht, aber nichts gefunden.
Wie komme ich denn an dieses Tool und wie setze ich das ein, um Euch die benötigten Infos geben zu können?
https://www.autoitscript.com/autoit3/docs/intro/au3spy.htm
Mitglied: 37414
37414 Sep 07, 2015 updated at 09:35:53 (UTC)
Goto Top
OK... sorry, ich hatte den Sinn einfach nicht verstanden, da ich mich mit AutoIT ja nicht auskenne.

Jetzt blicke ich ein bisschen besser durch.
Habe gerade das "AutoInfo" gestartet und dann das Icon in das Textfenster des Programms gezogen.
Dadurch wurde das "AutoInfo" mit Daten gefüllt... allerdings in mehreren Reitern (Window, Controll.... etc.).
Welchen Inhalt muss ich denn jetzt hier posten... und wie mache ich das?

Hier mal die Hauptinhalte aus dem "AutoInfo"-Fenster:

Basic Window Info:
Title: Stiftungsanträge / Einzelfallhilfen (Vers.6.7) - [Anträge]
Class: TMainForm

Basic Control Info:
Class: TwwDBRichEdit
Instance: 1

Control-ID: 394352​

LG
imebro
Mitglied: 122990
122990 Sep 07, 2015 updated at 15:42:19 (UTC)
Goto Top
Das ist doch endlich mal eine Aussage.... Das sieht dann so aus:
#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)  
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"  
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
if WinWaitActive($wintitle,"",5) = 0 then  
	msgbox(16,"Timeout","Konnte Fenster nicht finden!")  
	exit 1
EndIf
; retrieve text of control
$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")  
; Word starten
$objWord = ObjCreate("Word.Application")  
; leeres Dokument hinzufügen
$doc = $objWord.Documents.Add()
; make word visible
$objWord.Visible = true
; insert text into document
$doc.Content.Text = $text
Es gibt bestimmte Fenster bei denen sich sich die Controls auf diese Methode nicht auslesen lassen. Aber für diesen Fall kann man es dann einfach über die SendKeys() Methode erledigen.
Statt Zeile 14 dann einfach folgendes einfügen. Bei Bedarf eine kleine Pause sleep(500) zwischen CTRL-A und CTRL-C einfügen falls es nicht klappt
Send("^a")
Send("^c")
Und dann zusätzlich anstatt Zeile 22 wieder ein CTRL-V

Du siehst die Syntax ist ziemlich ähnlich wie VB also sehr leicht zu erlernen. Der Vorteil von AutoIt ist seine Portabilität, denn es kompiliert EXEs die ohne irgendwelche Frameworks lauffähig sind.

Gruß grexit
Mitglied: 37414
37414 Sep 08, 2015 updated at 06:08:46 (UTC)
Goto Top
Hey... danke @ grexit...

habe es gerade getestet und... es funktioniert prima face-wink

Wenn es jetzt noch möglich wäre, das Word-Makro auch über dieses AutoIT-Script zu starten, dann wäre es perfekt.
Welche Zeile müßte ich dazu noch eintragen?
Das Word-Makro hat den Namen "memo"...

...ich werde mal eine deutsche Anleitung für AutoIT suchen, denn mein Englisch ist (milde gesagt) schlecht face-smile face-smile

Vielen Dank & schöne Grüße,
imebro
Mitglied: 122990
122990 Sep 08, 2015 updated at 06:35:37 (UTC)
Goto Top
Moin,
wieso jetzt doppelt gemoppelt ein Makro starten? Du kannst alles was du in Word mit dem Makro machst auch gleich in AutoIt mit dem Word-Objekt machen, das hat vollen Zugriff auf das Objektmodell.

Ansonsten musst du sagen in welchem Codeabschnitt genau dein Makro liegt (ThisDocument / In einem Modul (wie lautet der Name des Moduls) / In einem AddIn Dokument/ etc. pp) damit ich dir sagen kann wie man es starten kann.
Mitglied: 37414
37414 Sep 08, 2015 updated at 07:06:53 (UTC)
Goto Top
Hallo nochmal...

ich könnte also einfach den VB-Scriptcode im AutoIT-Code einfügen?
Oder hab ich das falsch verstanden?

Das Makro liegt in der "normal.dot" unter "Normal", im Modul "NewMacros" und nennt sich "memo"

Das ist der Code:
Sub memo()
'  
' memo Makro  
' Makro aufgezeichnet am 04.09.2015 von imebro  
'  
    Selection.Paste
    nummer = InputBox("Bitte Nummer eingeben:")  
    fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".doc"  
    ActiveDocument.SaveAs FileName:=fname, FileFormat:=wdFormatDocument, _
    LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _  
    :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _  
    SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    False
    Application.Quit
End Sub


LG
imebro
Mitglied: 122990
122990 Sep 08, 2015 updated at 08:16:38 (UTC)
Goto Top
Zitat von @37414:
ich könnte also einfach den VB-Scriptcode im AutoIT-Code einfügen?
Neeee, das wäre so als ob man an ein Auto Fahrradreifen montiert face-wink
Oder hab ich das falsch verstanden?
Natürlich muss man es geringfügig an die Syntax von AutoIt anpassen:
#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)  
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"  
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
if WinWaitActive($wintitle,"",5) = 0 then  
	msgbox(16,"Timeout","Konnte Fenster nicht finden!")  
	exit 1
EndIf
; retrieve text of control
$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")  

; Word starten
$objWord = ObjCreate("Word.Application")  
; leeres Dokument hinzufügen
$doc = $objWord.Documents.Add()
; make word visible
$objWord.Visible = true
; insert text into document
$doc.Content.Text = $text
; get number input from user
$number = InputBox("Nummer vergeben","Bitte Nummer eingeben:")  
; Save document
$objWord.SaveAs("S:\ARCHIV\Mittelvergabe\Memos\" & $number & ".doc")  
; close document
$doc.Close()
; close word
$objWord.Quit()
Mitglied: 37414
37414 Sep 08, 2015 at 08:23:53 (UTC)
Goto Top
Danke Dir nochmals "grexit".

Jetzt öffnet sich zwar Word und der Text aus dem Textfeld des Programms wird eingefügt, aber das Abfragefenster für die Nummer erscheint nicht.
Was muss ich am Code dazu ändern?

Danke und Gruss,
imebro
Mitglied: 122990
122990 Sep 08, 2015 updated at 08:27:58 (UTC)
Goto Top
Geht hier problemlos, schau mal "hinter" dein Word-Fenster ... face-wink

Du kannst auch das Word-Fenster einfach mit false ausblenden ... das muss nicht sichtbar sein, das war nur zu Debug-Zwecken drin.
Mitglied: 37414
37414 Sep 08, 2015 updated at 08:38:14 (UTC)
Goto Top
...auch hinter dem Word-Fenster befindet sich keine Box mit der Abfrage der Nummer face-sad

Über das Word-Makro geht es jedoch...

Ich habe das Word-Makro jetzt einfach mal als VBS-Datei auf dem Desktop abgespeichert.
Vielleicht kann man im AutoIT-Script dieses dann starten. Es heißt "memo.vbs"

LG
imebro
Mitglied: 122990
122990 Sep 08, 2015 updated at 08:38:33 (UTC)
Goto Top
Oh man du bist echt ne ganz schwere Geburt:

b59ddb1af2608139ba26e337aa9bcec7

Und tschüss ...
Mitglied: 37414
37414 Sep 08, 2015 at 08:40:20 (UTC)
Goto Top
Danke für die schwere Geburt... face-smile

Aber ich kann´s ja nicht ändern. Bei mir funktioniert es nicht.
Vielleicht liegt es daran, dass es ein altes Word ist (Word 2000)?

Ich habe das Word-Makro jetzt einfach mal als VBS-Datei auf dem Desktop abgespeichert.
Vielleicht kann man im AutoIT-Script dieses dann starten. Es heißt "memo.vbs"

LG
imebro
Mitglied: 122990
122990 Sep 08, 2015 updated at 08:42:58 (UTC)
Goto Top
Zitat von @37414:
Vielleicht liegt es daran, dass es ein altes Word ist (Word 2000)?
Nein, die Funktion ist unabhängig von der Word-Version, weil sie aus der AutoIt Bibliothek stammt ...
Mitglied: 37414
37414 Sep 08, 2015 at 08:44:42 (UTC)
Goto Top
OK, dann weiß ich auch nicht.

Wie könnte ich denn das Desktop-Makro in AutoIT starten, anstatt den Code aus Zeile 24 - 31 zu nutzen?

LG
imebro
Mitglied: 114757
114757 Sep 08, 2015 at 08:48:08 (UTC)
Goto Top
Zitat von @37414:
Wie könnte ich denn das Desktop-Makro in AutoIT starten, anstatt den Code aus Zeile 24 - 31 zu nutzen?
Wie wärs mal mit Doku lesen:
https://www.autoitscript.com/autoit3/docs/functions/RunWait.htm
Mitglied: 37414
37414 Sep 08, 2015 at 09:02:30 (UTC)
Goto Top
OK... habe ich gelesen.
Funktioniert dennoch nicht, wenn ich per Run (oder RunWait) Befehl versuche, das Makro (memo.vbs) vom Desktop zu starten.

Nunja...
Dann müssen die Kollegen eben doch den Klick im geöffneten Word-Dokument auf den Makro-Button machen face-smile

Danke und Gruss,
imebro
Mitglied: 114757
114757 Sep 08, 2015 updated at 09:11:30 (UTC)
Goto Top
Zitat von @37414:
OK... habe ich gelesen.
Funktioniert dennoch nicht, wenn ich per Run (oder RunWait) Befehl versuche, das Makro (memo.vbs) vom Desktop zu starten.
hm, das muss aber irgendwie bei dir liegen, denn beides was @122990 hier gepostet hat funktioniert hier auch problemlos.

Aber so wie ich mir deine anderen Threads angucke, hat da selten einer weniger als 20 posts ... scheint immer nur bei dir Probleme zu geben, Zufall ?

Über dein System kennen wir hier auch so gut wie nix face-sad

Office 2000 wasn'dat für ein Museum in dem du arbeitest face-big-smile
Mitglied: 37414
37414 Sep 08, 2015 at 09:31:52 (UTC)
Goto Top
Museum ist gut face-smile

Wir arbeiten eigentlich mit Office 2000.
Aber da es sich bei dem Programm (das mit dem Textfenster, aus dem kopiert werden soll) um ein Programm aus den 90-ern handelt, benötigt das zwingend Word 2000. Daher haben wir auf einem Terminalserver extra ein altes Word 2000 installiert.

Wieso das nun bei mir nicht läuft, weiß ich auch nicht.
Wenn ich es mit den 2 Schritten mache (AutoIT-Script und dann manueller Start des Word-Makros), dann läuft es ja.

Nur wäre es natürlich schön, wenn wenigstens das Word-Makro (liegt ja jetzt auch auf meinem Desktop) über das AutoIT-Script gestartet werden könnte... wenn es schon nicht mit dem kompletten AutoIT-Code klappt face-wink

LG
imebro
Mitglied: 114757
114757 Sep 08, 2015 updated at 10:21:39 (UTC)
Goto Top
Wie allseits bekannt ist, startet man vbs-Skripte über CMD-Aufrufe natürlich über wscript.exe, das hast du 100% vergessen face-wink
RunWait("wscript.exe ""C:\Pfad\test.vbs""")  
Mitglied: 37414
37414 Sep 08, 2015 updated at 10:38:03 (UTC)
Goto Top
Wenn ich diese Zeile einsetze, erhalte ich folgende Fehlermeldung:

Windows Script Host
Skript: C:\Users\imebro\Desktop\memo.vbs
Zeile: 13
Zeichen: 36
Fehler: Anweisung erwartet
Code: 800A0400
Quelle: Kompilierungsfehler in Microsoft VBScript
OK

Hier mal der gesamte Code:

#NoTrayIcon
; activate part match mode of title
AutoItSetOption("WinTitleMatchMode",2)  
; Titel of Window
$wintitle = "Stiftungsanträge / Einzelfallhilfen"  
; activate window
WinActivate($wintitle)
; wait max 10 seconds for window to become active
if WinWaitActive($wintitle,"",5) = 0 then  
	msgbox(16,"Timeout","Konnte Fenster nicht finden!")  
	exit 1
EndIf
; retrieve text of control
$text = ControlGetText($wintitle,"","[CLASS:TwwDBRichEdit; INSTANCE:1]")  

; Word starten
$objWord = ObjCreate("Word.Application")  
; leeres Dokument hinzufügen
$doc = $objWord.Documents.Add()
; make word visible
$objWord.Visible = true
; insert text into document
$doc.Content.Text = $text

RunWait("wscript.exe ""C:\Users\imebro\Desktop\memo.vbs""")  

Oder habe ich diese Zeile am Ende auch noch falsch eingesetzt? face-sad

Aber... diese Fehlermeldung kommt auch, wenn ich das "memo.vbs" manuell vom Desktop aus starte.

Hier der Code des "memo.vbs":

Attribute VB_Name = "memo"  

Sub memo()
Attribute memo.VB_Description = "Makro aufgezeichnet am 04.09.2015 von imebro"  
Attribute memo.VB_ProcData.VB_Invoke_Func = "Normal.NewMacros.memo2"  
'  
' memo Makro  
' Makro aufgezeichnet am 04.09.2015 von imebro  
'  
    ' Selection.Paste  
    nummer = InputBox("Bitte Nummer eingeben:")  
    fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".doc"  
    ActiveDocument.SaveAs FileName:=fname, FileFormat:=wdFormatDocument, _
    LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _  
    :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _  
    SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    False
    Application.Quit
End Sub

LG
imebro
Mitglied: 114757
114757 Sep 08, 2015 updated at 10:41:02 (UTC)
Goto Top
OMG , "Hände über Kopf zusammenschlag" ..... das kann nicht gehen, da du in deinem VBS das Word-Objekt ja garnicht erzeugst ... VBS und Word sind zwei paar Schuhe.

Mach mal einen Programmiergrundkurs ... das wird mir hier jetzt echt zu blöd.
Mitglied: 37414
37414 Sep 08, 2015 at 10:50:00 (UTC)
Goto Top
...ok, ok... face-wink

Ich lasse es und mache es in den 2 Schritten.

1) Start des AutoIT-Scripts (bis zum offenen Word mit schon rein kopiertem Text)
2) Klick im Word-Dokument auf den Button "memo" in der Systemleiste

So geht´s ja auch face-smile

Danke und Gruss,
imebro
Mitglied: 37414
37414 Sep 09, 2015 at 09:14:27 (UTC)
Goto Top
Ich versuche gerade, mein Script doch noch etwas zu erweitern.
Das AutoIT-Script funktioniert ja, bis das Word-Dokument geöffnet wird inkl. des ausgelesenen Textes.

Nun habe ich dem Word-Makro (welches den Rest ausführt) eine Tastenkombination zugeordnet (Strg + Alt + 9).

Im AutoIT-Script habe ich daher die folgenden Zeilen hinzugefügt:

; Starte Word-Makro
Send("^!9")  

Leider tut sich nichts... aber mir fiel auf, dass das Word-Dokument auch nicht aktiviert war.
Dann habe ich versucht, mit einem Mausklick das Dokument zu aktivieren.

Dazu habe ich die folgenden Zeilen dem AutoIT-Script hinzugefügt:

ganz oben:
#include <AutoITConstants.au3>

unten:

MouseClick($MOUSE_CLICK_LEFT)

Dann erhalte ich die folgende Fehlermeldung:

AutoIt Error
Line 25 (File "C:\Users\imebro\Desktop\memo_9.9.15.au3"):

MouseClick($MOUSE_CLICK_LEFT)
MouseClick(^ ERROR

Error: Variable used without being declared.
OK

Die Codes habe ich alle auf der AutoIT-Function-Seite gefunden...

Wie kann ich das Problem lösen?

Danke und Gruss,
imebro
Mitglied: 114757
114757 Sep 09, 2015 updated at 09:25:22 (UTC)
Goto Top
SCITE als Editor nutzen, dann passieren dir nicht so viele Fehler... und alles läuft so wie es soll (auch das von grexit :-P)

Und ein Makro das schon in einem Dokument in einem Modul liegt kann man so in AutoIT starten:
$objWord.Run("memo")  

$MOUSE_CLICK_LEFT Das ist ja auch eine Variable und keine Konstante ...
MouseClick("left",200,200)
MouseClick ( "button" [, x, y [, clicks = 1 [, speed = 10]]] )
https://www.autoitscript.com/autoit3/docs/functions/MouseClick.htm

Einfach mal die Doku lesen ....
Mitglied: 37414
37414 Sep 09, 2015 updated at 09:33:26 (UTC)
Goto Top
Danke Dir...

mit dem Befehl für den Makrostart hat´s funktioniert.

Den SCITE-Editor nutze ich ja bereits face-wink

Jetzt kann ich per Start mit dem AutoIT-Script den Text auslesen, ein Word-Dokument öffnen, die Nummer eingeben und ins richtige Verzeichnis speichern... fast perfekt face-smile

Wenn ich jetzt noch eine Prüfung mit rein nehmen könnte, ob das Dokument schon existiert... und ob es ggf. überschrieben werden soll, dann wäre es tatsächlich perfekt face-smile Diese Prüfung müßte ja dann im Word-Makro erfolgen...

LG
imebro

P.S.
Genau die Mouseklick-Doku hatte ich gelesen und dann den Code von unten raus kopiert face-wink
Mitglied: 114757
114757 Sep 09, 2015 updated at 09:37:43 (UTC)
Goto Top
Wenn ich jetzt noch eine Prüfung mit rein nehmen könnte, ob das Dokument schon existiert
Null Problem ...
Set fso = CreateObject("Scripting.FileSystemObject")  
if fso.FileExists("Pfad zu deiner Datei") then  
    msgbox "Datei existiert schon",vbExclamation  
end if
https://msdn.microsoft.com/en-us/library/x23stk5t%28v=vs.84%29.aspx
Mitglied: 37414
37414 Sep 09, 2015 updated at 09:52:06 (UTC)
Goto Top
Danke Dir...

habe das Word-Makro eben so ergänzt, aber leider wird eine existierende Datei dennoch überschrieben.

Hier mal der gesamte Makro-Code:

Sub memo()

    nummer = InputBox("Bitte Nummer + Name eingeben:")  
    fname = "S:\ARCHIV\Mittelvergabe\Memos\" & nummer & ".doc"  
    ActiveDocument.SaveAs FileName:=fname, FileFormat:=wdFormatDocument, _
    LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _  
    :="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _  
    SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
    False
    Set fso = CreateObject("Scripting.FileSystemObject")  
    If fso.FileExists("S:\ARCHIV\Mittelvergabe\Memos\") Then  
    MsgBox "Datei existiert schon", vbExclamation  
End If
    Application.Quit
End Sub

Oder habe ich Deine Code-Zeilen (14 - 17) an der falschen Stelle eingefügt? face-wink

LG
imebro
Mitglied: 114757
114757 Sep 09, 2015 updated at 10:04:59 (UTC)
Goto Top
Och nö....
fso.FileExists("S:\ARCHIV\Mittelvergabe\Memos\")
Da muss der Dateipfad (inkl. Dateiname drin stehen ....) . Warum heißt die Funktion wohl FileExists ?! Ich glaube es wäre besser wenn du das jemanden machen lässt der was davon versteht ...

Ich bin jetzt endgültig raus hier.

Viel Erfolg noch
Gruß jodel
Mitglied: 37414
37414 Sep 09, 2015 at 11:20:29 (UTC)
Goto Top
...stimmt face-smile

Ich habe es jetzt so verändert, dass ich den oben vergebenen Dateinamen (Inputbox) mit eingegeben habe.
Dann kommt das Hinweisfenster "Datei existiert schon".
Leider kann ich nicht wählen, ob ich diese überschreiben möchte oder nicht.
Dazu habe ich auch über Deine Verlinkung keinen Hinweis gefunden.

LG
imebro
Mitglied: 122990
122990 Sep 09, 2015 updated at 11:23:11 (UTC)
Goto Top
Ein
kill "C:\deinedatei.doc"
Löst dein Problem mit dem überschreiben ...
Mitglied: 37414
37414 Sep 10, 2015 at 06:13:08 (UTC)
Goto Top
Vielen Dank...
habe jetzt eine Lösung gefunden, aber noch eine Frage dazu.
Wie kann ich - über AutoIT - den eingelesenen Text FORMATIERT in das Word-Dokument speichern?
Mit meiner jetztigen Lösung wird die Formatierung leider gelöscht face-sad

Hier mal der Code-Abschnitt, in dem der Text nach Word gespeichert wird:

Func _Save_to_Word()
	$oWord = _Word_Create(1)
	$oDoc = _Word_DocAdd($oWord)
	$oWord.Selection.TypeText ($text)
	;_Word_DocSaveAs($oDoc, "d:\"& $txt_Filename,12) ; save as docx")  
	Local $iFileExists = FileExists("S:\ARCHIV\Mittelvergabe\Memos\" & $txt_Number)  
	If $iFileExists Then
		$ja_nein = MsgBox(4, "", "The file exists." & @CRLF & "Überschreiben Ja/Nein")  
		IF $ja_nein = 6 Then _Word_DocSaveAs($oDoc, "S:\ARCHIV\Mittelvergabe\Memos\" & $txt_Number) ; save as doc"  
		IF $ja_nein = 7 Then MsgBox(0,"","Datei wird nicht gespeichert!")  
	Else
		_Word_DocSaveAs($oDoc, "S:\ARCHIV\Mittelvergabe\Memos\" & $txt_Number) ; save as doc"  
	EndIf
	_Word_Quit($oWord)
EndFunc


Danke und Gruss,
imebro
Mitglied: 37414
37414 Sep 10, 2015 at 10:21:42 (UTC)
Goto Top
OK... hat sich erledigt... face-smile

Eine Änderung im Code (Abbildung per Code von Strg A, C und V) brachte die Lösung.

LG
imebro