Blattname

Dieses Thema Blattname im Forum "Microsoft Office Suite" wurde erstellt von scb, 29. Dez. 2006.

Thema: Blattname Hallo alle Ich bin auf der suche nach einem(r) code / formel.... Habe ein Jahreskalender erstellt der mit...

  1. scb
    scb
    Hallo alle

    Ich bin auf der suche nach einem(r) code / formel....
    Habe ein Jahreskalender erstellt der mit Tagesrapportblättern (Gleiche Mappe, pro Tag ein Blatt) verknüpft ist .
    Möchte nun das die bestimmte Zelle (zb.Tagesrapport Zelle F9 mit der Formel=JahreskalenderA1 gleich Tagesdatum ) als Blatt/Registername dynamisch übernommen wird.
    Mit folgendem Code habe ich eine Lösung gefunden, muss zwar beim Monatswechsel jedes einzelne Blatt neu abspeichern um das richtige Datum als Blattname zuerhalten, möchte aber das es alle verknüpften Monatsblätter in einem Rutsch (Monat) ändert. Ebenfalls kommt beim speichern ein Debugg-Fenster mit Fehler 1004!!!!
    Wäre froh wenn mir jemand helfen könnte.

    Code:
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ActiveSheet.Name = ActiveSheet.Range(F9)
    End Sub

    mfg
     
  2. Hallo SCB,

    vielleicht kannst Du nochmal den Aufbau der Mappe schildern.

    Also es gibt ein Kalenderblatt (Name ?) mit Verweisen auf die Tagesblätter.
    Weiterhin gibt es 365/366 Tagesblätter (Aufbau Name ?)?

    Wie finde ich (bzw. der Makro heraus) , welche Blätter umbenannt werden sollen bzw. ob sie schon umbenannt sind ?

    Wann soll die Umbenennung stattfinden ?

    Gruß Matjes :)
     
  3. scb
    scb
    Hallo Matjes
    Meine Datei besteht aus einem Hauptblatt Namens Inventar wo ich jeweils in der Zelle A7 ein Anfangs-Datum reinschreibe. Dieses Datum wird im gleichen Blatt von der Zelle D9 bis AH9 also 31 Tage als Monat übernommen. In diesem Blatt, Spalten-Zeilen werden mir die Stunden vom jeweiligen passendem Tagesblatt/Rapport übertragen und aufsummiert.

    Das Datum von Inventarblatt Zelle A7 ist mit dem Tagesblatt Zelle F9 verknüpft und ergibt den Monatsersten. Dieses Blatt Monatsersten ist weiter mit den restlichen Tagen bis Monatsende als Einzelblätter ( Gleiche Struktur und Aufbau wie Monatsersten ) verknüpft. ( Inventar hat nicht die gleiche Struktur und Aufbau wie Tagesblätter ) aber das spielt glaube ich keine Rolle.
    Wen ich nun im Blatt Inventar A7 das Datum 01.01.2007 eingebe, geben mir die Zellen D9 bis AH9 die Tage als 1. 2. 3. usw bis 31. aus.
    Die Zelle Inventar A7 wird von der Zelle F9 (Tagesblatt ) übernommen und ist mit TTT, TT. MMM JJ formatiert, ist also der Mo, 01. Jan 07. Das folgende schon vorhandene Tagesblatt übernimmt das Datum vom Monatsersten Zelle F9 und addiert einen Tag dazu ist also der Di, 02. Jan 07. Der 3.1.07 übernimmt die Zelle F9 von 2.1.07 und addiert einen Tag dazu usw.....


    Ich möchte nun das Excel die Tagesblätter nach dem jeweiligen Datum (Zelle F9) benennt, und zwar alle in einem Rutsch wen das Datum im Inventarblatt A7 geändert wird, das heisst den Ganzen Monat 31 Tage / Blätter.

    Hoffe einigermassen gut erklärt zuhaben......

    mfg SCB
     
  4. Hallo SCB,

    kannst Du mir eine Beispiel-Datei schicken. Dann strick ich dir ein Makro.
    So verbal beschrieben, ist es schwierig nachvollziehbar.

    Gruß Matjes :)
     
  5. scb
    scb
    Hallo Matjes

    Ist unterwegs.....
     
  6. aktuelle Lösung:

    Code:
    Sub TagesBlattBltNameAusDatumF9()
     ->Kennzeichen für Tagesblatt: enthält .20
     ->(Es muß also in der Ausgangsposition jedes Tagesblatt mindestens
     -> diesen String im Blatnamen enthalten)
      Const cBLT_TAGESBLATT_KNG As String = .20
     ->Aus F9 des jeweiligen Blattes wird der Soll-Blattname definiert:
     ->dd.mm.yyyy
      Const cRANGE_DATUM = F9
     ->wenn daraus kein vernünftiges Datum erstellbar ist,
     ->wird eine Meldung ausgegeben.
     ->Der Blattname wird mit dem soll-Blattnamen verglichen.
     ->Ist er unterschiedlich wird der Blattname auf Soll-Blattname geändert.
      
      Dim ws As Worksheet
      Dim sBltNameIst As String, sBltNameSoll As String
      Dim pos As Long, x As Long
      
      For x = 1 To ThisWorkbook.Worksheets.Count
        Set ws = ThisWorkbook.Worksheets(x)
        sBltNameIst = ws.Name
        pos = InStr(1, sBltNameIst, cBLT_TAGESBLATT_KNG)
       ->Tagesblatt ?
        If pos > 0 Then
         ->SollNamen erstellen
          On Error Resume Next
          sBltNameSoll = Format(ws.Range(cRANGE_DATUM).Value, dd.mm.yyyy)
          If Err.Number <> 0 Then
            Err.Clear: On Error GoTo 0
            MsgBox _
              Auf Blatt  & sBltNameIst &  ist in  & cRANGE_DATUM & _
               kein vernünftiges Datum enthalten. & vbLf & _
              (Umwandlung)
          Else
            On Error GoTo 0
            If Not IsDate(sBltNameSoll) Then
              MsgBox _
                Auf Blatt  & sBltNameIst &  ist in  & cRANGE_DATUM & _
                 kein vernünftiges Datum enthalten. & vbLf & _
                (Not Isdate())
            Else
             ->Sollnamen setzen, wenn ungleich Istname
              If sBltNameIst <> sBltNameSoll Then
                ws.Name = sBltNameSoll
              End If
            End If
          End If
        End If
      Next
    
    AUFRAEUMEN:
      Set ws = Nothing
    End Sub
    Gruß Matjes :)
     
  7. scb
    scb
    Hallo Matjes

    Was soll man da noch sagen ?????
    Dein Makro ist schlichtweg GENIAL mml :1

    Vielen Dank

    Noch ne kleine Anfrage ?.....Kann od. geht dass überhaupt mittels einem Makro oder so....
    Wen ich die Blattregisterfarben weglassen würde also Neutral, und an dieser Stelle die Registerfarbe die auf ein Wochenenden fallen durch ein Makro Gelb einzufärben. :)

    Besten Dank und allen einen Guten Rutsch ins 07

    Gruss SCB
     
  8. Hallo SCB,

    einmal Korektur von Sub TagesBlattBltNameAusDatumF9:
    vor Neubenennung der Blätter Umbenennung, damit doppelte Blattnamenvergabe vermieden wird.

    Und dann noch ein Makro zur Farbgebung der Blattlaschen der Tagesblätter:
    Sub TagesBlattBltLascheFarbeSetzen()
    '*** sucht nach Tagesblättern mit Blattnamen dd.mm.yyyy zum
    '*** Ausgangsdatum ist das Datum in A7 auf dem Blatt Inventar
    '***
    '*** Blattlaschen-Farben werden gestezt:
    '*** - Wochenenden mit Wochenend-Farbe
    '*** - Farben 1. Woche bis 5. Woche
    '*** - nicht relevant für diesen Monat
    '*** Ausgangsdatum ist das Datum in A7 auf dem Blatt Inventar
    '***

    Der funktioniert aber erst ab Excel 2003 !

    Gruß Matjes :)
    Code:
    Option Explicit
    
    Sub TagesBlattBltNameAusDatumF9()
     ->Kennzeichen für Tagesblatt: enthält .20
     ->(Es muß also in der Ausgangsposition jedes Tagesblatt mindestens
     -> diesen String im Blatnamen enthalten)
      Const cBLT_TAGESBLATT_KNG As String = .20
     ->Aus F9 des jeweiligen Blattes wird der Soll-Blattname definiert:
     ->dd.mm.yyyy
      Const cRANGE_DATUM = F9
     ->wenn daraus kein vernünftiges Datum erstellbar ist,
     ->wird eine Meldung ausgegeben.
     ->Der Blattname wird mit dem soll-Blattnamen verglichen.
     ->Ist er unterschiedlich wird der Blattname auf Soll-Blattname geändert.
      
      Dim ws As Worksheet
      Dim sBltNameIst As String, sBltNameSoll As String
      Dim pos As Long, x As Long
      
     ->
      For x = 1 To ThisWorkbook.Worksheets.Count
        Set ws = ThisWorkbook.Worksheets(x)
        sBltNameIst = ws.Name
        pos = InStr(1, sBltNameIst, cBLT_TAGESBLATT_KNG)
       ->Tagesblatt ? -> dann umbenennen, damit doppelte Namensvergabe vermieden wird
        If pos > 0 Then ws.Name = xxxx & ws.Name
      Next
      
      For x = 1 To ThisWorkbook.Worksheets.Count
        Set ws = ThisWorkbook.Worksheets(x)
        sBltNameIst = ws.Name
        pos = InStr(1, sBltNameIst, cBLT_TAGESBLATT_KNG)
       ->Tagesblatt ?
        If pos > 0 Then
         ->SollNamen erstellen
          On Error Resume Next
          sBltNameSoll = Format(ws.Range(cRANGE_DATUM).Value, dd.mm.yyyy)
          If Err.Number <> 0 Then
            Err.Clear: On Error GoTo 0
            MsgBox _
              Auf Blatt  & sBltNameIst &  ist in  & cRANGE_DATUM & _
               kein vernünftiges Datum enthalten. & vbLf & _
              (Umwandlung)
          Else
            On Error GoTo 0
            If Not IsDate(sBltNameSoll) Then
              MsgBox _
                Auf Blatt  & sBltNameIst &  ist in  & cRANGE_DATUM & _
                 kein vernünftiges Datum enthalten. & vbLf & _
                (Not Isdate())
            Else
             ->Sollnamen setzen, wenn ungleich Istname
              If sBltNameIst <> sBltNameSoll Then
                ws.Name = sBltNameSoll
              End If
            End If
          End If
        End If
      Next
        
    AUFRAEUMEN:
      Set ws = Nothing
    End Sub
    
    
    
    '**************************************************************************
    Sub TagesBlattBltLascheFarbeSetzen()
    '*** sucht nach Tagesblättern mit Blattnamen dd.mm.yyyy zum
    '*** Ausgangsdatum ist das Datum in A7 auf dem Blatt Inventar
    '***
    '*** Blattlaschen-Farben werden gestezt:
    '*** - Wochenenden mit Wochenend-Farbe
    '*** - Farben 1. Woche bis 5. Woche
    '*** - nicht relevant für diesen Monat
    '*** Ausgangsdatum ist das Datum in A7 auf dem Blatt Inventar
    '***
    
    '!!!  ab Excel 2003 !!!
    
     ->Farbindexe
      Const cFARBE_WOCHE1 = 3           ->rot
      Const cFARBE_WOCHE2 = 4           ->grün
      Const cFARBE_WOCHE3 = 5           ->blau
      Const cFARBE_WOCHE4 = 39           'lila
      Const cFARBE_WOCHE5 = 35           'türkis
      Const cFARBE_NICHTRELEVANT = 15   ->hellgrau
      Const cFARBE_WOCHENENDE = 6       ->gelb
      
      Const cBLTNAME_INVENTAR = Inventar
      Const cBLTNAME_INVENTAR_RANGEDATUM = A7
      
      
      Dim wb As Workbook, ws As Worksheet
      Dim lWoche As Long, lMonat As Long, lJahr As Long, x As Long
      Dim dDateAusgang As Date, dDateTagesBlatt As Date
      Dim sBlattname As String
      
      
     ->Datum as Blatt Inventar
      Set wb = ThisWorkbook
      On Error Resume Next
      Set ws = wb.Worksheets(cBLTNAME_INVENTAR)
      Err.Clear: On Error GoTo 0
      If ws Is Nothing Then
        MsgBox Blatt  & cBLTNAME_INVENTAR &  nicht vorhanden.
        GoTo AUFRAEUMEN
      End If
      If Not IsDate(ws.Range(cBLTNAME_INVENTAR_RANGEDATUM).Value) Then
        MsgBox Auf Blatt  & cBLTNAME_INVENTAR &  in Zelle & cBLTNAME_INVENTAR_RANGEDATUM &  ist kein vernünftiges Datum
        GoTo AUFRAEUMEN
      End If
      dDateAusgang = ws.Range(cBLTNAME_INVENTAR_RANGEDATUM).Value
      lMonat = Month(dDateAusgang)
      lJahr = Year(dDateAusgang)
    
      lWoche = 1
      dDateTagesBlatt = 01. & lMonat & . & lJahr
      For x = 1 To 31
        sBlattname = Format(dDateTagesBlatt, dd.mm.yyyy)
        On Error Resume Next
        Set ws = Nothing
        Set ws = wb.Worksheets(sBlattname)
        Err.Clear: On Error GoTo 0
        If ws Is Nothing Then
          MsgBox Blatt  & sBlattname &  nicht vorhanden.
        Else
          If Month(dDateAusgang) = Month(dDateTagesBlatt) Then
            If Weekday(dDateTagesBlatt) <> vbSunday And _
               Weekday(dDateTagesBlatt) <> vbSaturday Then
              Select Case lWoche
                Case 1: ws.Tab.ColorIndex = cFARBE_WOCHE1
                Case 2: ws.Tab.ColorIndex = cFARBE_WOCHE2
                Case 3: ws.Tab.ColorIndex = cFARBE_WOCHE3
                Case 4: ws.Tab.ColorIndex = cFARBE_WOCHE4
                Case 5: ws.Tab.ColorIndex = cFARBE_WOCHE5
              End Select
              If Weekday(dDateTagesBlatt) = vbFriday Then
               ->Wochenfarbe weiterschalten
                lWoche = lWoche + 1
              End If
            Else
             ->Wochenende
              ws.Tab.ColorIndex = cFARBE_WOCHENENDE
            End If
          Else
           ->nicht im relevanten Monat -> nicht relevant
            ws.Tab.ColorIndex = cFARBE_NICHTRELEVANT
          End If
        End If
        
       ->Datum nächster Tag
        dDateTagesBlatt = DateAdd(d, 1, dDateTagesBlatt)
      Next
    
    AUFRAEUMEN:
      Set wb = Nothing: Set ws = Nothing
    End Sub
     
  9. scb
    scb
    Hallo Matjes

    Unglaublich.... mml......sieht alles wie ein genialer Geniestreich aus :1

    Danke Dir ganz herzlich Matjes

    Grüsse
     
Die Seite wird geladen...

Blattname - Ähnliche Themen

Forum Datum
Blattname = Zelle Microsoft Office Suite 12. Mai 2009
Arbeitsblattname mitdrucken Windows XP Forum 19. Feb. 2007
tabellenblattname in formel einbauen Microsoft Office Suite 2. Okt. 2006