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

Makro automatisch starten wenn letze Änderung ....

Makro automatisch starten wenn letze Änderung ....
Nibio
Hallo Profis,
ich würde gerne ein Makro per VBA starten wenn die Änderungsdatum eine bestimmte Datei sich geändert hat (geändert am).
Z.b: c:\text.txt würde zum letzt am 27.8.2011 10:39 geändert. Ok Scritp, sollte nach ein click diese Datum merken und sobald eine Änderung festgestellt wird dann "Makro_1" starten.
Für Profis wie euch ist es einfach, ich hab gestern die ganze Nacht dafür verloren :-(
Bitte deshalb keine antwort wie z.B "Internet suchen....und finde bzw googlen usw.."
Gruß
Nibio
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 10:54:56
Hajo_Zi
Hallo,
eine Textdatei hat fast nichts mit Excel zu tun. Du möchtest den Rechner überwachen und da ist Excel das falsche Programm. Würde ich mal vermuten.

AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 11:56:00
Nibio
Hallo Hajo,
Dnake.
Dieses scritp hier liest die Dateigröße vom Bild C:/myimage.jpeg und schreibt das Ergebnis in zelle A1.
wenn das hier geht, dann würde auch das was ich meine auch vielleicht funktionieren (denke ich mal), denn es muss die Änderungsdatum anstatt die Größe lesen (Size). Vielleicht jede 500 ms oder so, bis die Änderungsdatum aktueller ist. Ich denke mit VBA müßte vieleicht doch gehen, aber nur vielleicht :-)
Sub Size_uebertrag()
Tabelle1.Cells(1, 1).Value = FileLen("C:/myimage.jpeg")
End Sub

Gruß
Nibio
Anzeige
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 11:56:20
Nibio
Hallo Hajo,
Danke.
Dieses scritp hier liest die Dateigröße vom Bild C:/myimage.jpeg und schreibt das Ergebnis in zelle A1.
wenn das hier geht, dann würde auch das was ich meine auch vielleicht funktionieren (denke ich mal), denn es muss die Änderungsdatum anstatt die Größe lesen (Size). Vielleicht jede 500 ms oder so, bis die Änderungsdatum aktueller ist. Ich denke mit VBA müßte vieleicht doch gehen, aber nur vielleicht :-)
Sub Size_uebertrag()
Tabelle1.Cells(1, 1).Value = FileLen("C:/myimage.jpeg")
End Sub

Gruß
Nibio
Anzeige
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 12:09:08
Tino
Hallo,
die letzte Änderung wird in einen Namen gespeichert.
Dieser Code wird beim öffnen von Excel gestartet und danach mit Application.OnTime
in regelmäßigen Abständen ausgeführt. (im Bsp. alle 10 Minuten) .
Im Code habe ich mal zum testen Msgboxen eingebaut,
diese würde ich natürlich durch eine andere Anzeige ersetzen,
wenn eine Anzeige überhaupt nötig ist.
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call StopTimer 
End Sub 
 
Private Sub Workbook_Open() 
    Call Check_Aenderung 'beim öffnen direkt einmal ausführen 
    Call StartTimer 'danach mit Timer 
End Sub 
kommt als Code in ein Modul
Option Explicit 
 
Public nTime As Date 
 
Sub StartTimer() 
Const intIntervallMinute% = 10 'Intervall in Minuten 
nTime = Now + TimeSerial(0, intIntervallMinute, 0) 
Application.OnTime EarliestTime:=nTime, Procedure:="Start" 
End Sub 
 
Sub StopTimer() 
On Error Resume Next 
Application.OnTime EarliestTime:=nTime, Procedure:="Start", Schedule:=False 
nTime = 0 
End Sub 
 
Sub Start() 
    Call Check_Aenderung 
    Call StartTimer 
End Sub 
 
 
Sub Check_Aenderung() 
Dim FSO As Object, F1 As Object 
Dim myName As Name, DatumAenderung As Date, booGeaendert As Boolean 
Dim strFile As String 
 
'hier die Textdatei, Pfad + Name 
strFile = "G:\1 Forum\Neues Textdokument.txt" 
Set FSO = CreateObject("Scripting.FileSystemObject") 
 
Set F1 = FSO.GetFile(strFile) 
DatumAenderung = F1.DateLastModified 'letzte Änderung 
 
booGeaendert = True 
With ThisWorkbook 
    For Each myName In .Names 
        If myName.Name = "FileDatum" Then 
            booGeaendert = CDate(CDbl(Replace(myName.RefersToLocal, "=", ""))) < DatumAenderung 
            Exit For 
        End If 
    Next myName 
    If booGeaendert Then 
        .Names.Add Name:="FileDatum", RefersToLocal:=CDbl(DatumAenderung) 
        .Save 'speichern damit Änderung erhalten bleibt 
    End If 
