Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
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

Makros ab einem bestimmten Datum nicht ausführen

Makros ab einem bestimmten Datum nicht ausführen
02.02.2015 11:30:15
Stefan
Hallo,
Ich möchte vermeiden, das ein Makro ab einem gewissen Datum ausgeführt werden kann. Hat da jemand eine Idee?
Der Hintergrund:
Ich bin Stefan und mache gerade eine Fortbildung.
In diesem Rahmen gibt es auch eine Projektarbeit.
Diese Projektarbeit beschäftigt sich mit zählen und auswerten. Bisher wurde dies mit Papier und Stift durchgeführt. Ich bin durch meine Excel-Kentnisse aufgefallen. Mein Dozent habt mich gefragt, ob ich mich in der Lage sehe, das Papier und Bleistift Projekt in Excel umzusetzen. Daran sind wohl vor mir alle gescheitert. Das ist mir gelungen. Das muss nicht zwangsläufig an meinem können liegen, eher an meiner Hartnäckigkeit. Hat mich etwa 10 Stunden Arbeit gekostet.
Jetzt ist mein Dozent ganz scharf auf diese Datei, obwohl unser Projekt erst im Juni beginnt. Ich vermute ganz stark, das er das beruflich einsetzen möchte und ich das für ihn für lau machen soll. Hätte ich vielleicht nicht mal ein Problem mit, wenn er mit mir darüber reden würde, oder er im Unterricht Inhalte vermitteln würde..
Meine Idee ist jetzt, das das Arbeitblatt bzw das Makro nach einem bestimmten Zeitpunkt (Ende der Prüfungen + 6 Wochen) nicht mehr ausgeführt werden kann. Meine Idee war mit Applikation.onTime zu arbeiten, komme aber den Bogen nicht. Hat vielleicht jemand eine Idee?
Danke!
Grüße, Stefan

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros ab einem bestimmten Datum nicht au
02.02.2015 11:37:28
Klaus
Hallo Stefan,
es gibt ein paar Ansätze. Am einfachsten ist es, das "ultimo"-Datum in ein xlveryhidden-Arbeitsblatt zu schreiben und bei Workbook-Open eben dieses abzugleichen und daraus dann Konsequenzen ziehen.
Du kannst per VBA sogar den gesamten VBA-Code löschen und die Datei dann ohne Code, wieder speichern.
ABER:
das bringt alles nichts. Dein Dozent startet die Datei einfach "ohne Makros" und nimmt den Schutz wieder raus. VBA-Passwort ist in 2 Minuten geknackt. Selbst mit starker Code-Obfuscation wird das ganze leicht zu durchschauen sein ... denn irgendwo muss ja "date" stehen.
Nepumuk hatte mal ein Modell vorgestellt, in dem VBA-Code in eine eigene *.dll ausgelagert wird. Die müsste man dann reverse kompilieren, um den Code zu ändern - das ist schon sehr unwahrscheinlich dass das jemand kann. Aber ob sich der Aufwand ein 10h-Projekt rechtfertigt?
Grüße,
Klaus M.vdT.

Anzeige
AW: Makros ab einem bestimmten Datum nicht ausführen
02.02.2015 11:37:30
yummi
Hallo Stefan,
das kommt darauf an wie sicher du es machen willst und ob dein Dozent den Quellcode einsehen kann.
Eine einfache Methode, du legst hardcoded ein Datum fest. Beim Start deiner Datei fragst du das aktuelle Datum ab und wenn es größer als dein definiertes Datum ist, dann setzt du z.b. eine boolsche Variabel.
Diese kannst Du dann überall wo Du Sachen unterbinden willst abfragen und bei Bedarf den entsprechenden Code nicht ausführen lassen.
Gruß
yummi

AW: Makros ab einem bestimmten Datum nicht ausführen
02.02.2015 11:41:32
Jack_d
Hallo Stefan,
interessantes Konstrukt.
Wie auch immer. Wenn er ran will, und Ahnung hat, kommt er da ran. Wenn er nicht ganz so viel Ahnung hat kannst du es folgendermaßen sichern.
1. VBA Kennwort
2. Mit Workbook_open lässt du das Datum prüfen.
also

Option Explicit
Private Sub Workbook_Open()
If Date 
Grüße

Anzeige
AW: Makros ab einem bestimmten Datum nicht ausführen
02.02.2015 11:59:28
Stefan
Hallo jack_d,
Das sieht so aus, wie ich es mir vorgestellt habe! Danke!
Habe ich das so richtig verstanden, das in dem Beispielunten vor dem 31.06.2015 das Makro 1 aufgerufen wird und nach dem 31.06.2015 das Makro gelöscht wird? Wie löscht man ein Makro per VBA?
Option Explicit
Private Sub Workbook_Open()
If Date 
Gruß Stefan

ich glaube, um Makros zu löschen ...
02.02.2015 12:16:30
Klaus
... muss ein Verweis gesetzt werden, und dem VBA-Modul muss vertraut werden. Zumindest bekomme ich diesen
https://www.herber.de/forum/archiv/780to784/782193_Alle_Module_mit_VBA_loeschen.html
und andere Codes nicht zum laufen.
Du könntest alle Variablen in eine xlveryhidden Tabelle schreiben und dann einfach diese Tabelle löschen, und mit "on error goto ende" + Sprungmarke die Makroausführung abbrechen sobald die erste Variable ins leere läuft. Aber auch das ist nicht sicher.
In Jacks Beispiel ist "Kleiner als" falsch, das sollte "größer als" sein.
Grüße,
Klaus M.vdT.

Anzeige
Moin Klaus
02.02.2015 12:25:45
Jack_d
..
Ja das stimmt. Ich hab das anders verstanden (der Tutor darf es erst nach ablauf der Frist öffnen) mea culpa =)
Beste Grüße

AW: Makros ab einem bestimmten Datum nicht ausführen
02.02.2015 12:23:44
Jack_d
Hallo Stefan
Also so wie ich die Klammer gesetzt hab, kann man das Makro erst NACH dem 31.6 Starten
wenn du die Klammer andersherum setzt nur vor dem Datum
Zum Call des Makros .. das würde ich in die IF-Schleife einbauen (find ich sauberer weil es die Prozedur nur bei erreichen des Kriteriums aufruft)
#
zudem hab ich dir mal eine löschstruktur für ein Modul aufgeschrieben.
Da löschst du dann günstigerweise das, was danach nicht mehr funktionieren soll. (Alternativ kannst du aber auch Zeile für Zeile löschen (oder verändern))
Private Sub Workbook_Open()
If Date  "31.06.2015" Then ' Damit geht es nachher nicht
MsgBox "Ey was fällt dir ein"
' und hier kannst du jetzt die Blätter löschen
Call Loeschen
Else
Call Makro1
End If
End Sub
Public Sub Loeschen()
With ThisWorkbook.VBProject
.VBComponents.Remove .VBComponents("Modul1")
End With
End Sub

Grüße

Anzeige
Der programmatische Zugriff ...
02.02.2015 12:36:25
Klaus
... ist nicht sicher und so weiter. Damit das funktioniert, muss am Ziel-Excel ein Schalter gesetzt werden und das wird nicht gehen.
getestet: Win7, xl2010
Gegenvorschlag: Ist der VBA-Code ohne die dazugehörigen Blätter nutzbar? Wahrscheinlich nicht, oder? Dann lösch doch einfach die Blätter und speichere danach die leere Datei.
Public Sub Loeschen()
Dim wksWeg As Worksheet
Dim TmpName As String
TmpName = "Abgelaufen " & Date
Sheets.Add
With ActiveSheet
.Name = TmpName
.Range("A1").Value = "Die Nutzung dieser Datei ist abgelaufen!"
End With
Application.DisplayAlerts = False
For Each wksWeg In ActiveWorkbook.Worksheets
If Not wksWeg.Name = TmpName Then wksWeg.Delete
Next wksWeg
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub

BITTE VORSICHT BEIM TESTEN !!!!
Wenn dein Dozent fit genug ist, um die Blätter wieder herzustellen, dann ist er auch fit genug um den VBA-Schutz zu knacken. Wenn nicht, reicht das gezeigte um ihn zu ärgern.
Grüße,
Klaus M.vdT.

Anzeige
Alternative: Datei löschen
02.02.2015 12:45:39
Klaus
Hi,
bitte auch mit diesem Makro äußerste Vorsicht!
Erstelle ein Blatt namens "KillSheet" und setze es xlveryhidden. In das Blatt kommt ein Code, um die Datei zu löschen. Durch "Copy" erstellst du aus dem Blatt eine autonome Datei, welche ihre "Mutterdatei" löscht.
Sub Suicide()
'Code muss in ein Blatt namens KillSheet abgelegt werden!
Dim myPath As String
Dim wkbOld As Workbook
Set wkbOld = ActiveWorkbook
myPath = wkbOld.FullName
With Sheets("KillSheet")
.Copy 'neues Blatt mit eben diesem Code erstellen
wkbOld.Close False 'altes Workbook ohne speichern schließen
Kill myPath 'altes Workbook löschen
ActiveWorkbook.Close False 'Die Killerdatei ohne speichern schließen
End With
End Sub
Das ist jetzt aber schon sehr nah dran am Makrovirus!
Statt die "Killer"-Datei selber zu schließen, kannst du ja auch einen freundlichen Text hinein schreiben.
Grüße,
Klaus M.vdT.

Anzeige
Selbstmord
02.02.2015 12:49:00
Rudi
Hallo,
exrem gefährlich:
Private Sub Workbook_Open()
If Date > CDate("30.6.2015") Then
Saved = True
ChangeFileAccess xlReadOnly
Kill FullName
Close False
End If
End Sub

Gruß
Rudi

AW: Selbstmord
02.02.2015 19:35:45
Stefan
Wow, das sind ja extrem viele Vorschläge! Ich bin gerade ganz verwirrt, welchen ich nehmen soll!
Vielleicht muss ich noch ein kleines bisschen weiter ausholen.
Ich glaube nicht, das mein Dozent viel Excel Durchblick hat, oder jemanden kennt, der ihn hat. Das was ich gemacht habe ist nicht viel mehr als eine Matrix aus einer guten Kombination von ein paar Anzahl, Anzahl2 und sverweis abfragen erstellt, die wiederum über ein paar verschachtelten wenn(oder(und))abfragen ein Ergebnis aus einer anderen Tabelle auswerten.
Diese oben angesprochene Matrix ist nun das Kernstück und hat das meiste Hirnschmalz gekostet. Das habe ich dann halt ins VBA ausgelagert um nicht sofort (für ihn) sichtbar zu sein. Der Ablauf ist denkbar einfach: Die auszuwertenden Daten werden in eine Tabelle eintragen. Jetzt muss ein Button geklickt werden, der das Makro startet, das die Formeln in die Matrix einträgt (ScreenUpdate=False). Berechnet, den Bereich kopiert und die Inhalte an der gleichen Stelle wieder einfügt. (ScreenUpdate=True) Jetzt ist die Matrix nur noch ein Haufen statischer Zahlen und eine andere Tabelle kann mit diesen Werten weiter rechnen.
Die Vorschläge von Klaus M.vdT. und Rudi sind super! Ich kann sie hier aber so nicht umsetzen.
Was ich nicht möchte, ist, das Blätter, bzw Inhalte gelöscht werden. Sollte diese Datei tatsächlich für gewerbliche Zwecke genutzt werden, kann da sehr viel Arbeit rein gesteckt werden. Wenn das dann gelöscht wird.. Ich möchte einfach möglichen Schadensersatzansprüchen aus dem Weg gehen. Man weiß ja nie..
jack_d, bei deinem Ansatz bekomme ich wie auch Klaus M.vdT eine Fehlermeldung.
Gruß, Stefan

Anzeige
Klaus?
03.02.2015 09:31:08
Jack_d
Hallo Stefan,
Was spricht denn eigentlich gegen einen Blattschutz?
Dann kommt er auch nicht an die Formel?
http://www.excel-helfer.de/excel-blattschutz-zellen-bereiche-und-arbeitsblaetter-schuetzen.html
Zu dem Schadenersatz. Dazu musst du wissen, ob du deinem Tutor die Rechte an dem Dokument überträgst. Das ist im Normalfall in den Satzungen der Hochschule /Einrichtungen festgeschrieben.
Wenn er es einfach nutzt (und vertreibt), und keine Rechte daran hat, hat primär ein Problem. (Und du vielleicht nen neuen Kunden) :-D
Altertnativ kannst du natürlich auch einfach eine Zeile des Codes verändern, ob das aber klaglos funktioniert kann dir Klaus vielleicht beantworten. (Oder die nachfolgende Seite)
http://www.office-loesung.de/ftopic229690_0_0_asc.php
Ansonsten, wenn du meinst, er kommt nicht an den Code (VBA Passwort)
Dann einfach die Routine mit einer Datumsprüfung unterbinden
also
Workbook_OPen()
If Date > xxxx then
msgbox "Pech gehabt"
else
Call MakroStart
end if
end sub
Grüße

Anzeige
AW: Klaus?
03.02.2015 12:20:35
Klaus
Hi Stefan,
Die von mir gezeigte Variante funktioniert bei mir ohne Fehlermeldung. Rudis Variante kann ich nicht sehen, da mir der Websicherheits-Wortfilter die Seite sperrt :-)
Man könnte jetzt darüber nachdenken, das Dokument vor dem Löschen automatisch an eine voreingestellte EMail-Adresse (deine) zu schicken ... aber das geht mir dann wirklich zu sehr in den Makrovirus-Bereich. Da könnte man ja Erpressungsabsicht unterstellen.
Unterm Stich finde ich Jack_Ds Lösung aber am besten. Die funktioniert auch, was du falsch gemacht hast kann man aus der Ferne nicht sagen, ich vermute statt "xxxx" hast du eine Variante die kein gültiges Datumsformat ist sondern vielleicht Text?
Grund: Wenn er in den VBA-Code kommt und den ändern kann (und das Passwort zu hacken ist wirklich nicht schwer) kann er eh jeden Code umgehen. Die einfache "Wenn-Datum-Dann-KeinMakro-Sonst-Makro" ist die Lösung mit dem wenigsten Schaden - und wenn er nicht in den VBA-Code kommt hält ihn das auch auf. Wenn ich vor dieser Datei stände würd ich allerdings einfach das Systemdatum ändern. So haben wir schon in den 90ern Shareware-Bedingungen umgangen :-D
Also, JackDs Lösung und vielleicht eine gute Menge Code-Obfuscation finde ich am sinnvollsten. Korrektur: Am sinnvollsten finde ich, das angesprochene Problem bei einer Tasse Tee mit dem potentiellen Kunden zu erörtern und die Rechte an dem Programm gegen eine Summe X zu verkaufen.
Grüße,
Klaus M.vdT.

Anzeige
AW: Klaus?
03.02.2015 18:43:06
Stefan
Hallo,
ich habe mich jetzt für die einfachste Variante entschieden:
Sub Makro1()
If Date > "30.06.2015" Then
Call Makro2
Else
'hier mein makro
End If
End Sub
Sub Makro2()
'hier ist nichts..
End Sub
Das hat für mich den Charm, das es einfach nicht mehr funktionert.
Klaus, Du hast auf jeden Fall Recht, das der beste Weg reden wäre. Ich sehe da aber leider (jetzt noch nicht)keinen Ansatz. Wenn ich in der Richtung was sagen würde, würde er klar leugnen, das es für was anderes als den Unterricht wäre. Wenn es tatsächlich so ist, merkt ja niemand was. Wenn er es tatsächlich später noch nutzen will, wird er sich vielleicht melden und wir haben eine Basis..
Danke für eure kreativen Ideen und Unterstützung!
Gruß, Stefan

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige