allg. Informationen zu Blättern
21.03.2016 17:18:50
Michael
Hi zusammen,
Eure "Argumente" habe ich zur Kenntnis genommen, ich möchte aber nicht weiter darauf eingehen.
Inhaltlich war ja auch was geboten: das mit den Druckbereichen kann hakelig sein, insbesondere, wenn eine "Kamera" verwendet wird: ohne es vertieft bzw. ausprobiert zu haben, sage ich mal einfach, die wird wie ein "Grafikobjekt" behandelt, so daß ein "automatisches" Ermitteln des Druckbereichs via VBA etwas aufwendiger werden dürfte - hier finde ich Herberts Vorschlag, die DBe grundsätzlich bereits im Vorfeld händisch festzulegen, am sinnvollsten.
Eine andere Frage zum wie und warum hat sich mir aber noch gestellt: hast Du einen Drucker bzw. Kopierer mit mehreren Einzugsschächten für verschiedene Papiergrößen? Macht der das auch brav?
Ich habe das von Herbert & mir entwickelte Makro mal in Deine Datei gepackt (Modul: Forum), zusammen mit zwei weiteren Makros, die Dir hoffentlich verdeutlichen, wie sich das mit den Blättern verhält:
Option Explicit
Sub M_BlattKopieren()
' Aufrufen mit Strg+Umschalt+K
Dim actSh As Worksheet, neuesSh As Worksheet
Set actSh = ActiveSheet
MsgBox "Aktives Blatt Name: " & actSh.Name & " Nr.: " & actSh.Index _
& vbLf & "Anzahl Blätter gesamt: " & Sheets.Count
Sheets("Lieferanten").Copy after:=Sheets(Sheets.Count) ' z.B. ganz rechts
Set neuesSh = ActiveSheet
MsgBox "Neues Blatt Name: " & neuesSh.Name & " Nr.: " & neuesSh.Index _
& vbLf & "Anzahl Blätter gesamt: " & Sheets.Count
neuesSh.Name = "mein_neuer_Name"
MsgBox "Neues Blatt Name: " & neuesSh.Name & " Nr.: " & neuesSh.Index
actSh.Activate ' zurück zum Blatt, von dem aus der Aufruf erfolgt ist
' neuesSh.Delete ' ggf. neues Blatt löschen
End Sub
Sub M_Blatt_Schleifen()
' Aufrufen mit Strg+Umschalt+S
Dim actSh As Worksheet, laufSh As Worksheet
Dim actShNr&, neuesShNr&, maxShNr&, i&
Dim message$
' & = "As Long", % = "as Integer", $ = "as String"
' Schleife numerisch via Index:
actShNr = ActiveSheet.Index
maxShNr = Sheets.Count
For i = 1 To maxShNr
If i actShNr Then
MsgBox "Blatt Nr.: " & i & " Name: " & Sheets(i).Name
Else
MsgBox "Blatt Nr.: " & i & " Name: " & Sheets(i).Name & vbLf & _
"Hey, von diesem Blatt aus wurde das Makro aufgerufen"
End If
Next
' Schleife mit Blättern als Worksheet-Objekt
Set actSh = ActiveSheet
For Each laufSh In Worksheets
If actSh.Name laufSh.Name Then
message = "Blatt Nr.: " & laufSh.Index & " Name: " & laufSh.Name
Else
message = "Blatt Nr.: " & laufSh.Index & " Name: " & laufSh.Name _
& vbLf & "Hey, von diesem Blatt aus wurde das Makro aufgerufen"
End If
If InStr(laufSh.Name, "(2)") = 0 Then
message = message & vbLf & "Von diesem Blatt aus könnte man auch" _
& vbLf & "das Blatt -" & laufSh.Name & " (2)" & "- aufrufen."
End If
MsgBox message
Next
MsgBox "Das 'Aktive Blatt' ist immer noch " & actSh.Name & " = " & _
ActiveSheet.Name
End Sub
Beide Makros kannst Du von jedem beliebigen Blatt aufrufen, die Tastenkombi steht unter dem jeweiligen Namen.
Zusätzlich kannst Du mal beide Makros mit der F8-Taste zeilenweise durchlaufen lassen und beobachten, was passiert.
Ich denke, das wird Dir den nötigen "Kick" für das Kopieren von Blättern und das Ändern der von Excel automatisch vergebenen Namen (xxx (2)) geben...
Schöne Grüße,
Michael