End With 
 
If booGeaendert Then Call Start_Mein_Beispiel_Makro 'hier Dein Makro starten 
MsgBox "geht" 
End Sub 
 
 
 
 
Sub Start_Mein_Beispiel_Makro() 
    MsgBox "Datei wurde geändert!" 
End Sub 
Gruß Tino
Anzeige
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 13:11:30
Nibio
Hallo Tino,
Das ist unglaublich was man alle machen kann. Danke sehr.
Geht der Timer auch in Sekunden anstatt minuten? Eigentlich
500ms wären ideal für mein Fall, da die Datei sich schnell ändert.
Oder würde das ganze meine Rechner bzw. Arbetisblatt belasten und
zu Probleme führen?
Vielen Dank.
Gruß
Nibio
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 14:57:02
Tino
Hallo,
um auf eine Sekunde den Timer zu stellen würde ich den Code so aufbauen.
Allerdings finde ich das in Excel so kurzer Zeitintervall ungünstig zum arbeiten in Excel ist, Sanduhr usw..
Mit den Sachen die in Excel- VBA zur Verfügung stellt ist so min eine Sekunde machbar,
dann müsste man auf Win- Api zurückgreifen.
Mal schauen vielleicht baue ich Dir noch ein Beispiel damit auf.
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call StopTimer 
End Sub 
 
Private Sub Workbook_Open() 
    Call Check_Aenderung 'beim öffnen direkt einmal ausführen 
    Call StartTimer 'danach mit Timer 
End Sub 
kommt als Code in ein Modul
Option Explicit 
 
Public nTime As Date 
 
Sub StartTimer() 
Const intIntervall% = 1 'Intervall in Sekunden 
nTime = Now + TimeSerial(0, 0, intIntervall) 
Application.OnTime EarliestTime:=nTime, Procedure:="Start" 
End Sub 
 
Sub StopTimer() 
On Error Resume Next 
Application.OnTime EarliestTime:=nTime, Procedure:="Start", Schedule:=False 
nTime = 0 
End Sub 
 
Sub Start() 
    Call Check_Aenderung 
End Sub 
 
 
Sub Check_Aenderung() 
Dim FSO As Object, F1 As Object 
Dim myName As Name, DatumAenderung As Date, booGeaendert As Boolean 
Dim strFile As String 
 
'hier die Textdatei, Pfad + Name 
strFile = "G:\1 Forum\Neues Textdokument.txt" 
Set FSO = CreateObject("Scripting.FileSystemObject") 
 
Set F1 = FSO.GetFile(strFile) 
DatumAenderung = F1.DateLastModified 'letzte Änderung 
 
booGeaendert = True 
With ThisWorkbook 
    For Each myName In .Names 
        If myName.Name = "FileDatum" Then 
            booGeaendert = CDate(CDbl(Replace(myName.RefersToLocal, "=", ""))) < DatumAenderung 
            Exit For 
        End If 
    Next myName 
    If booGeaendert Then 
        .Names.Add Name:="FileDatum", RefersToLocal:=CDbl(DatumAenderung) 
        .Save 'speichern damit Änderung erhalten bleibt 
    End If 
End With 
 
If booGeaendert Then Call Start_Mein_Beispiel_Makro 'hier Dein Makro starten 
 
Call StartTimer 'nächter Start 
End Sub 
 
 
Sub Start_Mein_Beispiel_Makro() 
    MsgBox "Datei wurde geändert!" 
End Sub 
Gruß Tino
Anzeige
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 18:37:07
Nibio
Hallo Tino,
Herzlichen Dank.
Gruß
Nibio
AW: Makro automatisch starten wenn letze Änderung ....
27.08.2011 18:32:06
Tino
Hallo,
hier ein Beispiel mit Millisekunden.
Start über den Toggelbutton auf der Tabelle1 (Code in Tabelle1),
den Pfad zur Textdatei im Code anpassen und natülich den Code
den Du für Deine Textdatei hast noch einbauen und bei
If booGeaendert Then Call Start_Mein_Beispiel_Makro
zuweisen.
Aber wie schon geschrieben, was anderes kannst Du in Excel nicht machen wenn der Code läuft,
daher würde ich auf so kurze Intervalle verzichten und mindestens auf 10 Minuten gehen.
https://www.herber.de/bbs/user/76361.xls
Gruß Tino
Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige