mit VBA erzeuge ich aus Excel heraus eine kleine TextDatei
namens MusterText.txt
Die Datei wird im Verzeichnis C:\MusterOrdner abgelegt.
Die Adresse heißt also C:\MusterOrdner\MusterText.txt
Nun möchte ich den normalen Texteditor vom Windows Betriebssystem
mittels VBA aus Excel heraus aufrufen
und mir dann den Dateninhalt mittels des Editors anzeigen lassen.
Es soll also nicht etwa der Inhalt der Textdatei nach Excel importiert
werden, sondern halt nur der Editor mit dem Inhalt der Textdatei
angezeigt und in den Vordergrund gerückt werden.
Ich möchte dies gerne so haben, weil ich dann diesen kleinen Text
aus der Textdatei einfach kopieren kann und dann z.B. in eine
neue eMail, die mit Outlook-Express abgeschickt werden soll
einfügen kann.
Warum wähle ich diesen Umweg, denn ich könnte ja auch den Text,
der aus der Exceltabelle stammt einfach dort kopieren und dann
in die eMail einfügen. Ja, das würde zwar funktionieren aber dann
habe ich es bisher nicht geschafft einen reinen Text in die eMail
zu kopieren, denn immer waren dann auch die
Formatierung aus der Excel-Tabelle mit dabei.
Wer kann mir zu diesem Thema eine Tipp geben ?
Wenn ich mit VBA auf direkten Weg die 5-6 Zeilen Text, die in der
kleinen Textdatei drin sind direkt als reinen Text in die
Anwendung Qutlook Express einfügen könnte, dann wäre das
natürlich noch besser.
Super wäre natürlich wenn ich die eMail - Adresse des
Empfängers direkt in Zeile "An:" übertragen könnte aber soviel
Luxus muß nicht sein.
Mit freundlichen Grüßen
Ludwig
Sub StarteEditorMitDatei()
Const EDITOR = "C:\Windows\notepad.exe"
Const DATEI = "C:\MusterOrdner\MusterText.txt"
With CreateObject("Wscript.Shell")
.Run """" & EDITOR & """ """ & DATEI & """", 5
End With
End Sub
Peter
> Nun möchte ich den normalen Texteditor vom Windows Betriebssystem
> mittels VBA aus Excel heraus aufrufen
> und mir dann den Dateninhalt mittels des Editors anzeigen lassen.
Dazu hat Excel eine Shell-Funktion.
Sub Test()
Const DATEI = "C:\temp\test.txt"
Dim TaskId As Double
TaskId = Shell("notepad.exe " & DATEI, vbMaximizedFocus)
If TaskId = 0 Then MsgBox "Konnte notepad nicht starten"
End Sub
> Wenn ich mit VBA auf direkten Weg die 5-6 Zeilen Text, die in der
> kleinen Textdatei drin sind direkt als reinen Text in die
> Anwendung Qutlook Express einfügen könnte, dann wäre das
> natürlich noch besser.
Du könntest auch den Umweg über die Zwischenablage nutzen und dort den
Text platzieren.
Andreas.
Dim MyData As Object
Sub Test()
Dim R As Range, S As String
For Each R In Range("A1:D5")
S = S & R.Text & vbCrLf
Next
SetClip S
End Sub
Function GetClip() As String
Dim Data
If MyData Is Nothing Then Set MyData = CreateObject("htmlfile")
Data = MyData.ParentWindow.ClipboardData.GetData("text")
If IsNull(Data) Then GetClip = "" Else GetClip = Data
End Function
Sub SetClip(ByVal S As Variant)
If MyData Is Nothing Then Set MyData = CreateObject("htmlfile")
MyData.ParentWindow.ClipboardData.SetData "text", S
End Sub
Hallo Peter,
vielen Dank, Deine Prozedur ist genau richtig.
Ich habe die Prozedur an das Ende einer bereits
vorhandenen Prozedur, mit der ich die Textdatei erzeuge
eingebaut und am Ende wird mir dann die Datei von
Deinem Code aufgerufen und angezeigt, Prima.
Da ich die Prozedur aus einer ExcelAnwendung aufrufe
möchte ich noch nachfragen ob Du mir noch einen Tipp
geben kannst, wie ich statt
Const DATEI = "C:\MusterOrdner\MusterText.txt
als Pfad sowas wie : ThisWorkbook.Path
Filename:=ThisWorkbook.Path & "\MusterText.txt"
verwenden kann, denn dann könnte man ja überall
wo sich die Anwendung selbst befindet mit dieser
Prozedur arbeiten ohne den konstanten Pfad
vorher angeben zu müssen.
Vielen Dank im Voraus.
Mit freundlichen Grüßen
Ludwig
Hallo Andreas,
nachdem ich Peter geantwortet hatte, habe ich gesehen, daß Du zu
dem von mir angefragten Thema auch noch Vorschläge gemacht hast.
Dafür zunächst einmal vielen Dank.
Der Vorschlag von Peter ist kurz und passend und ich kann auch
weitgehend erkennen wie die Prozedur abläuft.
Diese Prozeduren bieten eine Vielfalt, die ich aber leider nicht
so ganz oder nur zum Teil verstehe.
Es ist mir bekannt, daß man, wenn man eine Prozedur
unter Zuhilfenahme einer Funktion ablaufen lassen will,
beide Funktion und Code gemeinsam in einem Verzeichnis
haben muß.
Im vorliegenden Fall, weiß ich leider nicht welche
Prozedur, letztlich was macht und da Du etwas
andere Dateinamen verwendet hat bin ich irritiert.
Gerne möchte ich auch Deine Prozeduren ausprobieren
und bitte Dich daher um eine kurze Erklärung damit
ich weiß wie ich vorgehen soll.
Mit freundlichen Grüßen
Ludwig
Genau so. Ersetze in der Zeile mit dem .Run-Kommando das Wort DATEI
durch Pfad+Filename. Hier die neue Zeile mit einem Umbruch wegen des
Newsreaders.
.Run """" & EDITOR & """ """ & _
ThisWorkbook.Path & "\MusterText.txt" & """", 5
Peter
k�nntest Du mal schauen und z.B. folgendes
http://www.rondebruin.nl/sendmail.htm
oder
ausprobieren.
--
Moin+Gruss Alexander - MVP for MS Excel - www.xxcl.de - mso2000sp3 --7-2
Hallo Peter,
Klasse, Danke,
die Prozedur ist ja jetzt noch kürzer und läuft ganz fix.
Mit freundlichen Grüßen
Ludwig
Hallo Alexander,
vielen Dank für Deinen Hinweis.
Die von Dir genannten Beiträge kenne ich alle schon,
wenn Du mal genau hinschaust, wirst Du sehen, daß
da Rezepte nur für Qutlook, nicht aber wirklich brauchbare
weil auf SendKey-Basis aufgebaute Rezepte angeboten werden.
Das Versenden von Serien - eMails mit Outlook kenne
ich schon lange und habe das auch schon praktiziert.
Das funktioniert zwar aber vom Komfort kann man da
auch nicht sprechen.
Meine jetzige Variante für das Versenden individueller Mails
mit dem Zwischenschritt über die Textdatei, die mir ja
durch Peter's Hilfe sofort angezeigt wird ist nachvollziehbar
weil da nur noch von der Textdatei nach Outlook-Express
rüber kopiert werden muß und ab geht die Mail.
Die Anrede von Männlein oder Weiblein ist da schon alles
fertig, in der Textdatei individuell geregelt vorhanden und
man sieht vor allem vorher was man da abschickt..
Mit freundlichen Grüßen
Ludwig
> Gerne möchte ich auch Deine Prozeduren ausprobieren
> und bitte Dich daher um eine kurze Erklärung damit
> ich weiß wie ich vorgehen soll.
Nun ja, ich vermute Du schreibst mehrere Zeilen in eine Textdatei,
oder?
Diese faßt Du bitte zu einer (einem String) zusammen und fügst am Ende
jeder Zeile ein vbCrLf an. Anschließend übergibst Du den String an
SetClip
Zum Testen öffnest Du NOTEPAD von Hand und drückst Strg-V. Der in
Excel erzeugte String sollte nun in Notepad erscheinen.
Andreas.
Dim MyData As Object
Sub Test()
Dim S1 As String, S2 As String
Dim Alles As String
S1 = "Andreas"
S2 = "Killer"
Alles = S1 & vbCrLf & S2 & vbCrLf
SetClip Alles
Da stimme ich Dir nachdr�cklich zu!
--