Gruppieren - mehrere Tabellenblätter
#1
Hallo zusammen,

habe folgendes "Problem".

Geht um eine Preisliste über die auch die Angebote erstellt werden und in PDF konvertiert werden. Klappt alles wunderbar.
Die Preisliste habe ich nun um ein paar Spalten erweitert (hier werden die Supportvertragsgebühren je Position und Monatspreis ausgewiesen).
Diese Spalten hatte ich gruppiert. Wenn ich den Blattschutz aktiviert habe, konnte man die Gruppierung aber nicht mehr öffnen und/oder schließen

Dazu hatte ich dann im Virtual Basic folgendes geschrieben (erst versucht in "Diese Arbeitsmappe" und dann auch in "Tabelle1" und "Tabelle2":
Sub Worksheet_Open()
ActiveSheet.Protect UserInterfaceOnly:=True
ActiveSheet.EnableOutlining = True 'für Gliederung
ActiveSheet.EnableAutoFilter = True 'für Autofilter

End Sub

Das funktioniert, aber nur in einem Tabellenblatt. Beim anderen meckert Excel dann, dass das Blatt ja geschützt wäre.

Mit VBA bin ich jetzt nicht so fit, eher gar nicht fit Big Grin 

Wie schaffe ich es jetzt denn, dass die beiden Reiter geschützt bleiben (soll halt keiner an den Formeln oder hinterlegten Preisen rumpfuschen) und man dennoch die Gruppierung öffnen/schließen kann?

Danke vorab.
Wenn ich einen kleinen  Auszug der Excel hochladen soll, mach ich das gerne.
Gruß
Antworten Top
#2
Hallo,

ersetze ActiveSheet durch den entsprechenden Namen, bspw.: Worksheets("Tabelle1")

Gruß, Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • fs1893
Antworten Top
#3
Danke Dir, aber das will irgendwie nicht.
Gebe ich das in "Diese Arbeitsmappe " ein oder je Tabelle im Visual Basic?
Antworten Top
#4
Hallöchen,

1)
in Dein Makro ...
2)
Sub Worksheet_Open()
... gibt es nicht.
Entweder ...Workbook_Open ... (in DieseArbeitsmappe)
oder ... Workbook_SheetActivate(...) (in DieseArbeitsmappe)
oder ... Worksheet_Activate ... (in Tabellexxx)

zumindest bei letzterem könntest Du ggf. bei ActiveSheet... bleiben.
Das vorletzte würde bei jedem Blattwechsel, egal auf welches, ausgeführt und ist ggf. nicht erforderlich.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • fs1893
Antworten Top
#5
Danke, das versuche ich mal
Edit: Vielen Dank, das hat geklappt, dies hier hab ich jetzt in beide Tabellen im VB geschrieben, und das Blatt bleibt geschützt und die Gruppierung geht ohne Meckern

Sub Worksheet_Activate()
ActiveSheet.Protect userinterfaceonly:=True
ActiveSheet.EnableOutlining = True 'für Gliederung
ActiveSheet.EnableAutoFilter = True 'für Autofilter

End Sub
Antworten Top
#6
Hallo fs1893,

warum nicht nur 1 Ereignis-Prozedur in 'DieseArbeitsmappe'
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    With Sh
       If .Type = xlWorksheet Then
          If .Name = "soso" Or .Name = "osos" Then
             .Protect Password = "???", UserInterfaceOnly:=True
             .EnableOutlining = True 'für Gliederung
             .EnableAutoFilter = True 'für Autofilter
          End If
       End If
    End With
End Sub

fragt sich Luschi
aus klein-Paris
[-] Folgende(r) 1 Nutzer sagt Danke an Luschi für diesen Beitrag:
  • fs1893
Antworten Top
#7
Danke Dir, werde ich auch versuchen.
Stehe jetzt aber vor einer weiteren Baustelle.
Das Excel (ist eine Preisliste über die wir auch gleich die Angebote machen) hat ja 4 Reiter und 2 unterschiedliche Makros (um die Auswahl dann als PDF zu speichern).
Das klappt(e) wunderbar nur mit der Gruppierung dann nicht mehr. 
Da kommt ein Laufzeitfehler 1004 mit Bezug zu einem Eintrag in der VB.

Hier ist die Fehlermeldung wenn ich auf meinen Button "Angebot als PDF speichern" klicken.

Das Makro dazu sieht wie folgt aus:

Sub AG_NEU_PDF()
'
' AG_NEU_PDF Makro
'

'
    Sheets(Array("Deckblatt", "MobiCall_Expert", "Artikelbeschreibungen")). _
        Select
    Sheets("MobiCall_Expert").Activate
'    ChDir "\\FS01\Userdata$\Schuetze\Desktop\PL ab 2023"
    Application.Dialogs(xlDialogSaveAs).Show 'neue Zeile
'    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
'        "\\FS01\Userdata$\Schuetze\Desktop\PL ab 2023\NV_MobiCall_V7_20230201.pdf" _
'        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
'        :=False, OpenAfterPublish:=True
'    Sheets("MobiCall_Expert").Select
End Sub


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#8
Hallo fs1893,

mit diesem Vba-Befehl:  Sheets(Array("Deckblatt", "MobiCall_Expert", "Artikelbeschreibungen")).Select
gibt es kein ActiveSheet-Objekt mehr, des es wurden ja 3 Tabellen markiert und nicht nur 1.
Für diesen Fall muß man die Ereignisroutinen der Arbeitsmappe kurzzeitig deaktivieren mit:
Application.EnableEvents = False
Sheets(Array("Deckblatt", "MobiCall_Expert", "Artikelbeschreibungen")).Select

Mit  Application.EnableEvents = True die Ereignisroutinen erst wieder einschalten, wenn die Gruppenselektion wieder aufgehoben wurde, was ja in Deinem Codeausschnitt überhaupt nicht passiert.

Gruß von Luschi
aus klein-Paris
Antworten Top
#9
Hallo,

(28.07.2024, 09:11)Luschi schrieb: mit diesem Vba-Befehl:  Sheets(Array("Deckblatt", "MobiCall_Expert", "Artikelbeschreibungen")).Select
gibt es kein ActiveSheet-Objekt mehr, des es wurden ja 3 Tabellen markiert und nicht nur 1.

Das halte ich für ein Gerücht. 

Gruß, Uwe
Antworten Top
#10
Und wie bekomme ich das jetzt hin? Wink
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste