Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Grafik in der Kopfzeile - OHNE PFADANGABE

Betrifft: Grafik in der Kopfzeile - OHNE PFADANGABE von: Roland Vogler
Geschrieben am: 02.07.2008 13:50:17

Mit folgendem Code kann ich eine Grafik in die Kopfzeile einfügen:

Sub LogoInKopfzeileEinfügen()
   ActiveSheet.PageSetup.RightHeaderPicture.Filename = "M:\Logo.tif"
   ActiveSheet.PageSetup.RightHeader = "&G"
End Sub


Mein Problem ist:
Die Excel-Datei soll von einem Webserver geladen werden. D.h. ich möchte das Logo als Teil meiner Excel-Tabelle laden und nicht aus einem Verzeichnis auslesen.

Fragen:
Ist es möglich, ein Logo welches ich als Objekt in einer (verborgenen) Excel-Tabelle bereitstelle in die Kopfzeile einzufügen. Z.B. indem ich das Logo zuerst aus meiner Exce-Mappe exportiere um es dann wieder in die Kopfzeile einzulesen?
- oder -
Kann ich das PageSetup-Objekt oder das Logo aus der Kopfzeile eines andern Excel-Blattes in mein neues Blatt kopieren?

Was nicht geht:
Die Report-Seiten werden in einem neu erstellten Arbeitsblatt aufgebaut. Deshalb kann ich das Logo nicht vorher in der Kopfzeile abspeichern.
Einzelne Seiten werden auf Seitenbreite skaliert. Das Logo soll auf allen Seiten gleich gross sein. Deshalb kann es nicht in eine Wiederholungszeile eingefügt werden.

Bin für alle Tipps dankbar.
Roland

  

Betrifft: AW: Grafik in der Kopfzeile - OHNE PFADANGABE von: fcs
Geschrieben am: 03.07.2008 13:21:55

Hallo Roland,

lege in deiner Datei eine leere Muster-Tabelle an in der das Logo in der gewünschten Form vorhanden ist. ggf. kannst du dem Muster auch schon ein paar Grundeinstellungen (Seite einrichten, Kopf- Fusszeile etc) verpassen, die dann nicht vom Makro erstellt werden müssen.


'Die neue Arbeitsmappe wird jetzt nicht mehr mit
Set wbNeu = Workbooks.Add(Template:=xlWBATWorksheet)
'angelegt mit
With ThisWorkbook.Worksheets("Muster")
  .Visible = xlSheetVisible
  .Copy
  Set wbNeu = ActiveWorkbook
  .Visible = xlSheetHidden
End With


Gruß
Franz


  

Betrifft: AW: Grafik in der Kopfzeile - OHNE PFADANGABE von: Roland Vogler
Geschrieben am: 03.07.2008 18:15:52

Hallo Franz

Danke für deine Antwort. Diese Idee hatte ich auch schon. Funktioniert theoretisch auch. In der Praxis gibt es aber Probleme wenn du eine Tabelle zu oft kopierst. Sobald eine Tabelle einen benannten Bereich (d.h. einen Namen) enthält stürzt Excel nach dem 255 Kopiervorgang ab.

Definier in einem Blatt einen Namen. Ergänze deinen Code so, dass das Blatt unmittelbar nach dem Kopieren wieder gelöscht wird und pack das ganze in eine Schleife. Das Ding stürzt 100%-ig ab nach dem 255-igsten Durchlauf ab.

Meine Tabelle ist etwas komplexer. Hier passiert der Absturz bereits nach der 45-igsten Kopie.

Ist so - muss man damit leben. Details dazu findest du in folgendem KB-Artikel: http://support.microsoft.com/kb/210684/en-us

Gruss Roland


  

Betrifft: AW: Grafik in der Kopfzeile - OHNE PFADANGABE von: fcs
Geschrieben am: 04.07.2008 10:37:22

Hallo Roland,

wenn das Vielfach-Kopieren des gleichen Blattes innerhalb der selben Arbeitsmappe so wichtig/kritisch ist, dann muss du die Arbeitsmappe bei Auftreten des Fehlers speichern, schließen und wieder öffnen. Dann klappt es.

