Änderung im Win-Explorer anzeigen?

Hallo zusammen,

ich steh etwas vor nem Rätsel. Und zwar habe ich im Netzwerk einen Ordern, in welchen von Zeit zu Zeit Dateien reingeschoben werden (nicht von mir) Daher möchte ich ne msgBox haben die mir - wenn da was neues reinkommt anzeigt -„Eine neue Datei ist angekommen“.

Ist soetwas möglich? Kann ich das mit VBA realisieren?

Gruß Rolf

Hallo,

ich steh etwas vor nem Rätsel. Und zwar habe ich im Netzwerk
einen Ordern, in welchen von Zeit zu Zeit Dateien
reingeschoben werden (nicht von mir) Daher möchte ich ne
msgBox haben die mir - wenn da was neues reinkommt anzeigt
-„Eine neue Datei ist angekommen“.

erst mal, ja, geht. :smile:

Nun die Fragen.
Was für ein VBA? Excel, Access, Word? Welche Version?

Und: Ist das Verzeichnis sonst leer? Oder ist dei Datei immer vorhanden, wird überschrieben und nur das Datum ‚Letzter Zugriff‘ ändert sich? Hat die Datei einen bekannten Namen oder soll auf jede datei reagiert werden, die in ein bestimmtes Verzeiochnis geschrieben wird, doer sind das eventuell sogar mehrere Verzeichnisse, in einem Bereich, in dem auch verzeichnisse angelegt und gelöscht werden?

Egal, wie die Antworten ausfallen, es geht, nur mit jeweils unteschiedlichem Aufwand. Die einfachen Varianten bekommen wir hier gemeinsam schnell zusammen, für die komplizierten müsstest Du erst etwas für Grundlagen sorgen sonst benötigen wir hier Jahre dafür. :smile:

Gruß Rainer

Hallo,

ich steh etwas vor nem Rätsel. Und zwar habe ich im Netzwerk
einen Ordern, in welchen von Zeit zu Zeit Dateien
reingeschoben werden (nicht von mir) Daher möchte ich ne
msgBox haben die mir - wenn da was neues reinkommt anzeigt
-„Eine neue Datei ist angekommen“.

erst mal, ja, geht. :smile:

Nun die Fragen.
Was für ein VBA? Excel, Access, Word? Welche Version?

Outlook - ich möchte ein Formular öffnen (ein Mail-Formular) wenn in diesen Ordner eine neue Datei aufschlägt. Mit dem Dateinamen im Betreff (Dies ist kein Problem für mich)

Und: Ist das Verzeichnis sonst leer? Oder ist dei Datei immer
vorhanden, wird überschrieben und nur das Datum ‚Letzter
Zugriff‘ ändert sich? Hat die Datei einen bekannten Namen oder
soll auf jede datei reagiert werden, die in ein bestimmtes
Verzeiochnis geschrieben wird, doer sind das eventuell sogar
mehrere Verzeichnisse, in einem Bereich, in dem auch
verzeichnisse angelegt und gelöscht werden?

Das Verzeichnis ist nicht leer,
Die Dateien werden nicht überschrieben, heissen immer anders…
Und es ist nur ein Verzeichnis.

Egal, wie die Antworten ausfallen, es geht, nur mit jeweils
unteschiedlichem Aufwand. Die einfachen Varianten bekommen wir
hier gemeinsam schnell zusammen, für die komplizierten
müsstest Du erst etwas für Grundlagen sorgen sonst benötigen
wir hier Jahre dafür. :smile:

hmmmm… die erste Variante scheint mir gut, obwohl ich ja noch jung bin und Zeit hätte :smile:

Gruß Rainer

Gruß Rolf

Hallo,

Outlook

OK …

ich möchte ein Formular öffnen (ein Mail-Formular)
wenn in diesen Ordner eine neue Datei aufschlägt. Mit dem
Dateinamen im Betreff (Dies ist kein Problem für mich)

… das ist gut, Outlook habe ich nämlich nicht. :smile:
So kann ich mich auf die Funktion selbst beschränken.

Das Verzeichnis ist nicht leer,
Die Dateien werden nicht überschrieben, heissen immer
anders…
Und es ist nur ein Verzeichnis.

Dann reicht Dir doch eine Liste mit allen Dateien, die gerade in dem Verzeichnis liegen? Dann nehmen wir eine Anleihe bei VBS, der Code läuft in jedem VB/VBA. Ich kopiere mal die Stelle aus dem Script56.chm

