Änderung im Win-Explorer anzeigen?

Hallo Rolf,

bei mir läuft garnienuescht.

Dann machst Du etwas falsch. :smile:

Ich bin mir auch nicht ganz sicher ob das in VB oder in VBA
laufen soll.

Da musst Du Dich schon entscheiden. Der Code könnte unterschiedlich ausfallen. Welches VB hast Du denn überhaupt?

Verrate uns auch mal, wie viel Du selbst programmieren kannst, ich bekomme den Eindruck, Du versteht nicht, was wir Dir bisher geschrieben haben.

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.

Du hättest gern, daß der Explorer auf geht und das Verzeichnis anzeigt.

Shell „C:\Winnt\Explorer.exe c:“, 1

Öffnet den Explorer und zeigt „C:“ an.

Das funktioniert in VBA, VB4, VB5, VB6.

Wenn Du mehr Code brauchst, musst Du mehr Informationen liefern, z.B. den Code, in dem Du schon mal den Namen und den Pfad zu der Datei in einem String hast, der dann verarbeitet werden kann. Idealer Weise noch mit Angebe der verwendeten Programmiersprache, dann brauchen wir die nicht erraten.

Gruß Rainer

Ok - also dem VB bin ich nicht wirklich erhaben - ich gebs ja zu :smile: VBA schon eher.
Was ich will/brauch is eine „Überwachung“ eines Verzeichnises - wenn dort in dem Verzeichnis „was passiert“ soll er mir ein Fenster öffnen, bzw eine Meldung geben.

Das is im grunde alles

Gruß Rolf

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

Hallo Rolf,

Ok - also dem VB bin ich nicht wirklich erhaben - ich gebs ja
zu :smile: VBA schon eher.

OK, dann bleiben wir ab jetzt bei VBA. OK?
Welches VBA. Excel, Access, Word, Outlook …

Was ich will/brauch is eine „Überwachung“ eines Verzeichnises

  • wenn dort in dem Verzeichnis „was passiert“ soll er mir ein
    Fenster öffnen, bzw eine Meldung geben.

Das is im grunde alles

Das habe ich so weit verstanden. Den Code, den Du dazu brauchst habe ich Dir auch schon gepostet, scheinbar kannst Du aber nichts damit anfangen. Deshalb zeige doch mal Deinen bisherigen Code, dann kann ich da etwas einbauen, so daß es funktioniert.

Gruß Rainer

Ok, ich würde es in Excel machen. Zeigen kann ich es dir heute Abend, habs daheim aufn Laptop.

Gruß Rolf

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

Hallo Rolf,

Ok, ich würde es in Excel machen. Zeigen kann ich es dir heute
Abend, habs daheim aufn Laptop.

OK, ich bau dann da etwas ein. Markiere die Stelle, an der Du Namen und Pfad der datei hat mit einem Kommentar, ich aktiviere dann in der darauf folgenden Zeile die Überwachung und baue Dir den Code so ein, daß der Explorer auf geht, sobald die Datei da ist.

Gruß Rainer

Moin Moin,

also ich hab das 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
UserForm1.Caption = CStr(CDbl(UserForm1.Caption) + 1)
Loop
End Sub

Public Sub Test()
Call RunWatch(„c:\neu“)
End Sub_

Und eine Form -->

_Private Sub CommandButton1_Click()
Me.Caption = 0
Run

End Sub_

Mir schwant das ich was total verbockt hab bzw es echt ned raff…

Gruß Rolf

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

Hi Rolf,

also ich hab das 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
UserForm1.Caption = CStr(CDbl(UserForm1.Caption) + 1)
Loop
End Sub

Public Sub Test()
Call RunWatch(„c:\neu“)
End Sub_

aha, Du startest einen weiteren Prozess und führst dort das Programm ‚Neu‘ aus. Hmmm, davon habe ich keine Ahnung, Mutithreading habe ich noch nicht gebraucht, mir hat immer ein Programm genügt.

Und eine Form -->

Private Sub CommandButton1_Click()
Me.Caption = 0
Run

Das schreibt in die Titelzeile des Fensters eine Null.

Mir schwant das ich was total verbockt hab bzw es echt ned
raff…

Verbockt? Nein. Du hast Code kopiert, ohne zu wissen, was der tut.

Du hast doch geschrieben, daß Du eine Mail bekommst, die im Betreff einen Dateinamen und im Body einen Pfad enthält und daß Du die schon im Programm hast und verarbeiten kannst. Das müsste dann Outlook-VBA sein, das habe ich aber noch nicht gesehen, wie der Code bis da hin aussehen muss, weiß ich nicht. Ich habe kein Outlook.

Ab der Stelle ist es dann nicht schwer.

Der Code, den Du gepostet hast, hilft bei der Aufgabe jedenfalls nicht weiter.

In der API-Guide steht dazu:

'Using the CreateThread function in Visual Basic
'is very risky! VB5 is 'kinda' stable, but VB6
'applications will probably crash when you
'use the CreateThread function.

Eine Anwendung von CreateThread:

http://www.activevb.de/tipps/vb6tipps/tipp0242.html

Ich komme mir da vor, als hätte ich gerade den Unterschied zwischen einem Schraubenschlüssel und einem schraubenzieher kennengelernt und wollte nun versuchen als Erstes ein Atomkraftwerk zu bauen. :smile:

Verrate, wie Du an den Namen und den Pfad kommst, den rest bau ich dann schon ein.

Gruß Rainer

Hi Rolf,

also ich hab das 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
UserForm1.Caption = CStr(CDbl(UserForm1.Caption) + 1)
Loop
End Sub

Public Sub Test()
Call RunWatch(„c:\neu“)
End Sub_

aha, Du startest einen weiteren Prozess und führst dort das
Programm ‚Neu‘ aus. Hmmm, davon habe ich keine Ahnung,
Mutithreading habe ich noch nicht gebraucht, mir hat immer ein
Programm genügt.

Und eine Form -->

Private Sub CommandButton1_Click()
Me.Caption = 0
Run

Das schreibt in die Titelzeile des Fensters eine Null.

Mir schwant das ich was total verbockt hab bzw es echt ned
raff…

Verbockt? Nein. Du hast Code kopiert, ohne zu wissen, was der
tut.

Und damit haste aba sowas von Recht :frowning:

Du hast doch geschrieben, daß Du eine Mail bekommst, die im
Betreff einen Dateinamen und im Body einen Pfad enthält und
daß Du die schon im Programm hast und verarbeiten kannst. Das
müsste dann Outlook-VBA sein, das habe ich aber noch nicht
gesehen, wie der Code bis da hin aussehen muss, weiß ich
nicht. Ich habe kein Outlook.

Hmmm, nein. Die Reihenfolge hast aba jetzt du vertauscht :smile: Erst wenn in dem Verzeichnis eine neue Datei gespeichert wir DANN erst soll er mir eine Mail aufmachen bzw eine Mail an eine feste Mailadresse verschicken mit eben dem Dateinamen im Subject und den Pfad im Body.

Das speichern geschieht automatisch und betrifft mich garnicht. Wo ich einschreite is - einer anderen Abteilung bescheid geben. Heisst eine Mail in ein Ticket-System schicken das in dem Verzeichnis „blablabla“ eine neue defekte Datei aufgeschlagen ist die man bearbeiten muss.

Ab der Stelle ist es dann nicht schwer.

Der Code, den Du gepostet hast, hilft bei der Aufgabe
jedenfalls nicht weiter.

Das in etwa dachte ich mir auch schon :smile:

In der API-Guide steht dazu:

'Using the CreateThread function in Visual Basic
'is very risky! VB5 is ‚kinda‘ stable, but VB6
'applications will probably crash when you
'use the CreateThread function.

Eine Anwendung von CreateThread:

http://www.activevb.de/tipps/vb6tipps/tipp0242.html

