Ich habe einige geschützte Blätter in einer Arbeitsmappe. Ich habe ein Makro, das bestimmte Zeilen ausblendet und dann nur bestimmte Spalten ausdruckt, wobei die einzelnen Zeilen ausgeblendet sind. (Der Benutzer muss die Zeilen auf dem Bildschirm sehen, aber nicht drucken). Um zu verhindern, dass die Zeilen gedruckt werden, blende ich die Zeilen aus. Um die Zeilen auszublenden, muss ich das Blatt entsperren und es dann nach dem Drucken schützen. Der Code unten ist, was ich habe. Es wird ausgelöst, indem entweder Print_Days()
oder Print_Afternoons()
oder Print_Nights()
ausgeführt wird. Alles funktioniert gut, bis auf ein Problem ... Wenn ich die Arbeitsmappe teile, kann ich das Blatt nicht aufheben.Freigegebenes Arbeitsblatt freigeben ODER bestimmten Inhalt in einem freigegebenen Arbeitsblatt ausblenden
Gibt es einen anderen Ansatz, der in einer gemeinsamen Umgebung funktionieren könnte?
- Kann ich nur die benötigten Zeilen drucken? Ich habe versucht, aber es druckt die Zeilen auf verschiedenen Seiten statt alle zusammen, als ob es 1 Bereich von Zellen wäre.
- Kann ich den gewünschten Inhalt in eine andere Arbeitsmappe kopieren und ausdrucken? Wenn ja, ich habe keine Ahnung, wie es geht!
- Gibt es einen besseren Ansatz?
.
Public c1
Public c2
Public c3
Public c4
Sub Print_Days()
c1 = "b"
c2 = "c"
c3 = "d"
c4 = "e"
Call Print_Schedule(4)
End Sub
Sub Print_Afternoons()
c1 = "g"
c2 = "h"
c3 = "i"
c4 = "j"
Call Print_Schedule(1)
End Sub
Sub Print_Nights()
c1 = "l"
c2 = "m"
c3 = "n"
c4 = "o"
Call Print_Schedule(1)
End Sub
Sub Print_Schedule(Print_Copies)
Call UnProtectSheet
Dim r As Long
For r = 38 To 190
'Hide empty rows
If Application.CountA(Range(c1 & r & ":" & c1 & r)) = 0 Then
Range("A" & r).EntireRow.Hidden = True
End If
'Hide UP rows
If Range(c3 & r) = "UP" Or Range(c3 & r) = "VAC" Or Range(c3 & r) = "OFF" Or Range(c3 & r) = "NCNS" Or Range(c3 & r) = "AA" Or Range(c3 & r) = "AB - LOA" Then
Range("A" & r).EntireRow.Hidden = True
End If
Next r
'Save the current print area
curPrtArea = ActiveSheet.PageSetup.PrintArea
'Save the current orientation
curOrientation = ActiveSheet.PageSetup.Orientation
'Save the current print color profile
curPrtColor = ActiveSheet.PageSetup.BlackAndWhite
'Define the setting to only print Black and White
ActiveSheet.PageSetup.BlackAndWhite = True
'Define desired print orientation
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.PageSetup.PaperSize = xlPaperLegal
ActiveSheet.PageSetup.Zoom = False
ActiveSheet.PageSetup.FitToPagesTall = 1
'Define desired print area
myPrtArea = c1 & "37:" & c4 & "190"
'Set the desired print area
ActiveSheet.PageSetup.PrintArea = myPrtArea
'Print the desired print area
ActiveSheet.PrintOut Copies:=Print_Copies
'Unhide all rows
Range("A38:A190").EntireRow.Hidden = False
'Reset the original print orientation
ActiveSheet.PageSetup.Orientation = curOrientation
'Reset the original print area
ActiveSheet.PageSetup.PrintArea = curPrtArea
ActiveSheet.PageSetup.BlackAndWhite = curPrtColor
Call ProtectSheet_All_Parameters_passed
End Sub
Function UnProtectSheet()
'UnProtect Method without a password passed
ActiveSheet.Unprotect
End Function
Function ProtectSheet_All_Parameters_passed()
'Protect Method with all the parameters passed in it
ActiveSheet.Protect _
Password:="", _
DrawingObjects:=False, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True, _
AllowFormattingCells:=True, _
AllowFormattingColumns:=False, _
AllowFormattingRows:=False, _
AllowInsertingColumns:=False, _
AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, _
AllowDeletingColumns:=False, _
AllowDeletingRows:=False, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
ActiveSheet.EnableSelection = xlUnlockedCells
End Function
IMO: Der beste Ansatz wäre eine SQL hinter Ihrer Excel-Datei. Es gibt keinen wirklichen Schutz/Sicherheit in Excel (sobald Sie jemandem erlauben, die Datei zu öffnen)! Wenn Sie nur relevante Daten oder Daten anzeigen möchten, die bestimmte Benutzer sehen dürfen, richten Sie ein SQL ein, um die Daten/Sicherheit zu behandeln, und verwenden Sie Excel nur als Front-End. – Ralph