Discussion:
Excel beenden wenn Makros deaktiviert
(zu alt für eine Antwort)
Thomas Vollkommer
2004-09-28 12:49:08 UTC
Permalink
Hallo!
Wenn bei Programmstart die Makros nicht aktiviert wurden,
soll Excel beendet werden (evt. mit Hinweis). Kann mir
hier bitte jemand weiterhelfen? Danke
Thomas
Reiner Wolff
2004-09-28 16:36:16 UTC
Permalink
Moin Thomas,
Post by Thomas Vollkommer
Wenn bei Programmstart die Makros nicht aktiviert wurden,
soll Excel beendet werden (evt. mit Hinweis). Kann mir
hier bitte jemand weiterhelfen? Danke
Du möchtest also Code ausführen, wenn eine Codeausführung definitiv nicht
gewünscht ist?
Das geht zum Glück so ohne weiteres nicht.
Du könntest das ganze mit einem signierten Codefragment umgehen, aber auch
dabei muss der Benutzer der 'Quelle' des Codes einmal "vertraut" haben.

Welchen Grund gibt es denn, in solchen Fällen Excel zu beenden?
Wenn man die Gegebenheiten kennt, kann man sicherlich auch andere Lösungen
vorschlagen, nur Excel zu beenden wird es dann wohl nicht sein.

Kürzlich wurde hier für einen ähnlichen Fall auch vorgeschlagen, einfach im
'Workbook_BeforeClose'-Ereignis dann einfach die Arbeitsmappe auszublenden
und diese Änderung zu speichern oder ähnliches zu veranstalten, um Deine
Arbeitsmappe zu schützen.

Greetinx aus Kiel
Reiner
--
54. Sie sind ein Net-o-holic wenn...
.Sie sich abends an den Computer setzen und sich wundern, dass kurz
darauf Ihre Kinder zur Schule muessen.
Thomas Vollkommer
2004-09-29 04:05:08 UTC
Permalink
Hallo Reiner,
zunächst mal danke für die Antwort. Das Problem ist
folgendes. Die Tabelle wird über einen USB-Lizenzdongle
geschütz. Dieser Scjutz funktioniert nur, wenn Makros
aktiv sind. Es wurde auch ein "Zertifikat" mit angehängt.
Wenn beim ersten Programmstart Makros aktiviert wurden und
der "Quelle immer vertraur" wird, geht das auch. Wenn beim
ersten Proggrammstart Makros nicht aktiviert werden, läuft
das Programm auch ohne Lizenzdongel.
Dafür suche ich eine Lösung, weißt du wie das mit dem
Ausblenden geht? Danke

Thomas
-----Originalnachricht-----
Moin Thomas,
Post by Thomas Vollkommer
Wenn bei Programmstart die Makros nicht aktiviert
wurden,
Post by Thomas Vollkommer
soll Excel beendet werden (evt. mit Hinweis). Kann mir
hier bitte jemand weiterhelfen? Danke
Du möchtest also Code ausführen, wenn eine Codeausführung
definitiv nicht
gewünscht ist?
Das geht zum Glück so ohne weiteres nicht.
Du könntest das ganze mit einem signierten Codefragment
umgehen, aber auch
dabei muss der Benutzer der 'Quelle' des Codes
einmal "vertraut" haben.
Welchen Grund gibt es denn, in solchen Fällen Excel zu
beenden?
Wenn man die Gegebenheiten kennt, kann man sicherlich
auch andere Lösungen
vorschlagen, nur Excel zu beenden wird es dann wohl nicht
sein.
Kürzlich wurde hier für einen ähnlichen Fall auch
vorgeschlagen, einfach im
'Workbook_BeforeClose'-Ereignis dann einfach die
Arbeitsmappe auszublenden
und diese Änderung zu speichern oder ähnliches zu
veranstalten, um Deine
Arbeitsmappe zu schützen.
Greetinx aus Kiel
Reiner
--
54. Sie sind ein Net-o-holic wenn...
..Sie sich abends an den Computer setzen und sich
wundern, dass kurz
darauf Ihre Kinder zur Schule muessen.
.
Reiner Wolff
2004-09-29 06:15:26 UTC
Permalink
Moin Thomas,
Post by Thomas Vollkommer
zunächst mal danke für die Antwort. Das Problem ist
folgendes. Die Tabelle wird über einen USB-Lizenzdongle
geschütz. Dieser Scjutz funktioniert nur, wenn Makros
aktiv sind. Es wurde auch ein "Zertifikat" mit angehängt.
Wenn beim ersten Programmstart Makros aktiviert wurden und
der "Quelle immer vertraur" wird, geht das auch. Wenn beim
ersten Proggrammstart Makros nicht aktiviert werden, läuft
das Programm auch ohne Lizenzdongel.
Dafür suche ich eine Lösung, weißt du wie das mit dem
Ausblenden geht?
[Fullquote umweltgerecht entsorgt]

