Ausdrucken über VBA verhindern

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
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

Beiträge aus den Excel-Beispielen zum Thema "Ausdrucken über VBA verhindern"