Ich komme mir da vor, als hätte ich gerade den Unterschied
zwischen einem Schraubenschlüssel und einem schraubenzieher
kennengelernt und wollte nun versuchen als Erstes ein
Atomkraftwerk zu bauen. :smile:

Verrate, wie Du an den Namen und den Pfad kommst, den rest bau
ich dann schon ein.

Der Name der Datei wird durch eine Software erzeugt. Der Pfad ist eigentlich immer gleich. Bis auf den Dateinamen halt.

Gruß Rainer

Gruß Rolf

Hi Rolf,

Hmmm, nein. Die Reihenfolge hast aba jetzt du vertauscht :smile:
Erst wenn in dem Verzeichnis eine neue Datei gespeichert wir
DANN erst soll er mir eine Mail aufmachen bzw eine Mail an
eine feste Mailadresse verschicken mit eben dem Dateinamen im
Subject und den Pfad im Body.

Ach so, na dann ist es ja einfach.

Der Name der Datei wird durch eine Software erzeugt. Der Pfad
ist eigentlich immer gleich. Bis auf den Dateinamen halt.

OK. Kannst Du eine Userform erzeugen, einen Button darauf legen, den mal doppelt klicken und dann den Code posten, den VBA bis da hin erzeugt hat? Dann habe ich einen Namen, ein ereignis, nämlich den Klick und kann den Code verändern.

Ich schreiben das dann so, als würde das Verzeichnis „C:“ überwacht. Den Pfad ändern kannst Du ja später.

Gruß Rainer

Moin Rainer,

hier der Mail-Code…
Nix besonderes…bisher

Private Sub CommandButton2\_Click()
 Dim olApp As Object
 Dim file As String
 'hier soll der dateinamen rein
 'file = blablabla\_defekte\_datei.defekt
 Set olApp = CreateObject("Outlook.Application")
 With olApp.CreateItem(0)
 'Empfänger
 .Recipients.Add "[email protected]"
 'Betreff
 '.Subject = das file
 'Nachricht
 .Body = ""
 'hier sollte der Pfad rein
 'Lesebestätigung aus
 .ReadReceiptRequested = False
 '.Attachments.Add "c:\test"
 .Send
 End With
 Set olApp = Nothing
End Sub

Gruß Rolf

[MOD] - Pre-Tags eingefügt, Mailadresse entfernt.

Hi Rolf,

Dein Code:

Option Explicit

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

Dim Flag As Boolean
Dim Inhalt As String
Dim Verzeichnis As String

Private Sub CommandButton2\_Click()
 Verzeichnis = "C:\"
 Inhalt = Check(Verzeichnis)
 Flag = False
 Warteschleife
End Sub

Private Sub CommandButton3\_Click()
 'zum Beenden
 Flag = True
End Sub

Private Sub Warteschleife()
 Dim Neu As String, i As Long
 Dim Arr() As String
 While Flag = False
 DoEvents
 Sleep 1000
 Neu = Check(Verzeichnis)
 If Neu Inhalt Then
 Arr = Split(Neu, vbCrLf)
 For i = LBound(Arr) To UBound(Arr)
 If InStr(1, Inhalt, Arr(i)) = 0 Then
 senden Arr(i)
 End If
 Next
 Inhalt = Neu
 End If
 Wend
End Sub

Private Sub senden(ByVal file As String)
 Dim olApp As Object
 'hier soll der dateinamen rein
 'file = blablabla\_defekte\_datei.defekt
 Set olApp = CreateObject("Outlook.Application")
 With olApp.CreateItem(0)
 'Empfänger
 .Recipients.Add "[email protected]"
 'Betreff
 '.Subject = das file
 'Nachricht
 .Body = ""
 'hier sollte der Pfad rein
 'Lesebestätigung aus
 .ReadReceiptRequested = False
 '.Attachments.Add "c:\test"
 .Send
 End With
 Set olApp = Nothing
End Sub

Private Function Check(ByVal Verzeichnis As String)
 Dim fso, f, f1, fc, s
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set f = fso.GetFolder(Verzeichnis)
 Set fc = f.Files
 For Each f1 In fc
 s = s & f1.Name
 s = s & vbCrLf
 Next
 Check = s
End Function

OK?

Es ist ein Button dazu gekommen, um die Überwachung wieder anhalten zu können.

Gruß Rainer

1 Like

Hallo Rainer

Mein Code:

Option Explicit

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

Dim Flag As Boolean
Dim Inhalt As String
Dim Verzeichnis As String

Private Sub CommandButton2_Click()

Verzeichnis = „C:\test“

Inhalt = Check(Verzeichnis)
Flag = False
Warteschleife
End Sub

Private Sub CommandButton3_Click()
'zum Beenden
Flag = True
End Sub

Private Sub Warteschleife()
Dim Neu As String, i As Long
Dim Arr() As String
While Flag = False
DoEvents
Sleep 1000
Neu = Check(Verzeichnis)
If Neu Inhalt Then
Arr = Split(Neu, vbCrLf)
For i = LBound(Arr) To UBound(Arr)
If InStr(1, Inhalt, Arr(i)) = 0 Then
senden Arr(i)
End If
Next
Inhalt = Neu
End If
Wend
End Sub

Private Sub senden(ByVal file As String)
Dim olApp As Object
'hier soll der dateinamen rein
'file = blablabla_defekte_datei.defekt
Set olApp = CreateObject(„Outlook.Application“)
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add „[email protected]
'Betreff

.Subject = s

'Nachricht

.Body f

'hier sollte der Pfad rein
'Lesebestätigung aus
.ReadReceiptRequested = False
'.Attachments.Add „c:\test“
.Send
End With
Set olApp = Nothing
End Sub

Private Function Check(ByVal Verzeichnis As String)
Dim fso, f, f1, fc, s
Set fso = CreateObject(„Scripting.FileSystemObject“)
Set f = fso.GetFolder(Verzeichnis)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf
Next
Check = s
End Function

OK?

soweit schon …nur verschicken tut er mir noch nix.
Wenn ich ne msgbox dazwischen leg, zeigt er mir die Files an. Das ist schon mal gut. Nur verschickt wird leider nichts. Adresse hab ich meine reingetan, von daher sollte er was tun.

Es ist ein Button dazu gekommen, um die Überwachung wieder
anhalten zu können.

Ein Frage dazu - da der Prozess doch ziehmlich viel Performce braucht, kann ich hier sagen er soll alle 10 Min nachschauen? Muss ich hier das „Sleep 1000“ umstellen?

Gruß Rolf

Gruß Rainer

Hi Rolf,

soweit schon …nur verschicken tut er mir noch nix.

ja, ist klar, Du hast in dem Teil, den Du geschrieben hast, ja auch noch alles auskommentiert. Das ist auch etwas, wovon ich keine Ahnung habe.

Wenn ich ne msgbox dazwischen leg, zeigt er mir die Files an.
Das ist schon mal gut. Nur verschickt wird leider nichts.
Adresse hab ich meine reingetan, von daher sollte er was tun.

Mail versenden mit VBA, das kann ich nicht, ich kann nur VB6 programmieren. Wenn das nicht klappt, stell bitte noch einmal eine neue Frage mit dem Thema: ‚VBA - Mail versenden mit Excel‘, dann helfen die VBA-Experten.

Es ist ein Button dazu gekommen, um die Überwachung wieder
anhalten zu können.

Ein Frage dazu - da der Prozess doch ziehmlich viel Performce
braucht,

?Wie groß ist denn das Verzeichnis? Der soll das Verzeichnis nur ein mal pro Sekunde lesen. (Sleep 1000 = 1000 Millisekunden)
In der Zeit, in der der Prozess ‚schläft‘ verbraucht er keine Rechenleistung.

kann ich hier sagen er soll alle 10 Min nachschauen?
Muss ich hier das „Sleep 1000“ umstellen?

Ja. Sleep arbeitet mit Millisekunden, 10 Minuten sind 36000000 Millisekunden. Der Wert ist ein LongInteger, die Zahl passt da also ohne Problem.

Gruß Rainer

1 Like

Hi Rolf,

soweit schon …nur verschicken tut er mir noch nix.
Wenn ich ne msgbox dazwischen leg, zeigt er mir die Files an.
Das ist schon mal gut. Nur verschickt wird leider nichts.
Adresse hab ich meine reingetan, von daher sollte er was tun.

probiers mal so, Send ist noch auskommentiert:

Sub tt()
Call senden("h:\bestellung.xls")
End Sub
'
Sub senden(ByVal file As String)
 Dim olApp As Object
 'hier soll der dateinamen rein
 'file = blablabla\_defekte\_datei.defekt
 Set olApp = CreateObject("Outlook.Application")
 With olApp.CreateItem(0)
 .display
 'Empfänger
 .Recipients.Add "[email protected]"
 'Betreff
 .Subject = "das file"
 'Nachricht
 .Body = "Haupttextfeld"
 'hier sollte der Pfad rein
 'Lesebestätigung aus
 .ReadReceiptRequested = False
 .Attachments.Add file
 '.Send
 End With
 Set olApp = Nothing
End Sub

Ein Frage dazu - da der Prozess doch ziehmlich viel Performce
braucht, kann ich hier sagen er soll alle 10 Min nachschauen?
Muss ich hier das „Sleep 1000“ umstellen?

Jepp, das sind Millisekunden.

Gruß
Reinhard

Hallo Reinhard,

OK, dann keine neue Frage, wenn Du uns auch so gefunden hast. :smile:

Danke für die Unterstützung.

Gruß Rainer

Nachtrag
Hi Rolf,

ändere mal die eine zeile sodaß sie dann so aussieht:

.Attachments.Add Verzeichnis & file

Gruß
Reinhard

Servus Rainer,

ich werd erst am WE wieder dazukommen das ganze einzurichten…:frowning:

Hab vom Cheffe ne andere Aufgabe bekommen …:frowning:(((

Geb aba am Sonntag dann bescheid.

Schonmal super Danke für deinen Einsatz.

Gruß Rolf

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

Hallo Rainer,

ich habs mir deinen Code mal angesehen - da ich leider dochnicht mehr so firm in VBA bin versuch ich den

mal in etwa zu erklären --> Kannst du wenn du Zeit hast mal drüberlesen

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

Dim Flag As Boolean
Dim Inhalt As String
Dim Verzeichnis As String

#####################################################
Private Sub CommandButton1_Click()
Verzeichnis = „C:\test“
Inhalt = Check(Verzeichnis)
Flag = False
Warteschleife
End Sub
Comment --> Hier wird das Verzeichnis angegeben welches „überwacht“ werden soll -ja?
#####################################################

Private Sub Warteschleife()
Dim Neu As String, i As Long
Dim Arr() As String
While Flag = False
DoEvents
Sleep 1000
Neu = Check(Verzeichnis)
If Neu Inhalt Then
Arr = Split(Neu, vbCrLf)
For i = LBound(Arr) To UBound(Arr)
If InStr(1, Inhalt, Arr(i)) = 0 Then
senden Arr(i)
End If
Next
Inhalt = Neu
End If
Wend
End Sub
Comment --> Hier wird a) die Zeit der Überwachung angegeben (alle 1000 millisec) und mit Senden soll die

Meldung angezeigt werden -ja?
#####################################################
Private Function Check(ByVal Verzeichnis As String)
Dim fso, f, f1, fc, s
Set fso = CreateObject(„Scripting.FileSystemObject“)
Set f = fso.GetFolder(Verzeichnis)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf

Next
Check = s
End Function
Comment --> hier soll ein Opject kreiert werden —> f1Name (Dateiname)
#####################################################
Private Sub senden(ByVal file As String)
Dim olApp As Object
Dim file As String

file = f
Set olApp = CreateObject(„Outlook.Application“)
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add „[email protected]
'Betreff
.Subject = f
'Nachricht
.Body = s
'Lesebestätigung aus
.ReadReceiptRequested = False
.Attachments.Add Verzeichnis & file
.Send
End With
Set olApp = Nothing
End Sub
Comment --> Hier meins - das Mail welches geschickt werdensoll …nur er schickt nichts
####################################################

Private Sub CommandButton2_Click()
'zum Beenden
Flag = True
End Sub
Comment --> Anhalten/Stoppen der Überwachung

Gruß Rolf

Hi Rolf,

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

Dim Flag As Boolean
Dim Inhalt As String
Dim Verzeichnis As String

#####################################################
Private Sub CommandButton1_Click()
Verzeichnis = „C:\test“
Inhalt = Check(Verzeichnis)
Flag = False
Warteschleife
End Sub
Comment --> Hier wird das Verzeichnis angegeben welches
„überwacht“ werden soll -ja?

Auch. Hier werden auch die Daten geladen, mit denen der Inhalt des Verzeichnisses verglichen werden um die Veränderung zu bemerken und die Überwachung wird gestartet.

#####################################################

Private Sub Warteschleife()
Dim Neu As String, i As Long
Dim Arr() As String
While Flag = False
DoEvents
Sleep 1000
Neu = Check(Verzeichnis)
If Neu Inhalt Then
Arr = Split(Neu, vbCrLf)
For i = LBound(Arr) To UBound(Arr)
If InStr(1, Inhalt, Arr(i)) = 0 Then
senden Arr(i)
End If
Next
Inhalt = Neu
End If
Wend
End Sub
Comment --> Hier wird a) die Zeit der Überwachung angegeben
(alle 1000 millisec) und mit Senden soll die

Meldung angezeigt werden -ja?

Hier findet die eignetliche Überwachung und Auswertung statt.
Hier wird auch an Deine Mailprozedur der Name der gefundenen Datei übergeben.

#####################################################
Private Function Check(ByVal Verzeichnis As String)
Dim fso, f, f1, fc, s
Set fso = CreateObject(„Scripting.FileSystemObject“)
Set f = fso.GetFolder(Verzeichnis)
Set fc = f.Files
For Each f1 In fc
s = s & f1.Name
s = s & vbCrLf

Next
Check = s
End Function
Comment --> hier soll ein Opject kreiert werden —>
f1Name (Dateiname)

Nein, hier wird das angegebene Verzeichnis nach Dateien durchsucht und alle Namen von gefundenen Dateien an einen String übergeben.

f1 ist ein Objekt, nämlich die Datei. Die Eigenschaft .Name enthält den Namen der gefundenen Datei. ‚f1 in fc‘ erzeugt das Objekt.

#####################################################
Private Sub senden(ByVal file As String)

Da wird von der Aufrufenden Prozedur angefordert, daß sie den Dateinamen an die Variable ‚file‘ übergibt …

Dim olApp As Object
Dim file As String

file = f

… und hier löschst Du den Namen wieder. :smile:
Die Zeile:

file = f

musst Du löschen, die vernichtet die Information um die es geht.

Set olApp = CreateObject(„Outlook.Application“)
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add „[email protected]
'Betreff
.Subject = f
'Nachricht
.Body = s
'Lesebestätigung aus
.ReadReceiptRequested = False
.Attachments.Add Verzeichnis & file
.Send
End With
Set olApp = Nothing
End Sub
Comment --> Hier meins - das Mail welches geschickt
werdensoll …nur er schickt nichts

Warum der Name wieder weg ist, habe ich gerade geschrieben.
Wenn gar keine Mail versendet wird, musst Du Dir den Beitrag von Reinhard noch einmal ansehen.

####################################################

Private Sub CommandButton2_Click()
'zum Beenden
Flag = True
End Sub
Comment --> Anhalten/Stoppen der Überwachung

Genau.

Gruß Rainer

1 Like

Hallo Rainer,

NUN funktioniert es …und ich weiss nun auch was wo gemacht wird.
Klasse von euch das ihr soviele Geduld hatte :smile:

Danke euch super!

Gruß Rolf

p. s. DANKE!!!

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