Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

BeforePrint in Klassenmodul in Add-In

BeforePrint in Klassenmodul in Add-In
01.07.2008 12:52:00
Danny
In jeder geöffneten Excel-Mappe möchte ich vor jedem Drucken ein Makro, das die Fußzeile bearbeitet, ablaufen lassen. Dazu habe ich in einem Klassenmodul, das BeforePrint-Ereignis verwendet.
Während der Verwendung verselbstständigt sich Excel und es treten äußerst seltsame Ergebnisse auf.
Beim ersten Schleifendurchlauf (1. Tabellenblatt) schreibt das Makro noch die richtigen Werte in die Fußzeile. Ab dem zweiten Durchlauf ist alles durcheinander.
Vielleicht versteht ein Makro-Experte warum Excel im nachfolgenden Code falsche Ergebnisse liefert.
Schon im Voraus vielen Dank für die Antworten.
Hier noch der Code aus dem Klassenmodul:
Option Explicit
Private Fusszeilelinks As String, Fusszeilemitte As String, Fusszeilerechts As String
Private i As Integer, n, j As Integer, Länge As Integer
Private Mappe As String
Public WithEvents App As Application

Private Sub App_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
Application.ScreenUpdating = False
Dim Pfad As String, PfadUNC As String
Dim TextFußzeile As String, Fusszeilemitte As String, fußzeilerechts As String
Dim gefunden  As Boolean
Dim k As Integer
'Dim Fusszeilelinks As String
'Variablen Kürzel
Dim laenge As Integer
Dim FußzeileRest As String
Dim Anzahl As Byte
Mappe = ActiveWorkbook.Name
Pfad = Workbooks(Mappe).Path
PfadUNC = PfadNachUnc(Pfad)
i = Workbooks(Mappe).Sheets.Count
For n = 1 To i
TextFußzeile = Workbooks(Mappe).Sheets(n).PageSetup.CenterFooter
Fusszeilelinks = Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter
Select Case TextFußzeile
Case ""
'Prüfung, ob die Datei gespeichert ist
If Pfad = "" _
Then
'Datei nicht gespeichert
'Call Kürzel
Fusszeilelinks = Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1, laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & "6" &   _
_
_
_
_
_
FußzeileRest
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j + 2,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j) & Fuß _
_
_
_
_
_
zeileRest
Exit For
Else
End If
Next
Else
End If
Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter = Fusszeilelinks
'End Kürzel
Pfad = "\"
Workbooks(Mappe).Sheets(n).PageSetup.CenterFooter = "&""Arial""&6" &  _
Pfad & "\" & "&F.&A"
Workbooks(Mappe).Sheets(n).PageSetup.RightFooter = "&""Arial""&6" & " _
Seite" & "&P/&N"
Pfad = ""
Else
'Datei gespeichert'
'Call Kürzel
Fusszeilelinks = Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1, laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & "6" &   _
_
_
_
_
_
FußzeileRest
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j + 2,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j) & Fuß _
_
_
_
_
_
zeileRest
Exit For
Else
End If
Next
Else
End If
Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter = Fusszeilelinks
'Ende Kürzel
Workbooks(Mappe).Sheets(n).PageSetup.CenterFooter = "&""Arial""&6" &  _
PfadUNC & "\" & "&F.&A"
Workbooks(Mappe).Sheets(n).PageSetup.RightFooter = "&""Arial""&6" & " _
Seite" & "&P/&N"
End If
Case Else
'Prüfung, ob Fußzeile einen Pfad enthält
gefunden = False
For i = 1 To Len(TextFußzeile)
If Mid(TextFußzeile, i, 1) = "\" _
Then
gefunden = True
Exit For
End If
Next
If gefunden = True _
Then
'Datei enthält Pfad, ggf. Pfad-Aktualiesierung
'Call Kürzel
Fusszeilelinks = Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1, laenge - j)
'test
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & Mid(""" _
_
_
_
_
_
", 1, 2) & Mid("""", 1, 1) & "Arial" & Mid("""", 1, 2) & Mid("""", 1, 1) & "&6" & FußzeileRest
Fusszeilemitte = "&""Arial""&6" & PfadUNC & "\" & "&F.&  _
_
_
_
_
_
A"
Fusszeilerechts = "&""Arial""&6" & "Seite" & "&P/&N"
'&""Arial""&6" & Abteilung & " " & "&D &T
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j + 2,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j) & Fuß _
_
_
_
_
_
zeileRest
Exit For
Else
End If
Next
Else
End If
‘Hier treten meistens die Probleme auf.
‘Die Variablenwerte stimmen, Excel interpretiert sie selbstständig  _
_
b>
Workbooks(Mappe).Sheets(n).PageSetup.LeftFooter = Fusszeilelinks
'Ende Kürzel
Workbooks(Mappe).Sheets(n).PageSetup.CenterFooter = Fusszeilemitte
Workbooks(Mappe).Sheets(n).PageSetup.RightFooter = Fusszeilerechts
Else
End If
End Select
Next
i = 0
n = Workbooks(Mappe).Charts.Count
If n > 0 _
Then
For i = 1 To n
TextFußzeile = Workbooks(Mappe).Charts(i).PageSetup.CenterFooter
Select Case TextFußzeile
Case ""
'Prüfung, ob die Datei gespeichert ist
If Pfad = "" _
Then
'Datei nicht gespeichert
'Call Kürzel_Diag
Fusszeilelinks = Workbooks(Mappe).Charts(n).PageSetup. _
LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & _
_
_
_
_
_
"6" & FußzeileRest
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j +   _
_
_
_
_
_
2, laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1,  _
_
_
_
_
_
j) & FußzeileRest
Exit For
Else
End If
Next
Else
End If
Workbooks(Mappe).Charts(n).PageSetup.LeftFooter =  _
Fusszeilelinks
'Ende Kürzel Diag
Pfad = "\"
Workbooks(Mappe).Charts(i).PageSetup.CenterFooter = "&""Arial""& _
_
_
_
_
_
6" & Pfad & "\" & "&F.&A"
Workbooks(Mappe).Charts(i).PageSetup.RightFooter = "&""Arial""&  _
_
_
_
_
_
6" & "Seite" & "&P/&N"
Pfad = ""
Else
'Datei gespeichert'
'Call Kürzel_Diag
Fusszeilelinks = Workbooks(Mappe).Charts(n).PageSetup. _
LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & _
_
_
_
_
_
"6" & FußzeileRest
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j +   _
_
_
_
_
_
2, laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1,  _
_
_
_
_
_
j) & FußzeileRest
Exit For
Else
End If
Next
Else
End If
Workbooks(Mappe).Charts(n).PageSetup.LeftFooter =  _
Fusszeilelinks
'Ende Kürzel Diag
Workbooks(Mappe).Charts(i).PageSetup.CenterFooter = "&""Arial""& _
_
_
_
_
_
6" & PfadUNC & "\" & "&F.&A"
Workbooks(Mappe).Charts(i).PageSetup.RightFooter = "&""Arial""&  _
_
_
_
_
_
6" & "Seite" & "&P/&N"
End If
Case Else
'Prüfung, ob Fußzeile einen Pfad enthält
gefunden = False
For k = 1 To Len(TextFußzeile)
If Mid(TextFußzeile, k, 1) = "\" _
Then
gefunden = True
Exit For
End If
Next
If gefunden = True _
Then
'Datei enthält Pfad, ggf. Pfad-Aktualiesierung
'Call Kürzel_Diag
Fusszeilelinks = Workbooks(Mappe).Charts(n).PageSetup. _
LeftFooter
laenge = Len(Fusszeilelinks)
Anzahl = 0
For j = 1 To laenge
If IsNumeric(Mid(Fusszeilelinks, j, 1)) = True _
Then
Anzahl = Anzahl + 1
FußzeileRest = Mid(Fusszeilelinks, j + 1,  _
laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1, j - 1) & _
_
_
_
_
_
"6" & FußzeileRest
Else
End If
Next
If Anzahl > 1 _
Then
For j = 1 To laenge
If Mid(Fusszeilelinks, j, 2) = 66 _
Then
FußzeileRest = Mid(Fusszeilelinks, j +   _
_
_
_
_
_
2, laenge - j)
Fusszeilelinks = Mid(Fusszeilelinks, 1,  _
_
_
_
_
_
j) & FußzeileRest
Exit For
Else
End If
Next
Else
End If
Workbooks(Mappe).Charts(n).PageSetup.LeftFooter =  _
Fusszeilelinks
'Ende Kürzel Diag
Workbooks(Mappe).Charts(i).PageSetup.CenterFooter = "&""Arial""& _
_
_
_
_
_
6" & PfadUNC & "\" & "&F.&A"
Workbooks(Mappe).Charts(i).PageSetup.RightFooter = "&""Arial""&  _
_
_
_
_
_
6" & "Seite" & "&P/&N"
Else
End If
End Select
Next
Else
End If
Application.ScreenUpdating = True
End Sub


2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforePrint in Klassenmodul in Add-In
01.07.2008 16:02:21
Nepumuk
Hallo Danny,
ich hab mir dein Makro mal in ein Klassenmodul kopiert. Nachdem ich dann auch keinen Überblick, aber 10 rote Zeilen hatte, hab ich die Mappe ohne speichern zugemacht.
Also bring deine Prozedur erst mal in ein Format, dass ich es ohne Nacharbeit in ein Modul kopieren kann, oder lade eine Mappe mit der Klasse hoch.
Was sollen eigentlich die massenhaften Zeilenumbrüche in Leerzeilen bewirken außer dass kein Schwein den Code mehr richtig lesen kann? Ein Verschlüsselungsverfahren? Das ist dann aber noch nicht ganz ausgereift. Oder wirst du pro verbrauchter Zeile im Editor bezahlt?
Gruß
Nepumuk

Anzeige
AW: BeforePrint in Klassenmodul in Add-In
02.07.2008 15:49:00
Danny
Hallo Nepumuk,
den Code hatte ich leider aus Word kopiert. Daher die ganzen unnötigen Zeilen und Zeilenumbrüche.
Sorry.
Zum besseren Testen sind jetzt auch die Dateien verfügbar:
https://www.herber.de/bbs/user/53530.xls
https://www.herber.de/bbs/user/53531.xla
Der Fehler kann wie folgt reproduziert werden:
- Add-In installieren
- In der Datei Bericht aus Blatt KST auswählen.
- Ein Häckchen in ein beliebiges Kästchen setzen.
- Auf Button Einzeldruck clicken.
Gruß
Danny
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige