2016-04-25 10 views
0

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 
+0

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

Antwort

0

Sie sollten in xlSheetVeryHidden nachsehen. Dies verhindert, dass der Benutzer auf das Blatt zugreifen kann, während Sie weiterhin in einer freigegebenen Arbeitsmappe drucken können. Es ist der dritte Status, den ein Arbeitsblatt zusammen mit xlVisible und xlHidden haben kann. Sie können Code verwenden, um zwischen xlVisible, das Sie drucken müssen, und xlVeryHidden, das Sie für den Schutz benötigen, zu wechseln.

Jason

+0

Ich habe die ursprüngliche Frage aktualisiert, um zu erklären, dass ich nicht das gesamte Blatt versteckt habe ... Nur bestimmte Zellen und nur während es druckt. Wenn ich deine Antwort verstehe ... Es wird das ganze Blatt verdecken ... Richtig? –

+0

Legen Sie auf der Registerkarte Seitenlayout oben den Druckbereich so fest, dass nur die gewünschten Zeilen enthalten sind. Dann müssen Sie die Zeilen nicht verstecken oder einblenden. Gehen Sie dann zur Registerkarte Ansicht, klicken Sie auf Seitenumbruchvorschau und passen Sie die Umbrüche an. – jcarroll

Verwandte Themen