Wer schon mal einen Kaugummi aus seinen Kleidern entfernen musste, hat eine ungefähre Vorstellung davon wie ist, wenn ich aufstehe.

Wie gemein! Eine Kopfzeile in einem Tabellenblatt in Excel:

Ich fülle diese Kopfzeile in Excel mit VBA:

Dim strTitle As String
Dim strLocation As String
Dim strTarget As String
Dim strType As String

' -- die Variablen werden gefüllt:
strTitle = "Renes Titel"
strLocation = "Renes Ort"
strTarget = "Renes Ziel"
strType = "Renes Typ"

With ActiveSheet.PageSetup
' -- schreibe nur rein, falls der Text noch nicht drinsteht.
    If InStr(1, .LeftHeader, "Title" & strTitle) = 0 Then
        .LeftHeader = Replace(.LeftHeader, "Title", "Title " & strTitle)
    End If
    If InStr(1, .LeftHeader, "Location" & strLocation) = 0 Then
        .LeftHeader = Replace(.LeftHeader, "Location", "Location " & strLocation)
    End If
    If InStr(1, .LeftHeader, "Target group" & strTarget) = 0 Then
        .LeftHeader = Replace(.LeftHeader, "Target group", "Target group " & strTarget)
    End If
    If InStr(1, .LeftHeader, "Document type" & strType) = 0 Then
        .LeftHeader = Replace(.LeftHeader, "Document type", "Document type " & strType)
    End If
End With

Klappt:

Ich fülle sie ein zweites Mal. Klappt. Ein drittes Mal. Fehler:

Die LeftHeader-Eigenschaft des PageSetup-Objektes kann nicht festgelegt werden.

Hä?

Ich „schaue nach“, was in der Kopfzeile steht:

MsgBox ActiveSheet.PageSetup.LeftHeader

Stimmt – ich erinnere mich – die Formatierungsanweisungen stehen vor den Texten. Abgesehen davon, dass ich nicht mehrfach die Texte in die Kopfzeile schreiben darf, muss ich die Kopfzeile anders erzeugen:

ActiveSheet.PageSetup.LeftHeader = _
„&““Arial,Fett““&12“ & „Title “ & strTitle & Chr(10) & _
„&10“ & „Document type “ & strType & Chr(10) & _
„Target group “ & strTarget & Chr(10) & _
„Location “ & strLocation

Und DAS klappt:

Böse, böse, böse! Böses Excel!

Ich erinnere mich – ich habe vor einigen Jahren schon einmal über diese merkwürdigen Kopf- und Fußzeilen geschrieben:

Wer mich entführt, gibt mich spätestens morgen zurück!

In Excel kann man die Arbeitsmappe schützen. Damit kann man keine Tabellenblätter einfügen, löschen, umbenennen, …

Was passiert allerdings, wenn man diese Befehle in VBA verwendet. Also:

ThisWorkbook.Worksheets.Add
ThisWorkbook.Worksheets(1).Name = "fehlgeschlagen"
ThisWorkbook.Worksheets(1).Visible = xlSheetHidden
ThisWorkbook.Worksheets(1).Delete
ThisWorkbook.Worksheets(1).Tab.Color = 255
ThisWorkbook.Worksheets(1).Copy Before:=xlDatei.Worksheets(1)

Man erhält Fehlermeldungen:

Ein bisschen mehr Mühe hätten sie sich schon bei den Fehlertexten machen können. Lediglich der Kopieren wird mit einem Verweis auf den Schutz der Arbeitsmappe quittiert …