Function ZeigeDateiliste(ordnerAngabe)
 Dim fso, f, f1, fc, s
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFolder(ordnerAngabe)
 Set fc = f.Files
 For Each f1 in fc
 s = s & f1.name 
 s = s & "
"
 Next
 ZeigeDateiliste = s
End Function

OK? Der Code ist von MS, nicht von mir. :smile:

Gruß Rainer

PS. Ich habe mir den Code jetzt noch mal genau angesehen … Na ja. :smile: Kleine Änderung:

Function ZeigeDateiliste(ordnerAngabe)
 Dim fso, f, f1, fc, s
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFolder(ordnerAngabe)
 Set fc = f.Files
 For Each f1 in fc
 s = s & f1.name & VbCrLf
 Next
 ZeigeDateiliste = s
End Function

Nun stehen die Dateinamen Zeilenweise in dem String, sind leichter zu lesen. Wenn Du einen bestimmten Dateinamen schon hast, kannst Du mit
If InStr(ZeigeDateiliste, DateiName) Then
leicht herausfinden, ob die Datei in dem Verzeichnis steht.

1 Like

Hi Rolf,

Outlook - ich möchte ein Formular öffnen (ein Mail-Formular)
wenn in diesen Ordner eine neue Datei aufschlägt. Mit dem
Dateinamen im Betreff (Dies ist kein Problem für mich)

mir unklar. Leider kenne ich OL nicht, mir langt Outlook Express, dort ist es so, Posteingang, Postausgang, Entwürfe, usw. sind keine Ordner sondern Dateien. Kommen da neue Emails so kommen sie mit in die jeweilige Datei.

Ist das bei OL anders? Sind dort die Emails die kommen Dateien und Posteingang ist ein Ordner?

Grundsätzlich ist es so, wenn du mit Vba ein Verzeichnis überwachen willst ob da neue Dateien eintrudeln so mußt du einen Timer starten der alle x Sekunden dieses Verzeichnis überprüft auf Änderungen.

Oder aber du satrtest dann wenn du die Info brauchst was neu ist ein Makro.

In beiden Fällen muß aber bei Beendigung des PCs oder von Outlook oder sonstwas, sich gemerkt werden welche dateien denn vorhanden sind.

Bei Start des PCs oder Start von Outlook muß dann der Timer gestartet werden der die gespeicherten Dateinamen mit den aktuellen vergleicht. Auch ein von dir extra gestartetes makro braucht die Info was denn vorher im Ordner war um festzustellen ob was neues kam.

Nun kenne ich OL nicht so, may be erbietet von sich aus die Möglichkeit beim Ankommen einer neuen mail etwas zu signalisieren, oder man kann dies durch OL-Vba erreichen.

Ich hoffe ich konnte mich verständlich machen was mir unklar ist an dem was du vorhast.

Soll etwas geschehen wenn eine neue Email eintrifft, oder hat das quasi nix mit OL zu tun, sondern du willst nur ein beliebiges Verzeichnis auf dem PC überprüfen ob da neue Dateien drin sind und wenn ja soll dann automatisch OL gestartet werden mit einem neuen Mailformular.

Vielleicht sehe ich wieder mal den Wald vor lauter Bäumen nicht oder es hat sonstige Gründe daß ich nicht genau verstehe daß ich nicht verstehe was du vorhast7wünschst.

Und, was hat der mistige Win-Explorer mit dem Ganzen zu tun?

Gruß
Reinhard

Das ganze läuft in zwei Aktionen ab. Einmal - wenn in ein Verzeichnis in meinem Netzwerk eine neue Datei aufschlägt dann (zweite Aktion) soll er mir ein von mir entworfenes Mail-Formular öffnen mit dem Namen der neuen Datei als Betreff (alles andere „to“ „from“ etc. habe ich in dem Formular schon gemacht…)

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ok, das funtzt schon recht ordentlich. :wink:
Ich habs erstmal über nen Button gemacht und ne msgbx.
Die Fuktion läuft.
Vieleicht noch zur Erklärung - in das Verzeichnis werden „deffekte“ Dateien gespeichert (automatisch).
Und die kommen eben von Zeit zu Zeit rein.
Hintergrund ist das ich wenn eine NEUE reinkommt er mir n Festern (oder gleich die Mail) öffnet und ich den „Sender“ der deffekten Datei benachrichtigen kann.
Deine Richtung ist auf alle Fälle schon mal die richtige :smile:
Danke

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Rolf,

Vieleicht noch zur Erklärung - in das Verzeichnis werden
„deffekte“ Dateien gespeichert (automatisch).
Und die kommen eben von Zeit zu Zeit rein.
Hintergrund ist das ich wenn eine NEUE reinkommt er mir n
Festern (oder gleich die Mail) öffnet und ich den „Sender“ der
deffekten Datei benachrichtigen kann.
Deine Richtung ist auf alle Fälle schon mal die richtige :smile:

ahhh, Du brauchst ein Ereignis!

Gibt es nicht, das musst Du in einer Schleife selbst prüfen.
Am Besten hältst Du das Programm dann immer an, damit der Prozessor entlastet wird. Etwa so:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Form\_Load()
 Dim a As Boolean
 While a = False
 Sleep 100
 'Prüfen
 Wend
End Sub

Gruß Rainer

1 Like

Genau, so schauts gut aus. Werd es nun mal ganz konfigurieren und dann Bescheid geben :smile:

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Das ganze läuft in zwei Aktionen ab. Einmal - wenn in ein
Verzeichnis in meinem Netzwerk eine neue Datei aufschlägt dann
(zweite Aktion) soll er mir ein von mir entworfenes
Mail-Formular öffnen mit dem Namen der neuen Datei als Betreff
(alles andere „to“ „from“ etc. habe ich in dem Formular schon
gemacht…)

Hallo Rolf,

poste doch mal den vorhandenen Code, das Betreff kriegen wir dann schon hin.

Meine Verstehensproblematik hakt an anderen Punkten.

Was möchtest du eigentlich, eine VB-Exe die permanent ein Verzeichnis überwacht und bei einer neuen Datei im Verzeichnis OL startet?
Oder Vba-Code der in OL läuft und dies tut?

Was bedeutet „defekte datei“ ? Wäre die Datei so defekt daß sie nicht les- oder schreibbar ist könnte sie ja keiner in das Verzeichnis reinstellen.
Ist es z.B. eine .doc und Word kann sie nicht lesen so sehe ich keinerlei Grund einem User der sie in das verzeichnis „Defekte Dateien“ reinstellt eine Mail zuschreiben daß er sie reingestellt hat.
Das weiß er doch selbst.

Also plauder mal bitte was es mit defekten Dateien so auf sich hat.

Rainer hat dir ja schon Codeansätze gezeigt mit dem du Verzeichnisse auslesen kannst und auch wie man das alle x Sekunden machen kann.
Das reine Auslesen nützt dir aber Null um zu erkennen ob da ne neue Datei ist.

Danach, also wie das geht hast du aber nicht gefragt. Okay, vielleicht hast du ja da schon Code, deshalb zeige mal bite den vorhanden Code und da man am Code nicht unbedingt erkennt ob er in Vbs, OL-Vba, Vb laufen soll, sag dazu wo er laufen soll.

Gruß
Reinhard

Hallo Reinhard,

was ich bis jetzt verstanden habe:

in Outlook kommt (per Mail?) eine Information an, daß eine bestimmte Datei in ein bestimmtes Verzeichnis kopiert wird.
Wenn die Datei dann da ist, soll das Programm (in OL-VBA) reagieren, die Datei melden und eventuell verarbeiten.

Ein Ereignis dafür gibt es nicht, da bleibt nur noch das regelmäßige Lesen mit einem Timer. In VBA gibt es aber auch kein Timer Steuerelment, deshalb der Umweg mit Sleep, das macht das selbe, arbeitet wie ein nachgebautes ‚Timer-Steuerelement‘, nur nicht in ein OCX verpackt.

Gruß Rainer

Hallo Rolf,

einige Varianten wurden dir ja aufgezeigt. Ich habe mir net alles zu gemuete gefuehrt. Auch kenne ich mit VBA für Outlook net aus. Aber sollte etwa indentisch sein mit VB.

Unter VB würde ich das wie folgt lösen.

'Modul erstellen mit folgenden Source

Option Explicit

Public hWatchTh&, WatchThID&
Public ThreadBeenden As Boolean, ThreadIsRunning As Boolean
Public WatchPath$
Dim ChangeHandle&

Public Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" (ByVal lpPathName As String, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function FindNextChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
Public Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long
Public Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long


Public Function ThreadExecute(P As Long) As Long
 ThreadIsRunning = True
 ChangeHandle = FindFirstChangeNotification(WatchPath, False, &H1)
 If ChangeHandle -1 Then
 While Not ThreadBeenden
 If WaitForSingleObject(ChangeHandle, 50) = 0 Then
 'Eine Aenderung trat auf, hier dann darauf agieren :wink:
 End If
 FindNextChangeNotification ChangeHandle
 Wend
 FindNextChangeNotification ChangeHandle
 End If
 ThreadIsRunning = False
End Function

Public Sub RunWatch(Directory As String)
While ThreadIsRunning
 ThreadBeenden = True
Wend
hWatchTh = CreateThread(ByVal 0&, 0, AddressOf ThreadExecute, ByVal 0&, &H4, WatchThID)
SetThreadPriority hWatchTh, 0
ThreadBeenden = False
WatchPath = Directory
ResumeThread hWatchTh
End Sub

Wenn du nun die Sub RunWatch aufrufst und ihr das zu ü+berwachende Verzeichnis übergibst, so kannst du dies in der Function ThreadExecute genuesslich abfangen und dann darauf agieren. Ich habe dir an die gewisse Stelle ein Vermerk gemacht :wink:

MfG Alex

Nicht ganz,

es werden fehlerhafte Files im Netzwerk gespeichert, diese Files müssen „korrigiert“ werden.
Wenn eine deffekte Datei ins Verzeichnis gespeichert wird so schreibt der Bearbeiter eine Mail an eine andere Abteilung. Das eben eine fehlerhafte Datei aufgeschlagen ist. Diese Mail beinhaltet den Fehlertext und den Pfad wo die Datei liegt.

Ich möchte das ganze vereinfachen - Wenn eine neue deffekte Datei aufschlägt mache ne Mail auf mit den Dateinamen als Betreff und in Text den Pfad - der Adressat ist immer der gleiche.

Ich werde dies nun nicht mit Outlook machen sonern gleich in VBA bzw in VB ein Form erstellen in welchen er die Daten reinzieht und per Button als Mail verschickt .
War n Quatsch mit Outlook, das brauchst garned.

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Rolf,

so weit daneben habe ich gar nicht gelegen, nur verarbeiten war falsch.
Egal …

Geht’s? Wenn nein, was geht nicht?

Du schreibst: Outlook war keine gute Idee. Was hast Du denn sonst noch?
Wenn Du VB6 hast, kannst Du den Timer nehmen, dann musst Du den nicht selbst bauen.

Gruß Rainer

Servus,

noch hab ichs noch garnicht im Echtbetrieb eingerichtet…:smile:
Werd ich erst morgen dazu kommen.
Outlook ist deshalb n Schmarrn da ich hier kein weiteres Programm dazu brauche - ich kann ja aus VB oder VBA n Mail rausschicken, Outlook is hier überflüssig.

Wie gesagt, morgen werd ichs mal in die Praxis alles umsetzen und mich dann ggf. melden. ÄH, melden tu ich mich sowieso! :smile:
+
Gruß derweil
Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

einige Varianten wurden dir ja aufgezeigt. Ich habe mir net
alles zu gemuete gefuehrt. Auch kenne ich mit VBA für Outlook
net aus. Aber sollte etwa indentisch sein mit VB.
Unter VB würde ich das wie folgt lösen.

Hallo Alex,

deinen Code in ein Modul und noch dies dazu:

Sub Test()
Call RunWatch(„c:\tmp“)
End Sub

in VB5.0 im Code der Form noch dies dazu:

Private Sub Form_Load()
Call Test
End Sub

In Excel2000-Vba gestartet mit F5 in „Test“ stehend und in VB5 gestartet mit F5 in „Form_Load“ stehend veranlasst Win2000 in beiden Fällen das jeweilige Programm zu beenden.

Getestet mit F8 ergibt sich daß „ResumeThread hWatchTh“ der Übeltäter ist.

Ein Haltepunkt am Anfang der Fkt. „ThreadExecute“ zeigt auf daß sie nie angesprungen wird.

Gruß
Reinhard

Hallo Reinhard,

deinen Code in ein Modul und noch dies dazu:

Sub Test()
Call RunWatch(„c:\tmp“)
End Sub

Ok, der Aufruf ist soweit richtig.

in VB5.0 im Code der Form noch dies dazu:

Private Sub Form_Load()
Call Test
End Sub

Auch richtig. Aber hier kannst du direkt schreiben Call Runwatch(…)

In Excel2000-Vba gestartet mit F5 in „Test“ stehend und in VB5
gestartet mit F5 in „Form_Load“ stehend veranlasst Win2000 in
beiden Fällen das jeweilige Programm zu beenden.

Bekommst du denn eine Fehlermeldung?

Getestet mit F8 ergibt sich daß „ResumeThread hWatchTh“ der
Übeltäter ist.

Es wird ein neuer Thread gestartet. Der dient dazu das das Proggi parallel dazu weiter laufen kann. Wenn er dies nicht brauch, so kann er die Threads vernachlaessigen und die Abfrage in einer Schleife machen. Aber dazu hat er sich net geaeussert. Desweiteren kam auch kein Feedback zurueck.

Vom Prinzip her wird ein neuer Thread gestartet. Dieser wird aber beim erstellen gleich eingeschlaefert. Dann werden die Variablen alle gesetzt und dann via ResumeThread der Thread gestartet. Bei Threads sollte man tuenlichst vermeiden sie im Step by Step Modus laufen zu lassen.
Was nun zu dem Problem führen kann, ist einmal der Addressof operator. Ich daechte das dieser unter VB5 Probleme macht :frowning:
Auch koennte man das Proggi noch anders umbasteln und den Thread beim erstellen gleich starten.

Das Thema hatten wir hier schon einmal. Da hatte ich mit Rainer schon drueber diskutiert und letztendlich ging es auch. Ich muesste mich nun noch einmal hinsetzen und probieren woran es liegt. Aber wozu sollte ich das machen, wenn der Lösungsvorschlag nicht angenommen wird oder nicht einmal ein Feedback dazu kommt.

Ein Haltepunkt am Anfang der Fkt. „ThreadExecute“ zeigt auf
daß sie nie angesprungen wird.

Beim erstellen des Threades gibst du diese Prozedur ueber den Addressof Operator an. Das bedeutet das wenn der Thread gestartet wird, dann diese Sub angesprungen wird! Aber gestartet wird er nur via ResumeThread

MfG Alex

Hallo Alex,

Auch richtig. Aber hier kannst du direkt schreiben Call
Runwatch(…)

Jepp.

In Excel2000-Vba gestartet mit F5 in „Test“ stehend und in VB5
gestartet mit F5 in „Form_Load“ stehend veranlasst Win2000 in
beiden Fällen das jeweilige Programm zu beenden.

Bekommst du denn eine Fehlermeldung?

Nein. In beiden Fällen (mit F8 ausgeführt) ist End Sub gelb markiert (mal in Test mal in Form_Load) und es kommt nur das fenster von Windows mit der Meldung daß dieses Programm geschlossen wird und ob ich einen Problembericht senden will.

Getestet mit F8 ergibt sich daß „ResumeThread hWatchTh“ der
Übeltäter ist.

Es wird ein neuer Thread gestartet. Der dient dazu das das
Proggi parallel dazu weiter laufen kann. Wenn er dies nicht
brauch, so kann er die Threads vernachlaessigen und die
Abfrage in einer Schleife machen. Aber dazu hat er sich net
geaeussert. Desweiteren kam auch kein Feedback zurueck.

Sei nicht so hart, es könnte dies vorliegen:

/t/kritik–8/4697918/2

oder aber sein PC ist kaputt, sein provider hat ihm wegen unbezahlter Rechnungen den han abgedreht, er ist in Urlaub, verliebt, betrunken, entführt worden usw. :smile:

Vom Prinzip her wird ein neuer Thread gestartet. Dieser wird
aber beim erstellen gleich eingeschlaefert. Dann werden die
Variablen alle gesetzt und dann via ResumeThread der Thread
gestartet. Bei Threads sollte man tuenlichst vermeiden sie im
Step by Step Modus laufen zu lassen.

Was sol ich machen wenn F5 versagt?

Was nun zu dem Problem führen kann, ist einmal der Addressof
operator. Ich daechte das dieser unter VB5 Probleme macht :frowning:

