Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mit VBA aus Excel heraus den Text-Editor öffnen und eine Datei in den Editor laden

3,262 views
Skip to first unread message

Ludwig

unread,
Jan 27, 2010, 6:45:04 PM1/27/10
to
Hallo,

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

Peter Schleif

unread,
Jan 28, 2010, 1:40:25 AM1/28/10
to
Ludwig schrieb am 28.01.2010 00:45 Uhr:
>
> 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.

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

Andreas Killer

unread,
Jan 28, 2010, 3:18:18 AM1/28/10
to
On 28 Jan., 00:45, Ludwig <berthold.mud...@web.de> wrote:

> 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

Ludwig

unread,
Jan 28, 2010, 4:02:03 AM1/28/10
to

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

Ludwig

unread,
Jan 28, 2010, 4:33:25 AM1/28/10
to

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

Peter Schleif

unread,
Jan 28, 2010, 4:56:02 AM1/28/10
to
Ludwig schrieb am 28.01.2010 10:02 Uhr:
>
> Filename:=ThisWorkbook.Path & "\MusterText.txt"

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

Alexander Wolff

unread,
Jan 28, 2010, 5:52:52 AM1/28/10
to

Ludwig

unread,
Jan 28, 2010, 6:07:48 AM1/28/10
to


Hallo Peter,

Klasse, Danke,
die Prozedur ist ja jetzt noch kürzer und läuft ganz fix.

Mit freundlichen Grüßen

Ludwig

Ludwig

unread,
Jan 28, 2010, 12:31:11 PM1/28/10
to
On 28 Jan., 11:52, "Alexander Wolff" <oo...@gmx.de> wrote:
> In
>
> http://groups.google.com/group/microsoft.public.de.excel/search?hl=de...
>
> könntest Du mal schauen und z.B. folgendes
>
> http://www.rondebruin.nl/sendmail.htm
>
> oder
>
> http://groups.google.com/group/microsoft.public.de.excel/browse_threa...

>
> ausprobieren.
> --
> Moin+Gruss Alexander - MVP for MS Excel -www.xxcl.de- mso2000sp3 --7-2

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


Andreas Killer

unread,
Jan 29, 2010, 3:30:40 AM1/29/10
to
On 28 Jan., 10:33, Ludwig <berthold.mud...@web.de> wrote:

> 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

Alexander Wolff

unread,
Jan 29, 2010, 6:40:02 AM1/29/10
to
Ludwig wrote:
> man sieht vor allem vorher was man da abschickt..

Da stimme ich Dir nachdr�cklich zu!
--

0 new messages