am Ende jeder Seite möchte ich eine Zwischensumme angezeigt bekommen
und diese soll auf der nächsten Seite als Übertrag erscheinen.
Gibt es dafür ein Makro?
Gruss Silvia
das ist nicht einfach. Soweit es sich lediglich um eine Spalte mit Zahlen
handelt, ist das noch einfach realisierbar. Wenn aber Deine Tabelle eine
dynamische Struktur hat (sprich: eine bis beliebig viele Vorspalten, die
auch übertragen werden müssen, oder gar ein ganz anderes Konzept), wird es
schwieriger, eine universelle Makro-Unterstützung dafür zu bieten.
Ich mache mir schon seit längerer Zeit Gedanken über so etwas und stoße
dabei gedanklich immer wieder auf neue Eventualitäten, die berücksichtigt
werden müssen. Das betrifft nicht nur die Berechnung an sich, sondern auch
Formatierungen, Papierformat, Eigenarten von Druckern etc.
Solltest Du ein ganz einfaches Makro für eine einspaltige Zahlenkolonne
benötigen, kann ich Dir das gern liefern. Gewisse Mindestangaben solltest Du
geben, z.B. Unterstreichungsformate etc. Am besten wäre eine manuell
angefertigte Beispielmappe per eMail.
--
MfG,
Andreas Knopke
eMail: Andreas...@inka.de
Silvia Hütte-Spürk schrieb in Nachricht <371ED21F...@uni-bonn.de>...
ich glaube Hans W. Herber hat ein Beispiel dafür auf seinem Server
liegen. Frag' mich aber nicht wo genau. Also suchen...
Für den Anfang hier die Adresse seines Servers ;-)
http://www.herber.de
Peter
Anbei ein Makro für Excel 5.0 in Deutsch. Wahrscheinlich ist dies nicht so
eine gute Lösung, aber sie funktioniert jedenfalls. Ich habe dieses damals
als allererstes Makro programmiert, als ich mich mit Excel 5.0 befassen
mußte.
Du mußt die einzelnen Bereiche in den Variablen festlegen (nach wievielen
Zeilen auf der ersten Seite gebrochen werden soll und nach wievielen auf
der folge Seite, und welche Spalten aufaddiert werden sollen). Das Makro
ist ansonsten ziemlich ausführlich beschrieben.
Ich würde mich freuen, wenn andere dieses Makro noch verbessern könnten, da
dies nur eine Lösung darstellt, und dann hier ablegen könnten. Schließlich
sollen alle etwas davon haben...
Gruß,
Joachim
---------------------------
' Definieren von Visual Basic-Optionen
Option Explizit
' Definieren der Variablen
Öffentlich ZeileListeEnde Als Ganz
Öffentlich ZeilenNr Als Ganz
Dim Zähler Als Ganz
Dim Restzeilen Als Ganz
Dim UntererBereich Als Ganz
Dim ObererBereich Als Ganz
Dim Summenbezug Als Variant
Dim Text Als Variant
' Variablen für die Schaltflächen
Dim Stil1 Als Variant
Dim Mldg1 Als Variant
Dim Titel1 Als Variant
Dim Schaltfläche1 Als Variant
' Definieren der Konstanten
Öffentlich Konst ZeileListeAnfang = 23
Öffentlich Konst ZeilenSeite1 = 45
Öffentlich Konst ZeilenFolgeseiten = 38
Öffentlich Konst SpaltenNr1 = 13
Öffentlich Konst SpaltenNr2 = 21
'
' Das Makro ist für die Erstellung der Übertragszeile verantwortlich,
' bevor der Anwender das Drucken der Liste ausführen kann.
'
'
' H a u p t p r o g r a m m
Sub Drucken()
Meldung1
Berechnen
SchutzAufheben
ZeilennummerTabellenEnde
Seitenumbruch
AktivesBlatt.Seitenansicht
ZeilenLöschen
Endsumme
ZelleListe(1; 1).Auswählen
Berechnen
SchutzSetzen
Ende Sub
' Sicherheitsabfrage, ob der Benutzer wirklich drucken möchte oder nicht.
Sub Meldung1()
' Aussehen der Meldung definieren
Mldg1 = "Sind Sie sicher, daß Sie drucken möchten ?" ' Meldungstext
Stil1 = vbOKAbbrechen + vbFrage ' Aussehen der
Schaltfläche definieren
Titel1 = "Drucken" ' Titel der
Meldung
' Ausgeben eines Hinweistones
SignalTon ' Aufrufen des
Modules SignalTon
' Meldung anzeigen
Schaltfläche1 = MeldungsDlg(Mldg1; Stil1; Titel1)
' Abfrage der Auswahl des Benutzers
Wenn Schaltfläche1 = vbAbbrechen Dann ' Benutzer hat
Abbrechen gewählt
Ende
Ende Wenn
Ende Sub
' Erzeugung eines Hinweistones
Sub SignalTon()
Für Zähler = 1 Bis 10 ' Länge des Tones
Signal ' Befehl für die Erzeugung des Tones
Nächste Zähler
Ende Sub
' Hierdurch wird der Schutz aufgeboben
Sub SchutzAufheben()
AktivesBlatt.SchutzAufheben
Ende Sub
' Hierdurch wird ein Schutz gesetzt
Sub SchutzSetzen()
AktivesBlatt.Schützen ZeichnungsobjektListe:=Wahr; Inhalt:=Wahr; _
SzenarioListe:=Wahr
Ende Sub
' Berechnung der Zeilenanzahl vom Anfang bis zum Ende der Liste
Sub ZeilennummerTabellenEnde()
' Vom Anfang der Liste wird in die letzte Zeile gesprungen
' und diese Zeile ausgewählt.
AnfangDerTabelle ' Aufruf des Unterprogrammes
EndeDerTabelle ' Aufruf des Unterprogrammes
' Der Variable wird die Zeilennummer zugeordnet
ZeileListeEnde = Anwendung.AktiveZelle.Zeile
Ende Sub
' Springen an den Anfang der Tabelle
Sub AnfangDerTabelle()
ZeileListe(ZeileListeAnfang).Auswählen ' Zeile des Tabellenbeginns
auswählen
AktiveZelle.Auswählen
Ende Sub
' Springen an das Ende der Tabelle
Sub EndeDerTabelle()
Auswahl.Ende(xlNachUnten).Auswählen ' Letzte Zeile der Tabelle
auswählen
AktiveZelle.Auswählen
Ende Sub
' Festlegung des Seitenumbruches innerhalb der Tabelle beim Ausdruck.
' Bei der Berechnung wird berücksichtigt, daß die erste Seite weniger
' Zeile enthält als die Folgeseite.
Sub Seitenumbruch()
Text = "Übertrag"
Wenn ZeileListeEnde <= ZeilenSeite1 Dann
Endsumme ' Aufruf des Unterprogrammes
Sonst ' Es ist mehr als eine Seite
vorhanden
ErsteSeiteÜbertrag ' Aufruf des Unterprogrammes
FolgeSeitenÜbertrag ' Aufruf des Unterprogrammes
Ende Wenn
Ende Sub
' Seitenumbruch für die 1. Seite
Sub ErsteSeiteÜbertrag()
ZeilenNr = ZeilenSeite1 + 1
Übertrag ' Aufruf des
Unterprogrammes
Ende Sub
' Seitenumbruch für die Folgeseiten
Sub FolgeSeitenÜbertrag()
Durchlaufe Solange ZeilenNr < ZeileListeEnde
Wenn Restzeilen <= ZeilenFolgeseiten - 3 Dann
Endsumme ' Aufruf des Unterprogrammes
Sonst
' Berechnung der Zeilennummer für das Einfügen der 2 Zeilen
ZeilenNr = ZeilenNr + ZeilenFolgeseiten - 1
Übertrag ' Aufruf des Unterprogrammes
Ende Wenn
Schleife
Ende Sub
' Programm Übertrag herstellen
Sub Übertrag()
ZeilenEinfügen
' Erhöhung der Zeilennummer für das Tabellenende um 2,
' da 2 Zeilen eingefügt worden sind.
ZeileListeEnde = ZeileListeEnde + 2
' Berechnung der Anzahl der Restzeilen bis zum Tabellenende
Restzeilen = ZeileListeEnde - ZeilenNr - 1
ÜbertragText
Aufaddition
Kopieren1
Kopieren2
Ende Sub
' Programm Endsumme herstellen
Sub Endsumme()
EndsummeText
Aufaddition
Kopieren1
Kopieren2
ZeilenNr = ZeileListeEnde
Ende Sub
' Fügt 2 Leerzeilen an den gewünschten Stellen innerhalb der Tabelle ein.
Sub ZeilenEinfügen()
' Berechnete Zeilennummern markieren
Bereich(ZelleListe(ZeilenNr; 1); ZelleListe(ZeilenNr + 1;
1)).GanzeZeile.Auswählen
' 2 Leerzeilen einfügen und den Bezug der Berechnung aufrecht erhalten
Auswahl.Einsetzen Verschieben:=xlNachUnten
Auswahl.AllesLöschen ' Inhalt komplett löschen
Auswahl.Zeilenhöhe = 13,2
Ende Sub
' Gestaltung des Layouts für den Übertrag
Sub ÜbertragText()
' Position auswählen, in der der Text (Übertrag) stehen soll
ZelleListe(ZeilenNr + 1; SpaltenNr1 - 2).Auswählen
' Aktuelle Position mit dem Text füllen
AktiveZelle.Z1S1Formel = Text ' Zelle mit Inhalt von Text füllen
' Bereich markieren, der umrandet werden soll
Bereich(ZelleListe(ZeilenNr + 1; SpaltenNr1 - 2); _
ZelleListe(ZeilenNr + 1; SpaltenNr1 - 1)).Auswählen
Rahmenbilden ' Aufrufen des Unterprogrammes
' Bereich markieren, der durch einen Rahmen umrandet werden soll
ZelleListe(ZeilenNr + 1; SpaltenNr1).Auswählen
Rahmenbilden ' Aufrufen des Unterprogrammes Rahmenbildung
Ende Sub
' Gestaltung des Layouts für die Endsumme
Sub EndsummeText()
Text = "Endsumme"
' Position auswählen, in der der Text (Endsumme) stehen soll
ZelleListe(ZeileListeEnde + 2; SpaltenNr1 - 2).Auswählen
' Aktuelle Position mit dem Inhalt von Text füllen
AktiveZelle.Z1S1Formel = Text
' Bereich markieren, der umrandet werden soll
Bereich(ZelleListe(ZeileListeEnde + 2; SpaltenNr1 - 2); _
ZelleListe(ZeileListeEnde + 2; SpaltenNr1 - 1)).Auswählen
Rahmenbilden ' Aufrufen des Unterprogrammes
Auswahl.Schriftart.Fett = Wahr
' Bereich markieren, der durch einen Rahmen umrandet werden soll
ZelleListe(ZeileListeEnde + 2; SpaltenNr1).Auswählen
Rahmenbilden ' Aufrufen des Unterprogrammes Rahmenbildung
Auswahl.Schriftart.Fett = Wahr
Ende Sub
' Addiert die gewünschte Spalte innerhalb eines bestimmten Bereiches der
Tabelle auf.
Sub Aufaddition()
' Festlegung des unteren Bereiches für die Summenbildung
Auswahl.Ende(xlNachOben).Auswählen
UntererBereich = Anwendung.AktiveZelle.Zeile
' Festlegung des oberen Bereiches für die Summenbildung
Auswahl.Ende(xlNachOben).Auswählen
ObererBereich = Anwendung.AktiveZelle.Zeile
EndeDerTabelle ' Aufruf des Unterprogrammes
' Bestimmung des Bereiches für die Aufaddierung
Setze Summenbezug = Bereich(ZelleListe(UntererBereich; SpaltenNr1); _
ZelleListe(ObererBereich; SpaltenNr1))
' Aktive Zelle auswählen, in der die Aufaddierung eingetragen worden
soll
AktiveZelle.Versetzen(2; 0).Auswählen
' Aufaddierung der Zeilen innerhalb der Spalte
Anwendung.AktiveZelle.Formel = "= SUMME(" &
Summenbezug.Adressieren(ZeileAbsolut:=Falsch; _
SpalteAbsolut:=Falsch) & ")"
Ende Sub
' Stellt eine komplette Umrandung einer Zelle her
Sub Rahmenbilden()
Mit Auswahl
.RahmenListe(xlLinks).Linienart = xlKein
.RahmenListe(xlRechts).Linienart = xlKein
.RahmenListe(xlOben).Linienart = xlKein
.RahmenListe(xlUnten).Linienart = xlKein
.Gesamtrahmen Stärke:=xlDünn; FarbIndex:=xlAutomatisch
.Zahlenformat = "#.##0,00;[Rot]-#.##0,00"
Ende Mit
Ende Sub
' Kopiert den Bereich der Aufaddierung für die
' Spalte der Jahresprämie in die Spalte Differenzprämie
Sub Kopieren1()
AktiveZelle.Auswählen
Auswahl.Kopieren ' Markierter Bereich Kopieren
ZelleListe(UntererBereich + 2; SpaltenNr1 + 2).Auswählen
AktivesBlatt.Einfügen
Anwendung.AusschneidenKopierenModus = Falsch
Ende Sub
' Kopiert den eingefügten Text und die Berechnung aus dem
' Gebäudebereich in den Haftpflichtbereich
Sub Kopieren2()
' Markieren des Bereiches, in dem sich der Text und die Berechnung
' für den Übertrag vorhanden ist.
Bereich(ZelleListe(UntererBereich + 2; SpaltenNr1 - 2); _
ZelleListe(UntererBereich + 2; SpaltenNr1 + 2)).Auswählen
Auswahl.Kopieren ' Markierter Bereich Kopieren
ZelleListe(UntererBereich + 2; SpaltenNr2 - 2).Auswählen
AktivesBlatt.Einfügen
Anwendung.AusschneidenKopierenModus = Falsch
Ende Sub
' Das Modul springt immer bis zu den eingefügten Zeilen und löscht diese
' solange, bis es tatsächlich das Ende der Tabelle erreicht hat.
Sub ZeilenLöschen()
ZeilenNr = 0 ' Initialisieren der Variabel
AnfangDerTabelle ' Aufruf des Unterprogrammes
EndeDerTabelle ' Aufruf des Unterprogrammes
ZeilenNr = Anwendung.AktiveZelle.Zeile
Durchlaufe Solange ZeilenNr <> ZeileListeEnde
Bereich(ZelleListe(ZeilenNr + 1; 1); _
ZelleListe(ZeilenNr + 2; 1)).GanzeZeile.Auswählen
Auswahl.Löschen Verschieben:=xlNachOben
' Die Anzahl der Zeilennummern muß um 2 verringert werden,
' da 2 eingefügten Zeilen wieder gelöscht werden.
ZeileListeEnde = ZeileListeEnde - 2
Wenn ZeilenNr = ZeileListeEnde - 1 Dann
Verlasse Durchlaufe
Ende Wenn
EndeDerTabelle ' Aufruf des Unterprogrammes
ZeilenNr = Anwendung.AktiveZelle.Zeile
Schleife
Ende Sub
Silvia Hütte-Spürk <hue...@uni-bonn.de> schrieb in im Newsbeitrag:
371ED21F...@uni-bonn.de...
Willst Du diese Summe auf Tabellenblatt anzeigen, oder genügt es Dir wenn
die Summe in der Fußzeile angezeigt wird?
In der Fußzeile anzeigen, wäre schließlich kein Problem;
Frage: Wird immer der gleiche Drucker (inklusive gleiches Format) verwendet?
Sonst ist schwierig, da immer alle Parameter abgefragt werden müssen.
MFG
Stefan