Herbers Excel-Forum - das Archiv

Ausdrucken über VBA verhindern

Bild

Betrifft: Ausdrucken über VBA verhindern
von: Torsten K.

Geschrieben am: 11.04.2005 10:21:22
Hallo beisammen,
wie richte ich es ein, daß in einem WB keines der darin
enthaltenen WS ausgedruckt werden kann?
Die Recherche hat mir nicht weiter geholfen.
Für Eure Tips im voraus besten Dank.
Gruß
Torsten
Bild

Betrifft: AW: Ausdrucken über VBA verhindern
von: Tobias Marx

Geschrieben am: 11.04.2005 10:25:19
Servus!
Soviel zum Thema Recherche:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Tabelle1" Then
MsgBox "Das Durcken ist nicht erlaubt!"
Cancel = True
End If
Exit Sub
End Sub

Gefunden unter Druck verbieten: https://www.herber.de/forum/archiv/532to536/t533469.htm
Gruss

Tobias
Bild

Betrifft: AW: erledigt - mT
von: Torsten K.

Geschrieben am: 11.04.2005 10:31:30
Hallo Tobias,
vielen Dank für Deine schnelle Antwort.
Ich habe gesucht unter "Ausdrucken verhindern" und nichts
passendes gefunden. Ich werde mich bessern und beim nächsten Mal auch andere Alternativbegriffe ausprobieren.
Gruß
Torsten
Bild

Betrifft: Unbelassen bleibt aber zunächst die Möglichkeit
von: Boris

Geschrieben am: 11.04.2005 10:32:49
Hi Torsten,
die Blätter in eine andere Mappe zu kopieren und dann auszudrucken.
Oder eine Hardcopy anzufertigen, oder Verknüpfungen auf die Tabelle zu erstellen oder oder ...
Will nur sagen: Wo ein Wille, da bekanntlich ein Weg.
Sei dir daher nur nicht sicher, dass dir nicht irgendwann ein Ausdruck deiner Datei über den Weg läuft ;-)
Grüße Boris
Bild

Betrifft: AW: Unbelassen bleibt aber zunächst die Möglichkeit
von: Torsten K.

Geschrieben am: 11.04.2005 10:49:37
Hallo Boris,
mit Deinen Einwänden hast Du natürlich Recht. Und wie Du sagst, ...wo ein Wille , da ist auch ein Weg. Aber das möchte ich meinen Usern dann doch nicht unterstellen wollen.
Wass mir aber in dem Zusammenhang noch einfällt: Ich weiß zwar, wie das "Speichern unter.." einer Datei verhindern werden kann, aber kann ich auch das Kopieren eines WS verhindern? Hast Du da eine Idee?
Gruß
Bild

Betrifft: Möglich ist fast alles...
von: Boris

Geschrieben am: 11.04.2005 11:02:08
Hi Torsten,
nur alles eine Frage des Aufwands.
Du kannst die Register ausblenden, die Mappe schützen, die Zwischenablage ständig leeren mit:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim newDAO As New DataObject 'Verweis auf die Microsoft Forms 2.0 Object Library notwendig
Application.CutCopyMode = False
newDAO.SetText ""
newDAO.PutInClipboard
Set newDAO = Nothing
End Sub

Aber immer noch kann man in andere Mappen rüber kopieren.
Zudem kannst du die Selektionsmöglichkeiten einschränken oder gar ganz verbieten - allerdings stellt sich dann die Frage, ob man mit der Mappe noch arbeiten kann.
Lange Rede kurzer Sinn: Das wirst du wohl kaum 100%ig unterbinden können.
Grüße Boris
Bild

Betrifft: AW: erledigt - mT
von: Torsten K.

Geschrieben am: 11.04.2005 11:08:38
Hallo Boris,
vielen Dank für Deine Ausführungen.
Schreibgeschützt ist die Datei ohnehin. Ich wollt' halt nur unterbinden, daß der User sich ein einzelnes WS kopiert. Wenn das gänzlich nicht auszuschließen ist, dann belasse ich es bei den bisherigen Einschränkungen.
Nochmals besten Dank.
Gruß
Torsten
Bild

Betrifft: AW: versuche doch mal...
von: FP

Geschrieben am: 11.04.2005 19:49:10
Hallo Thorsten,
aus einer Mappe die diesen Ereigniscode für "Diese Arbeitsmappe" enthält etwas zu kopieren oder zu drucken... :D
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws    As Worksheet
Me.Unprotect "test"
For Each ws In Me.Sheets
If ws.CodeName <> "Tabelle1" Then ws.Visible = xlSheetVeryHidden
Next
Me.Save
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
End Sub

Private Sub Workbook_Open()
Dim ws    As Worksheet
With Application
.Interactive = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableCancelKey = xlDisabled
End With
If Me.ProtectWindows = True Or Me.ProtectStructure = True Then _
Me.Unprotect "test"
Me.Windows(1).WindowState = xlMaximized
For Each ws In Me.Sheets
If ws.ProtectContents = True Then _
ws.Unprotect "test"
ws.Visible = xlSheetVisible
ws.EnableSelection = xlNoSelection
ws.Protect "test"
Next
Me.Protect "test", True, True
With Application
.EnableCancelKey = xlInterrupt
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.Interactive = True
End With
End Sub


Ist nur eine Demo, wie leicht zumindest das verhindert werden kann.
Willst Du nicht ganz so restriktiv vorgehen, dann verwende statt
ws.EnableSelection = xlNoSelection
ws.EnableSelection = xlUnlockedCells
dann kann man zumindest noch alle ungeschützten Zellen bearbeiten.
In der "Tabelle1" ( darf sogar vom Anwender umbenannt werden ) würde ich dabei nur in
Balkenlettern "WILLKOMMEN" mitten auf den sichtbaren Bereich schreiben.
Unterbindet der Anwender die Ausführung der Makros, sitzt er trotzdem nur vor eben diesem Blatt.
Dann noch das Projekt per Passwort geschützt und fast alle Mitarbeiter meiner Firma hätten keine Möglichkeit mehr, ein Blatt zu drucken.
Wenn der Anwender natürlich ein Tool zum Passwort knacken hat, nützt das leider alles nichts...
Servus aus dem Salzkammergut
Franz
Bild

Betrifft: AW: versuche doch mal...
von: FP

Geschrieben am: 11.04.2005 19:49:24
Hallo Thorsten,
aus einer Mappe die diesen Ereigniscode für "Diese Arbeitsmappe" enthält etwas zu kopieren oder zu drucken... :D
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws    As Worksheet
Me.Unprotect "test"
For Each ws In Me.Sheets
If ws.CodeName <> "Tabelle1" Then ws.Visible = xlSheetVeryHidden
Next
Me.Save
End Sub

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
End Sub

Private Sub Workbook_Open()
Dim ws    As Worksheet
With Application
.Interactive = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableCancelKey = xlDisabled
End With
If Me.ProtectWindows = True Or Me.ProtectStructure = True Then _
Me.Unprotect "test"
Me.Windows(1).WindowState = xlMaximized
For Each ws In Me.Sheets
If ws.ProtectContents = True Then _
ws.Unprotect "test"
ws.Visible = xlSheetVisible
ws.EnableSelection = xlNoSelection
ws.Protect "test"
Next
Me.Protect "test", True, True
With Application
.EnableCancelKey = xlInterrupt
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.Interactive = True
End With
End Sub


Ist nur eine Demo, wie leicht zumindest das verhindert werden kann.
Willst Du nicht ganz so restriktiv vorgehen, dann verwende statt
ws.EnableSelection = xlNoSelection
ws.EnableSelection = xlUnlockedCells
dann kann man zumindest noch alle ungeschützten Zellen bearbeiten.
In der "Tabelle1" ( darf sogar vom Anwender umbenannt werden ) würde ich dabei nur in
Balkenlettern "WILLKOMMEN" mitten auf den sichtbaren Bereich schreiben.
Unterbindet der Anwender die Ausführung der Makros, sitzt er trotzdem nur vor eben diesem Blatt.
Dann noch das Projekt per Passwort geschützt und fast alle Mitarbeiter meiner Firma hätten keine Möglichkeit mehr, ein Blatt zu drucken.
Wenn der Anwender natürlich ein Tool zum Passwort knacken hat, nützt das leider alles nichts...
Servus aus dem Salzkammergut
Franz
Bild

Betrifft: AW: versuche doch mal...
von: Torsten K.

Geschrieben am: 12.04.2005 10:45:33
Hallo Franz,
vielen Dank für Deine Ausführungen.
Den Teil mit "ws.EnableSelection = xlNoSelection" werde ich mir mal genauer anschauen und vielleicht auch einbauen.
Gruß nach Österreich
Torsten
 Bild
Excel-Beispiele zum Thema "Ausdrucken über VBA verhindern"
Nichtnumerische Eingaben verhindern Fehlermeldung #DIV/0! verhindern
Wechselweise den Eintrag einer 1 verhindern Programmabbruch bei Überspeichernabfrage verhindern
Nichtnumerische Eingaben in TextBox verhindern Auswahl eines Zellbereiches verhindern
Vertikalen Seitenumbruch verhindern Verhindern des Schließens einer UserForm mittels Schließkreuz
Aufhebung der Workbook_Open-Befehle verhindern Editieren von Zellen durch DoppelKlick verhindern