Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Notepad/Editor Datei öffnen u. drucken

Forumthread: Notepad/Editor Datei öffnen u. drucken

Notepad/Editor Datei öffnen u. drucken
29.12.2021 17:16:33
Mr.Right
Hallo zusammen,
ich möchte mit Excel VBA eine Editor-/ Notepad-Datei also .txt Datei öffnen und diese an einen vorher bereits definierten Drucker automatisch ausdrucken lassen.
Der Inhalt der Text-Datei wird bereits in meinem Ablauf vorgeschrieben und dann gespeichert. Würde am liebsten die Datei direkt nachdem ich sie geschrieben habe drucken, aber das funktioniert was ich so recherschiert habe leider nicht. Meine Excel/ VBA-Kenntnisse sind bescheiden. Habe im Internet bereits mehrfach gelesen das man es mit dem Shell-Befehl machen kann, nur habe ich keine Ahnung wie ich das umsetze. Als Anmerkung noch, der Name der jeweiligen Textdatei ändert sich und wird in die Variable strDateiname geschrieben.
Bisheriger Code sieht wie folgt aus:

Function Txt_datei(x As Integer)
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("Tabelle1")
'Speicherpfad der Txt-Datei
strPath = "C:...Pfad"
'Dateiname = Name .txt
strDateiname = sht.Range("G" & x) & ".txt"
'Code wird in Txt-Datei geschrieben
Open strPath & strDateiname For Output As #x
Print #x, "^XA" _
& vbCrLf & "^CFP,12" _
& vbCrLf & "^FO65,20^FD---^FS" _
& vbCrLf & "^FO85,40^FD " & sht.Range("G" & x) & " ^FS" _
& vbCrLf & "^FO7^BQN,2,2^FDQA," & "ANR " & sht.Range("C" & x) & " D " & sht.Range("D" & x) & " SN " & sht.Range("G" & x) & " ^FS" _
& vbCrLf & "^XZ"
Close #x
End Function
Habe bereits das hier probiert:
Dim RetVal
strPath = "C:...81910-21002.txt"
RetVal = Shell("C:\WINDOWS\NOTEPAD.EXE" & strPath, 1)
aber er findet hier schon die Datei nicht diese ich öffnen möchte, obwohl die Schreibweise beachtet wurde und auch richtig geschrieben ist. Wenn ich nur das Notepad mir öffnen lasse funktioniert es.
Wäre schön wenn mir jemand helfen könnte :)
Vielen Dank
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
vielleicht so über SendKeys ?
29.12.2021 20:29:29
Udo.D
... oder so ähnlich ...

Sub Editor_öffnen_drucken()
' Mal angenommen dein Inhalt steht in A1 oder ...
[A1].Copy ' oder [A1:K25] usw
' ChDrive Left(Sheets(1).]Range("A1").Text, 2) ' wenn der Pfad mal auf eine Datei gemünzt wird auf einem anderen Laufwerk
' und du nach Notepad.exe" noch ... & " /Dateiname etc. , ", vbNormalFocus) angibst
Dim appID As Integer
appID = Shell("C:\WINDOWS\NOTEPAD.EXE", vbNormalFocus)
With Application
.Wait (Now + TimeValue("0:00:02"))
' .SendKeys "^N", True ' neues Sheet
.SendKeys "^v", True ' Einfügen
' .SendKeys ("{tab}")  ' Tabulatoren Sprung ( im Menü des zweiten Programmes ( in dem Fall Notepad.exe )
' .SendKeys ("{tab}")  ' so oft bis du eben an die gewünschte Stelle gesprungen bist, dann z.B.
' .SendKeys "^a" ' Alles markieren
' .SendKeys "{DELETE}" ' Auswahl löschen
' .SendKeys "{ENTER}" ' Auswahl bestätigen
End With
SendKeys "^p", True
'  oder hier noch weitere Stufen mit TAB ; Enter usw ... um quasi im Menü des Druckerfensters herum zu hüpfen
'  und da dann entspr. Einstellungen vorzunehmen , weitere SendKeys Befehle findest du über google hierzu
SendKeys "{ENTER}" ' zum Schluss dann auf die Drucken Taste springen und Auswahl bestätigen
End Sub
LG Udo
Anzeige
AW: Notepad/Editor Datei öffnen u. drucken
29.12.2021 21:44:09
volti
Hallo,
Du hast beim Shell-Befehl ein Leerzeichen vergessen. Parameter werden im DOS über Leerzeichen abgetrennt.
Bitte aber auch beachten, dass übergebende Dateinamen kein Leerzeichen enthalten dürfen oder diese in Gänsefüßchen zu setzen sind.
Alternativ kannst Du auch die Shellexecute-Funktion verwenden. Entweder die API-Version oder, wie im Beispiel, die Shell-Version.
Bei Verwendung der SendKeys Print-Funktion Strg-P die Ausführungen von Udo beachten.
Code:

[Cc]

Declare PtrSafe Sub Sleep Lib "kernel32" ( _ ByVal dwMilliseconds As Long) Sub Test1() strPath = "C:...81910-21002.txt" RetVal = Shell("C:\WINDOWS\NOTEPAD.EXE " & """" & strPath & """", 1) Sleep 500 SendKeys "^p", True End Sub Sub Test2() strPath = "C:...81910-21002.txt" With CreateObject("Shell.Application") .ShellExecute strPath, "", "", "open", 4 Sleep 500 SendKeys "^p", True End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Notepad/Editor Datei öffnen u. drucken
30.12.2021 10:04:17
ChrisL
Hi
Hier noch eine Variante, welche ohne SendKeys auskommt. 64-bit Version.

Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long _
) As Long


Sub t()
ShellExecuteA 0&, "Print", "C:\Pfad\Testdatei.txt", vbNullString, vbNullString, 0
End Sub
cu
Chris
Anzeige
AW: Notepad/Editor Datei öffnen u. drucken
30.12.2021 10:14:11
Nepumuk
Hallo,
Drucken ohne vorher öffnen geht so:

Option Explicit
Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As LongPtr
Private Const SW_HIDE As Long = 0
Public Sub Test()
Dim strPrintername As String
strPrintername = Chr$(34) & "Microsoft Print to PDF" & Chr$(34)
Call ShellExecuteA(0, "PRINTTO", "H:\ROM\TeamViewer.txt", strPrintername, vbNullString, SW_HIDE)
End Sub
Gruß
Nepumuk
Anzeige
wow, tolle Lösungen eurerseits ! Die ...
30.12.2021 16:07:21
Udo.D
nehm ich mir ebenfalls gerne zum Vorbild , prima
Lieben Dank auch meinerseits !
Udo
;
Anzeige
Anzeige

Infobox / Tutorial

Notepad-Dateien mit Excel VBA öffnen und drucken


Schritt-für-Schritt-Anleitung

Um eine Notepad-Datei (TXT-Datei) mit Excel VBA zu öffnen und sie anschließend direkt zu drucken, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel mit ALT + F11.

  2. Erstelle ein neues Modul, indem du im Projekt-Explorer mit der rechten Maustaste auf VBAProject (DeineDatei) klickst, dann Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub NotepadDrucken()
       Dim strPath As String
       Dim strDateiname As String
    
       strPath = "C:\Dein\Pfad\" ' Ersetze diesen Pfad durch den tatsächlichen Speicherort
       strDateiname = "deineDatei.txt" ' Benenne deine Datei hier
    
       ' Öffne die Notepad-Datei
       Shell "notepad.exe " & strPath & strDateiname, vbNormalFocus
    
       ' Warte kurz, damit Notepad Zeit hat zu öffnen
       Application.Wait Now + TimeValue("0:00:02")
    
       ' Sende den Druckbefehl
       SendKeys "^p", True
       SendKeys "{ENTER}", True
    End Sub
  4. Passe den Pfad und den Dateinamen entsprechend deiner Datei an.

  5. Führe das Makro aus, um die Datei im Notepad zu öffnen und den Druckdialog anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: Datei wird nicht gefunden
    Stelle sicher, dass der Pfad und der Dateiname korrekt sind. Füge Anführungszeichen hinzu, wenn der Pfad Leerzeichen enthält:

    Shell "notepad.exe """ & strPath & strDateiname & """", vbNormalFocus
  • Fehler: SendKeys funktioniert nicht
    Wenn SendKeys nicht zuverlässig funktioniert, kann es hilfreich sein, die Wartezeit (Wait) zu erhöhen oder alternative Methoden wie ShellExecute zu verwenden.


Alternative Methoden

  1. Verwende ShellExecute:

    Private Declare PtrSafe Function ShellExecuteA Lib "shell32.dll" ( _
       ByVal hwnd As Long, ByVal lpOperation As String, _
       ByVal lpFile As String, ByVal lpParameters As String, _
       ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    
    Sub NotepadDruckenMitShellExecute()
       ShellExecuteA 0, "print", "C:\Dein\Pfad\deineDatei.txt", vbNullString, vbNullString, 0
    End Sub
  2. Drucken ohne Öffnen:

    Public Sub DruckeDirekt()
       Call ShellExecuteA(0, "PRINTTO", "C:\Dein\Pfad\deineDatei.txt", "Microsoft Print to PDF", vbNullString, 0)
    End Sub

Praktische Beispiele

  • Beispiel für das Drucken mit Notepad: Du kannst den oben beschriebenen Code in ein VBA-Modul einfügen und anpassen, um eine beliebige Notepad-Datei zu drucken. Achte darauf, die Datei vorher zu erstellen oder sicherzustellen, dass sie existiert.

  • Beispiel für das Senden von Text an Notepad:

    Sub TxtDateiErstellenUndDrucken()
       Dim strDateiname As String
       strDateiname = "C:\Dein\Pfad\neu.txt"
    
       Open strDateiname For Output As #1
       Print #1, "Dies ist ein Test!" ' Beispielinhalt
       Close #1
    
       Shell "notepad.exe " & strDateiname, vbNormalFocus
       Application.Wait Now + TimeValue("0:00:02")
       SendKeys "^p", True
       SendKeys "{ENTER}", True
    End Sub

Tipps für Profis

  • Variablen für dynamische Dateinamen:
    Du kannst Variablen verwenden, um Dateinamen dynamisch zu generieren, was besonders nützlich ist, wenn die Datei regelmäßig aktualisiert wird.

  • Verwendung von Sleep:
    Um sicherzustellen, dass Notepad vollständig geladen ist, bevor du SendKeys verwendest, kannst du die Sleep-Funktion aus der API hinzufügen.


FAQ: Häufige Fragen

1. Wie kann ich die Wartezeit für SendKeys anpassen?
Du kannst die Wartezeit erhöhen, indem du den Wert in Application.Wait anpasst. Zum Beispiel: Application.Wait Now + TimeValue("0:00:05") für 5 Sekunden.

2. Was tun, wenn SendKeys nicht funktioniert?
Wenn SendKeys unzuverlässig ist, versuche, die Verwendung von ShellExecute zu integrieren, um direkt zu drucken, ohne Notepad zu öffnen.

3. Gibt es eine Möglichkeit, Druckeroptionen festzulegen?
Druckeroptionen können in der Regel im Druckdialog von Notepad selbst festgelegt werden, wenn du SendKeys verwendest, um den Druckdialog zu öffnen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige