Excel VBA Programmierung
Dieser Artikel beschreibt zwei Möglichkeiten Daten aus einem Excel Worksheet formatiert in Notepad anzuzeigen. Beide Methoden werden anhand eines Beispiels erläutert, bei dem ein Bericht ausgegeben und in Notepad angezeigt werden soll.
Die CreateTextFile-Methode erstellt eine Datei und gibt ein TextStream-Objekt zurück. In diesem Stream kann gelesen und geschrieben werden.
Objekt.CreateTextFile(Dateiname[, überschreiben[, Unicode]])
Mit der Write- und WriteLine-Methode kann in das TextStream-Objekt geschrieben werden. Nach dem Schreiben in den Textstream schließt die Close-Methode die Datei. Um die so erstellte Datei in Notepad anzuzeigen wird die notepad.exe mit Hilfe der Shell-Funktion geöffnet.
Private Sub OnReport()
Set fs = CreateObject("Scripting.FileSystemObject")
sPath = NewFileDlg
If Not IsEmpty(sPath) Then
Set f = fs.CreateTextFile(sPath, True)
f.WriteLine "Report " & Now()
f.WriteLine "Ergebnis: " & Range("A5").Text
f.Close
Shell "notepad.exe " & sPath, vbNormalFocus
End If
End Sub
Function NewFileDlg() 'Öffnet einen FileDialog und gibt den gewählten Datei Pfad zurück
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogSaveAs)
Dim vrtSelectedItem As Variant
If fd.Show = -1 Then NewFileDlg = fd.SelectedItems.Item(1)
Set fd = Nothing
End Function
Bei dieser Methode muss der Anwender keinen Dateinamen auswählen bevor der Report angezeigt wird. Der Text wird in die Zwischenablage geschrieben und mittels SendKeys-Anweisung im Notepad Fenster eingefügt. Anschließend kann der Anwender selbst entscheiden, ob er die Datei speichern möchte oder nicht.
Wie Daten in die Zwischenablage kopiert werden, wurde hier beschrieben. Wie im oberen Beispiel wird dann mittels Shell die notepad.exe gestartet, allerdings ohne einen Dateipfad zu übergeben. Stattdessen werden die Daten durch das Senden der Tastenkombination Strg+v in das Notepad Fenster eingefügt.
SendKeys string[, wait]
Das wait Argument gibt an, ob die Prozedur nach dem Senden fortgeführt werden soll (False), oder ob auf die Verarbeitung der Tastenfolge gewartet werden soll (True). In unserem Fall spielt der Wert keine Rolle.
Private Sub OnReport()
Dim Data As New DataObject
Data.SetText "Report " & Now() & vbNewline & _
"Ergebnis: " & Range("A5").Text
Data.PutInClipboard
Shell "notepad.exe", vbNormalFocus
SendKeys "^V", True
End Sub
Sende ein Kommentar, Frage, Korrekturen, Beschimpfungen...
doxapp c++ Zur Übersicht home