Alternativ kann man das immer Musterblatt aus der Masterdatei in die neue Arbeitsmappe kopieren.

Gruß
Franz

Sub BlattCopy01()
  Dim wbNeu As Workbook, i As Integer
  'Die neue Arbeitsmappe anlegen
  Set wbNeu = Workbooks.Add(Template:=xlWBATWorksheet)
  'Musterblatt vielfach in die neue Arbeitsmappe kopieren
  With ThisWorkbook.Worksheets("Muster")
    .Visible = xlSheetVisible
    For i = 1 To 275
      .Copy after:=wbNeu.Sheets(wbNeu.Sheets.Count)
      Set wksNeu = ActiveSheet
      wksNeu.Name = "Tab" & Format(i, "000")
    Next
    .Visible = xlSheetHidden
  End With
End Sub

Sub BlattCopy02()
  Dim wbNeu As Workbook, i As Integer, wksNeu, strNeu As String, Auswahl As Variant
  'neue Arbeitsmappe erstellen
  On Error GoTo Fehler
  ThisWorkbook.Worksheets("Muster").Copy
  Set wbNeu = ActiveWorkbook
  'Blatt Muster innerhalb der neuen Datei kopieren
  For i = 1 To 275
    wbNeu.Worksheets("Muster").Copy after:=wbNeu.Sheets(wbNeu.Sheets.Count)
    Set wksNeu = ActiveSheet
    Application.DisplayAlerts = False
    wksNeu.Delete
    Application.DisplayAlerts = True
  Next
Fehler:
  If Err.Number <> 0 Then
    If Err.Number = 1004 Then
Speichern:
      Auswahl = Application.Dialogs(xlDialogSaveAs).Show
      If Auswahl = False Then
        If MsgBox("Ohne speichern der Datei wird das Makro jetzt abgebrochen! Doch speichenr?",  _
_
            vbYesNo) = vbNo Then
        Else
          GoTo Speichern
        End If
      End If
      strNeu = wbNeu.FullName
      wbNeu.Close
      Set wbNeu = Workbooks.Open(Filename:=strNeu)
      Resume
    Else
      MsgBox "Fehler: " & Err.Number & vbLf & Err.Description
    End If
  End If
End Sub




  

Betrifft: AW: Grafik in der Kopfzeile - OHNE PFADANGABE von: Roland Vogler
Geschrieben am: 04.07.2008 11:48:59

Hallo Franz

Danke für deine Antwort. Zwei schöne Lösungen – welche ich mir merken werde. Hätte ich das alles schon am Anfang gewusst sähe meine Lösung heute ganz anders aus.

Im konkreten Fall muss ich nicht wirklich ein Blatt so oft kopieren. Mit meiner Applikation berechne ich Anlagevorschläge, wobei einzelne Blätter (maximal 6 mal) dupliziert werden. Dennoch ist es zurzeit so, dass beim Berechnen des 8-ten Anlagevorschlags der Absturz bei Kopieren eines Blattes auftritt. Ich werden einen Zähler einbauen, in dem ich zähle wie viele Anlagevorschläge berechnet sind und werde den Benutzer nach dem 7-ten auffordern, die Anwendung manuell zu schliessen und wieder zu öffnen. Dies ist zulässig, weil in der Regel nicht so viele Anlagevorschläge hintereinander erstellt werden.

Ich bin nun vorsichtig und vermeide das Kopieren von Blättern um die Zahl von 8 hintereinander berechenbaren Anlagevorschlägen nicht noch weiter nach unten zu treiben.

Deshalb habt ich zusammen mit einem Arbeitskollegen für das Logo-Problem inzwischen folgenden (zugegeben exotischen) Workaround gesucht und gefunden: Ich exportiere das Logo einmalig ins Temp-Verzeichnis und lade es bei Bedarf von dort in die Kopfzeile. Da man ein Grafikobjekt nicht exportieren kann "verpacke" ich es in einem Chart – und ein Chart kann als GIF-Datei exportiert werden.

Gruss Roland


 

Beiträge aus den Excel-Beispielen zum Thema "Grafik in der Kopfzeile - OHNE PFADANGABE"