Sowas weiß ich nicht, ich habe kein VB6. Excel2000-Vba beruht aber auf einer Teilmenge von VB6 und da keine Fehlermeldung kam daß da Excel-Vba irgendeinen Ausdruck nicht kennt, würde ich mal aus dem bauch heraus sagen, auch unter VB6 läuft der Code nicht.
Aber das ist reine Spekulation.

Das Thema hatten wir hier schon einmal. Da hatte ich mit
Rainer schon drueber diskutiert und letztendlich ging es auch.
Ich muesste mich nun noch einmal hinsetzen und probieren woran
es liegt. Aber wozu sollte ich das machen, wenn der
Lösungsvorschlag nicht angenommen wird oder nicht einmal ein
Feedback dazu kommt.

Ich glaube ich erinnere mich, da war mal was mit Adress of, aber das hat mich damals schon fachlich überfordert *gg*

Ein Haltepunkt am Anfang der Fkt. „ThreadExecute“ zeigt auf
daß sie nie angesprungen wird.

Beim erstellen des Threades gibst du diese Prozedur ueber den
Addressof Operator an. Das bedeutet das wenn der Thread
gestartet wird, dann diese Sub angesprungen wird! Aber
gestartet wird er nur via ResumeThread

Tja nu, jetzt müßte man nur noch meine Software noch dazu überreden dies auch zu tun *lächel*
Aber wegen mir brauchst du dir da keinen Kopp zu machen. Im Notfall kann ich mir schon mit „normaleren“ Vba-Befehelen ein Makro bastel was ein Verzeichnis im x Sekunden Takt überwacht.

PS: Du kennst ja schon sehr ausreichend genug in VB6, jetzt machst du .Net, da brauchst du doch deine VB6 CD nicht mehr?
Und überhaupt, in der Zeitung stand, grad in deiner Gegend geht so ein Pyromane umher, wäre doch viel sicherer für dich ich verwahre eine Sicherungskopie deiner VB6 CD bei mir *flöt*

Gruß
Reinhard

Hallo Reinhard,

kopiere dir mal folgenden Code :smile:

'in ein Modul

Option Explicit


Public Declare Function CreateThread Lib "kernel32" ( \_
 lpThreadAttributes As Any, \_
 ByVal dwStackSize As Long, \_
 ByVal lpStartAddress As Long, \_
 ByVal lParameter As Long, \_
 ByVal dwCreationFlags As Long, \_
 lpThreadID As Long) As Long

Public Declare Function ResumeThread Lib "kernel32" (ByVal hThread As Long) As Long


Public hWatch As Long
Public hWatchID As Long


Public Sub Run()
 hWatch = CreateThread(ByVal 0&, &H0, AddressOf ThreadExecute, ByVal 0&, &H4, hWatchID)
 ResumeThread hWatch
End Sub

Public Sub ThreadExecute()
Do
 Form1.Caption = CStr(CDbl(Form1.Caption) + 1)
Loop
End Sub

'in Form1
Private Sub Form\_Load()
Me.Caption = 0
Run
End Sub

Nun einfach, via Ctrl+F5 starten und bewundern :wink: Aber net vergessen vorher abzuspeichern :smile: da es sich um Subclassing handelt und was das bedeutet, weisst du ja :wink: Genauso gibt es hier keine Chance den Thread zu beenden. Ist aber nur als Demo gedacht!

Hier siehst du nun den Thread in Action :smile:
Wenn er nun Interesse hegt, so brauch er sich nur noch alles zusammen zu setzen und danach sollte es Funktionieren :smile: Ok ggfls. muesste er dann noch die Flags anpassen :smile:

MfG Alex

N´Abend allerseits,

bei mir läuft garnienuescht.
Ich bin mir auch nicht ganz sicher ob das in VB oder in VBA laufen soll. In VBA bringt er immer die Meldung das die UserForm1 nicht deklariert sein soll…? bzw Typen unverträglich…?
Momentan bin ich doch etwas ratlos.
Es geht ja im Grunde darum das er mir …egal ob zeitgesteuert, aktionsgesteuert (wenn eben eine neue Datei in dem Odern aufschlägt) oder per Button Änderungen in einem bestimmten Order im Verzeichnis anzeigen soll.

Ich „vermisse“ halt auch die Angabe in welchen Ordner er suchen/schauen soll und wo er mir die Änderungen ausgibt.

Gruß Rolf