Das Ausblenden würde zB über
For i = 1 To ThisWorkbook.Windows.Count
ThisWorkbook.Windows(i).Visible = False
Next i

gehen.
Vergiß aber nicht, es beim Laden auch wieder einzublenden. Allerdings kann
der findige Benutzer dann immer noch an die Datei heran.

Für Deinen Fall würde ich eine sog. Starter-Exe benutzen und die
Excel-Datei mit einem Passwort abspeichern. Eine Starter-Exe erzeugst Du
mit einer selbständigen Programmiersprache (also nicht mit VBA). Diese kann
dann kurz die Lizenzen prüfen und ggf. die Excel-Datei laden.

Vielleicht gibt es auch in Excel noch bessere Möglichkeiten, mir sind sie
aber nicht bekannt oder fallen mir gerade nicht ein.

HTH
Greetinx aus Kiel
Reiner
--
54. Sie sind ein Net-o-holic wenn...
.Sie sich abends an den Computer setzen und sich wundern, dass kurz
darauf Ihre Kinder zur Schule muessen.
a***@discussions.microsoft.com
2004-09-29 16:53:20 UTC
Permalink
Danke Reiner,
hab eine Lösung gefunden.

Viele Grüße, Thomas
-----Originalnachricht-----
Moin Thomas,
Post by Thomas Vollkommer
zunächst mal danke für die Antwort. Das Problem ist
folgendes. Die Tabelle wird über einen USB-Lizenzdongle
geschütz. Dieser Scjutz funktioniert nur, wenn Makros
aktiv sind. Es wurde auch ein "Zertifikat" mit
angehängt.
Post by Thomas Vollkommer
Wenn beim ersten Programmstart Makros aktiviert wurden
und
Post by Thomas Vollkommer
der "Quelle immer vertraur" wird, geht das auch. Wenn
beim
Post by Thomas Vollkommer
ersten Proggrammstart Makros nicht aktiviert werden,
läuft
Post by Thomas Vollkommer
das Programm auch ohne Lizenzdongel.
Dafür suche ich eine Lösung, weißt du wie das mit dem
Ausblenden geht?
[Fullquote umweltgerecht entsorgt]
Das Ausblenden würde zB über
For i = 1 To ThisWorkbook.Windows.Count
ThisWorkbook.Windows(i).Visible = False
Next i
gehen.
Vergiß aber nicht, es beim Laden auch wieder
einzublenden. Allerdings kann
der findige Benutzer dann immer noch an die Datei heran.
Für Deinen Fall würde ich eine sog. Starter-Exe benutzen
und die
Excel-Datei mit einem Passwort abspeichern. Eine Starter-
Exe erzeugst Du
mit einer selbständigen Programmiersprache (also nicht
mit VBA). Diese kann
dann kurz die Lizenzen prüfen und ggf. die Excel-Datei
laden.
Vielleicht gibt es auch in Excel noch bessere
Möglichkeiten, mir sind sie
aber nicht bekannt oder fallen mir gerade nicht ein.
HTH
Greetinx aus Kiel
Reiner
--
54. Sie sind ein Net-o-holic wenn...
..Sie sich abends an den Computer setzen und sich
wundern, dass kurz
darauf Ihre Kinder zur Schule muessen.
.
Melanie Breden
2004-09-29 06:28:35 UTC
Permalink
Hallo Thomas,
Post by Thomas Vollkommer
Wenn bei Programmstart die Makros nicht aktiviert wurden,
soll Excel beendet werden (evt. mit Hinweis)
Wenn du eine Arbeitsmappe als AddIn definierst, werden in der Excel
Oberfläche keine Arbeitsblätter der Datei angezeigt.

Setze diese Eigenschaft im BeforeClose-Ereignis auf True.
Allerdings muss die Datei anschließend gespeichert werden.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.IsAddin = True
.Save
End With
End Sub

Wenn die Mappe mit Makrounterstützung geöffnet wird, wird die IsAddin-Eigenschaft
auf False gesetzt und die Mappe kann normal bearbeitet werden.

Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
End Sub

Bei deaktivierten Makros wird die Datei in Excel geladen, ist aber nur im VBA Editor sichtbar.
Um sie erneut zu öffnen, muss zuerst Excel geschlossen werden, damit die Datei dadurch mit geschlossen wird.

Wenn du das Programm komplett als AddIn zur Verfügung stellen kannst, werden Makros auf jeden Fall aktiviert.
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
a***@discussions.microsoft.com
2004-09-29 16:52:14 UTC
Permalink
Hallo Melanie (übrigens ein sehr schöner Name!)

Danke für die Hilfe, hab eine Lösung gefunden

Viele Grüße, Thomas
-----Originalnachricht-----
Hallo Thomas,
Post by Thomas Vollkommer
Wenn bei Programmstart die Makros nicht aktiviert
wurden,
Post by Thomas Vollkommer
soll Excel beendet werden (evt. mit Hinweis)
Wenn du eine Arbeitsmappe als AddIn definierst, werden in
der Excel
Oberfläche keine Arbeitsblätter der Datei angezeigt.
Setze diese Eigenschaft im BeforeClose-Ereignis auf True.
Allerdings muss die Datei anschließend gespeichert werden.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.IsAddin = True
.Save
End With
End Sub
Wenn die Mappe mit Makrounterstützung geöffnet wird, wird
die IsAddin-Eigenschaft
auf False gesetzt und die Mappe kann normal bearbeitet
werden.
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
End Sub
Bei deaktivierten Makros wird die Datei in Excel geladen,
ist aber nur im VBA Editor sichtbar.
Um sie erneut zu öffnen, muss zuerst Excel geschlossen
werden, damit die Datei dadurch mit geschlossen wird.
Wenn du das Programm komplett als AddIn zur Verfügung
stellen kannst, werden Makros auf jeden Fall aktiviert.
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
.
Melanie Breden
2004-09-29 18:04:08 UTC
Permalink
Hallo Thomas,
Post by a***@discussions.microsoft.com
Hallo Melanie (übrigens ein sehr schöner Name!)
danke sehr, deiner ist aber auch nicht schlecht :-)
Post by a***@discussions.microsoft.com
Danke für die Hilfe, hab eine Lösung gefunden
Sagst du uns auch welche?
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Thomas Vollkommer
2004-09-30 12:15:07 UTC
Permalink
Hallo Melanie !

Hier die Lösung:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Mldg As Byte
If ActiveWorkbook.Saved Then
Worksheets("Hinweis").Visible = True
For InI = Worksheets.Count To 1 Step -1
If Worksheets(InI).Name <> "Hinweis" Then
Worksheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save

End If

End Sub


Private Sub Workbook_Open()

For InI = Worksheets.Count To 1 Step -1
Worksheets(InI).Visible = True
Next InI
Worksheets("Hinweis").Visible = False
ActiveWorkbook.Saved = True


End Sub


Schließt alle Sheets außer Sheet"Hinweis", wenn Makros
nicht aktiviert sind. In Tabelle "Hinweise" ist dann ein
Hinweis, dass Makros aktiviert werden müssen.

Wenn Makros aktiviert, werden alle Sheets, außer "Hinweis"
geöffnet


Viele Grüße und einen schönen Tag, Thomas
Melanie Breden
2004-09-30 13:48:24 UTC
Permalink
Hallo Thomas,
Post by Melanie Breden
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Mldg As Byte
If ActiveWorkbook.Saved Then
können Änderungen in der Datei vorgenommen werden?
Dann ist Saved=False und die Blätter werden nicht ausgeblendet :-(
Es reicht schon eine flüchtige Formel in der Datei (HEUTE(), JETZT() etc.),
die die Saved-Eigenschaft nach dem Öffnen auf False stellt.
Post by Melanie Breden
Worksheets("Hinweis").Visible = True
For InI = Worksheets.Count To 1 Step -1
If Worksheets(InI).Name <> "Hinweis" Then
Worksheets(InI).Visible = xlVeryHidden
Next InI
ByS = True
ThisWorkbook.Save
End If
End Sub
Private Sub Workbook_Open()
For InI = Worksheets.Count To 1 Step -1
Worksheets(InI).Visible = True
Next InI
Worksheets("Hinweis").Visible = False
ActiveWorkbook.Saved = True
Warum setzt du die Saved-Eigenschaft auf True?

Man kann die geöffnete Mappe im Explorer kopieren und
sie dann ohne aktivierte Makros öffnen und alle Blätter sind doch sichtbar.

Im Prinzip müsstest du vor jedem Speichern-Vorgang die Blätter ausblenden, damit
die Datei nicht ungeschützt über den Explorer kopiert werden kann.
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Reiner Wolff
2004-09-30 20:37:28 UTC
Permalink
Moin Melanie,
Post by Melanie Breden
Im Prinzip müsstest du vor jedem Speichern-Vorgang die Blätter ausblenden, damit
die Datei nicht ungeschützt über den Explorer kopiert werden kann.
Ack.
Noch weiter gedacht, reichen ja schon einfache VBA-Kenntnisse
(Worksheets.Count) aus, um sich auf diesem Wege Zugang zu den "versteckten"
Bereichen zu verschaffen.

Bei der Lösung bleiben einfach Lücken, aber wenn man mit denen Leben
kann...

Greetinx aus Kiel
Reiner
--
"Künstliche Intelligenz ist das Perpetuum Mobile der Informatik"
Thomas Ramel
2004-10-01 06:14:42 UTC
Permalink
Grüezi Reiner

Reiner Wolff schrieb am 30.09.2004
Post by Reiner Wolff
Noch weiter gedacht, reichen ja schon einfache VBA-Kenntnisse
(Worksheets.Count) aus, um sich auf diesem Wege Zugang zu den "versteckten"
Bereichen zu verschaffen.
Bei der Lösung bleiben einfach Lücken, aber wenn man mit denen Leben
kann...
Bei allen Lösungen mit Excel bleiben Lücken; das liegt nun mal in der Natur
der Sache. Die 'sicherste' Methode wäre noch eine eigene dll oder ein
COM-Add-In, da der Aufwand, diese zurückzuarbeiten sich nicht wirklich
lohnt.

Die Schutzmechanismen in Excel dienen vorwiegend dazu,
unbedachte/unbeabsichtigte Änderungen oder ein Überscheiben von Formeln und
Inhalten zu erschweren - 'wasserdicht' in dem Sinne ist ganz einfach nicht
möglich. Ein einigermassen bewanderter Excel-Kenner wird jede Datei innert
kurzer Zeit 'knacken' können....

Ab Office 2003 gibts je nach Version Unterstützung für das
DocumentRightsManagement, das in grossen Firmen verhindern soll/kann, dass
unberechtigte Daten lesen und bearbeiten können, die nicht für sie bestimmt
sind.
Bis sich dies aber auf den Heim- und Privat-Anwender ausdehnt dürfte noch
etwas Zeit verstreichen.

Da aber Excel sich einer weiten Verbreitung erfreut, wird viel mit Excel
gemacht, obschon es nicht unbedingt das optimale Instrument dafür ist.
--
Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -

[Win XP Pro SP-1 / xl2000 SP-3]
Loading...