Anzeige
Archiv - Navigation
1744to1748
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Prüfen ob Textdatei im Editor offen ist

Prüfen ob Textdatei im Editor offen ist
16.03.2020 10:07:39
Andreas
Hallo Excel Freunde,
da ich in letzter Zeit vermehrt auf neue englische Vokabeln stieß, habe ich diese online nachgeschlagen. Irgendwann kam die Idee auf, daraus eine Vokabelliste zu erstellen, welche ich per Bluetooth auf mein Handy schicken kann, und immer wenn ich etwas Luft habe, diese auswendig lerne. Am besten geeignet erschien mir hierfür eine kompakte Textdatei
Ich habe also eine VBA Routine geschrieben, welche die von der Website nach Excel kopierten Strings aufarbeitet und einen aufgereinigten String im Debug.Print Fenster ausgibt. Das klappt auch sehr gut. Jetzt habe ich mir noch überlegt, dass ich diese Textstring dann automatisch in die Vokabeln.txt laden lasse.
Und hier habe ich keinen Ansatzpunkt gefunden. In Exceldateien kann ich ja sehr leicht prüfen, ob eine gewünschte Datei schon geöffnet ist. Ist sie das nicht, wird sie geöffnet und kann sie nachfolgend wiederholt anweisen, die letzte Zelle bestimmen, und neue Einträge hinzufügen.
Wie geht dies jedoch für Textdateien? Geht dies überhaupt? Was ich bei meinen Recherchen viel fand waren solche Zeilen 'Open strPath For Input As #1' Ich habe die testweise eingesetzt, aber die Datei wird dann im Editor nicht angezeigt, obschon die Datei für 'Append' o.ä. sicher verfügbar ist.
Die angedachte Syntax ist folgende: Wenn eine neuer Vokabelstring ermittelt wurde, dann prüfe, ob die Vokabeln.txt offen ist. Wenn ja, dann füge den neuen String in dieser Datei an und lasse sie offen. Wenn nicht, dann öffne sie (sichtbar, im Editor), füge den neuen String an und lasse sie offen.
Wie gesagt, in Excel Dateien oder auch Word ist das kein Problem, aber in Textdateien habe ich bisher keinen sinnvollen Ansatz finden können.
Weiß hier im Forum jemand Rat? Mit einem Ansatz welcher sicher die Prüfung, ob die Datei schon geöffnet ist, vornimmt, wäre mir schon geholfen.
https://www.herber.de/bbs/user/135884.xlsm
Vielen Dank für Eure Erfahrung und Antworten!
Viele Grüße, Andreas Hanisch

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 11:28:25
volti
hall Andreas,
schau mal, ob Dir dieses hier hilft:
Option Explicit
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Sub Notepad_Test()
'Prüfen, ob Textdatei im Editor geöffnet ist
 Dim sTextdatei As String
 sTextdatei = "Neues Textdokument.txt"
 If FindWindow(vbNullString, sTextdatei & " - Editor") > 0 Then MsgBox "Datei schon geöffnet!", vbInformation, "Test"
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 17:47:33
Andreas
Hallo Karl-Heinz,
vielen Dank für Deine schnelle Antwort. Ich kam erst jetzt dazu, die von Dir vorgeschlagene IF Prüfung auf 'FindWindow' zu testen und sie ist genau das, was ich suchte. Zusammen mit dem Code von Nepumuk habt ihr beiden mir heute sehr viel Neues gezeigt!
Danke!
Einen schönen Abend wünscht Dir, Andreas Hanisch
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 17:58:41
volti
Vielen Dank Andreas für die Rückmeldung.
Und es lohnt sich, sich mit der API zu beschäftigen, mit ihren tausend Funktionen kann man alles machen.
Wie z.B. Messages an ein Fenster schicken, wie Nepumuk es ja mit Postmessage zum Schließen des Notepads gemacht hat...
viele Grüße
Karl-Heinz
Anzeige
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 18:06:08
Andreas
Hallo Karl-Heinz,
da hast Du recht. Ich hatte die API bisher nur rudimentär genutzt, aber sich das mal auf der Zunge zergehen lassen: Aus Excel 'Messages an ein Fenster schicken' Ein Fenster, was gar nicht Excel ist! Erst als ich in Nepumuks Code hier und da mal eine Zeile auskommentierte, wurde mir z.B. das Schließen über 'PostMessage' erst deutlich.
Da habe ich noch viel zu lernen :)
Beste Grüße, Andreas
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 16:12:12
Nepumuk
Hallo Andreas,
teste mal:
Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function PostMessageA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal wMsg As Long, _
    ByVal wParam As LongPtr, _
    ByVal lParam As LongPtr) As Long
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 WM_CLOSE As Long = &H10
Private Const SW_SHOWDEFAUL As Long = 10

Public Sub Test()
    
    Const FILE_PATH As String = "C:\Users\sgqms\Vokabeln.txt"
    
    Dim lngptrHwnd As LongPtr
    Dim intFreeFile As Integer
    Dim blnIsOpen As Boolean
    
    lngptrHwnd = FindWindowA("Notepad", "Vokabeln.txt - Editor")
    
    If lngptrHwnd <> 0 Then
        
        Call PostMessageA(lngptrHwnd, WM_CLOSE, 0&, 0&)
        
        blnIsOpen = True
        
    End If
    
    intFreeFile = FreeFile
    
    Open FILE_PATH For Append As #intFreeFile
    
    Print #intFreeFile, "NeuerText"
    
    Close #intFreeFile
    
    If blnIsOpen Then Call ShellExecuteA( _
        Application.hwnd, "OPEN", FILE_PATH, vbNullString, vbNullString, SW_SHOWDEFAUL)
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Prüfen ob Textdatei im Editor offen ist
16.03.2020 17:44:01
Andreas
Lieber Karl-Heinz, lieber Nepumuk,
Wow! Vielen Dank Euch beiden, dass Ihr mich auf die richtige Spur brachtet und wie in Deinem Post, Nepumuk, schon ein komplett funktionierender Code dabei ist! Soviel habe ich nicht erwartet. Aber ich muss immer noch knabbern, das alles zu verstehen. Das wird auch noch etwas dauern. Das ist für mich noch eine ganz andere Liga. Das es so etwas gutes wie den 'FindWindow' gibt, war mir nicht bekannt. Und dass, hwnd für den WindowHandler steht, auch nicht. Ich habe aber eine gute Website gefunden, die mich hier sicher noch voranbringen wird. https://www.vba-tutorial.de/apireferenz/handles.htm
Euch beiden auf alle Fälle ein großes Dankeschön. Denn die Codes sind genau das was ich suchte und selbst nicht hinbekam. Und das neue Wissen, das für mich in Euren Threads steckt ist enorm. Das muss ich erst einmal verarbeiten und verstehen.
Habt noch einen guten Montagabend und eine gute Restwoche!
Viele Grüße, Andreas Hanisch
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige