Geplante Obsoleszenz mit VBA?

5 Antworten

Hallo,

damit VBA-Code auf das VBA-Projekt zugreifen kann muss unter Entwicklertools->Makrosicherheit->Einstellungen für Makros der Haken bei "Zugriff auf das VBA-Projekt vertrauen" gesetzt sein, standardmäßig ist er das nicht.

Da die einzelne Selbstzerstörung somit leider nicht geht, löschen wir stattdessen einfach das ganze VBA-Projekt und lassen den z.B beim Öffnen nach Prüfung des Benutzers laufen. Falls du es vorher testen willst noch ein Warnhinweis: Es bezieht sich auf die aktive Datei und sämtliches VBA darin wird restlos gelöscht.

Sub SpeichernohneMakro2()
    Dim wks As Worksheet
    Dim strDname As String
    
    Application.ScreenUpdating = False
        'Bildschirmaktualisierung abgeschaltet
    Application.DisplayAlerts = False
        'schaltet Meldungen aus
    strDname = ActiveWorkbook.Path & "\" & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5) & ".xlsx"
        'Pfad und Name der Kopie
        ' Rest vom Makro
    ActiveWorkbook.SaveAs strDname, FileFormat:=xlOpenXMLWorkbook
        'Datei wird als Kopie gespeichert
    Workbooks.Open Left(strDname, Len(strDname) - 1) & "m"
        'Datei mit Makros erneut öffnen
        
    With ActiveWorkbook 'Datei mit Makros löschen
        .ChangeFileAccess xlReadOnly
        Kill .FullName
        .Close False
    End With
    
    Application.ScreenUpdating = True
        'Bildschirmaktualisierung eingeschaltet
         
    Application.DisplayAlerts = True
        'schaltet Meldungen ein
    
    'neustarten der Datei da ansonsten die Makros weiter als "Geistversionen" existieren (sie sind in der xlxs-Datei weiter sichtbar und ausgeführt, werden aber nicht mitgespeichert)
    Call Application.OnTime(EarliestTime:=Now, Procedure:="Dummy", Schedule:=True)
    Call ThisWorkbook.Close(SaveChanges:=False)
    
    'führt leider zu einer Fehlermeldung da Dummy logischerweise nichtmehr existiert, die ich aber nicht unterdrückt bekomme
End Sub

Public Sub Dummy()
End Sub

Den User kannst du auf zwei Arten abfragen:

Environ("Username") 'Windowsbenutzer
Application.UserName 'Excelbenutzer

stroiner123 
Fragesteller
 13.07.2021, 16:54

Super!! dank dir, werd ich später ausprobieren und hier ein feeback geben. klingt auf jeden fall vielversprechend.

0

Gib dem doch gar nicht erst die Exceldatei. Wo ist der Sinn dahinter, sie ihm erst zu geben und dann automatisch zu zerstören?

Meine Empfehlung: Erstell eine Version ohne deine "Spezialmakros" und gib ihm diese.


stroiner123 
Fragesteller
 13.07.2021, 16:42

er kann (und muss) die excel datei ja haben, aber nicht die scripte, die ihm die arbeit erleichtern, aber rauslöschen geht auch nicht, das muss wie ein "unfall" aussehen ;-)

0
LtLTSmash  13.07.2021, 16:49
@stroiner123

Du kannst den Code auch in ein Add-In packen, dann ist es gar nicht erst in der Excel Datei drin.

0
stroiner123 
Fragesteller
 13.07.2021, 16:53
@LtLTSmash

hmm, wäre ne überlegung wert, allerdings arbeite ich mit einer firma zusammen, die das script auch verwendet (und das ist auch in ordnung), daher soll sich das ding auch nur zerschießen, wenn er es nutzt

allerdings stecke ich mit den kollegen dieser firma unter einer decke, da könnte man was machen....

0

Hallo stroiner123,

das ist eine lustige Aufgabe.
Zunächst würde ich den VBA Code mit PW schützen:

Bild zum Beitrag

Dann kannst du zu Beginn jedes Scripts den (fälschungssicheren) Usernamen auslesen mit Mensch$ = Environ("username").

Und alle nicht berechtigten auf diese Art ausschließen:
If Mensch$ = "Arschengel" Then End

Auf Wunsch kannst du noch eine mehr oder weniger nette Msgbox vor dem End einbauen.

Bitte berichte hier, wie es gelaufen ist.

Woher ich das weiß:eigene Erfahrung – Faulheit >> Neugier >> Wissen
 - (Microsoft Excel, VBA)

stroiner123 
Fragesteller
 13.07.2021, 16:44

arschengel?? du scheinst den kollegen zu kennen :D:D das mit dem passwortschutz ist ne gute idee, auch das andere werde ich mal ausprobieren. Ich halte dich auf dem laufenden ;-)

1
stroiner123 
Fragesteller
 16.07.2021, 14:02

Das mit dem Passwort war ein super Hinweis, kannte die Funktion bisher nicht. So kann keiner was fixen geschweige denn mir was nachweisen :D:D Danke dafür!

0
stroiner123 
Fragesteller
 16.07.2021, 14:41

Achso, noch kann ich kein endgültiges Feedback geben, da mein Urlaub erst morgen beginnt, aber er hat die Exceldatei bereits bei der Einarbeitung von alleine zerschossen. Ich mache mir keine Sorgen, das er die Woche nicht tatsächlich seine wahren Fähigkeiten zeigt :D:D:D

1

Weiß er denn, das dieses Makro existiert? Anstatt den Code zu schrotten wäre es evtl Möglichkeit diesem den Code nicht anzubieten.

Zudem mal ne Frage, bleibt die Arbeit dann nicht für dich liegen?


stroiner123 
Fragesteller
 13.07.2021, 16:50

ja, er weiß, dass es da "was" gibt

das ist ja das geile an der sache, die arbeit kann und darf nicht liegenbleiben, und es geht auch ohne meine scripte, will die firma ja auch nicht in den ruin treiben, aber er wird definitiv im strahl k*tzen wenn er alles händisch machen muss.

0
LtLTSmash  13.07.2021, 16:51
@stroiner123

Nun, du kannst den Code auch in ein Add-In packen, dann ist der nicht in der Datei und er kann ihn nicht benutzen. Das Add-In kannst du an deine anderen Kollegen ja verteilen.

0
stroiner123 
Fragesteller
 16.07.2021, 14:05
@LtLTSmash

AddIn ist ne super sache, hab das bisher null auf dem Radar gehabt, auch wenn ich es in dem Fall etwas anders löse, ist der Hinweis wirklich gut! Danke dafür, wieder was gelernt ;-)

0

das geht nicht sinnvoll. Und schon gar nicht mit so Spielzeug wie VBA.

Eine vernünftige Lösung wäre eine Online-Komponente zu verwenden. Die kann dann ganz direkt und einfach als Service mit begrenztem Nutzungsumfang angeboten werden.


stroiner123 
Fragesteller
 13.07.2021, 16:47

scheint doch sinnvolle lösungen zu geben .... ich staune immer wieder über die mühe, die sich menschen machen, nur um auf eine Frage zu antworten mit "weiß ich nicht", "so ist quatsch" oder "mach es anders als du es möchtest" .... natürlich ohne tatsächlich eine konstruktive lösung anzubieten. Dennoch, danke für deine Zeit, du hast sicher viel zu tun ;-)

0
freejack75  13.07.2021, 17:28
@stroiner123

klar gibt es sinnvolle Lösungen -- ich habe Dir ja eine beschrieben.

Und gebastel. Viel Spaß damit! ;-)

0