Autor
|
Thema: Kopf- und Fußzeile mit Tabellen (1684 / mal gelesen)
|
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 12. Jul. 2018 17:41 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, normalerweise treibe ich mich in anderen Bretter auf CAD.DE herum. Jetzt habe ich allerdings ein Problem mit Excel und/oder VBA. Leider sind die Kenntnisse in VBA noch sehr ausbaufähig. (Man kann es sich in etwa wie einen abgesteckten Grundriss vorstellen, wenn man versucht ein Haus zu bauen. ) Dieses Forum und auch weite Teile des Internets habe ich durchsucht. Meist habe ich allerdings nicht verstanden, was man mir sagen möchte. Oder es hat nicht zum Ziel geführt. Soviel zur Vorrede. Nun mal zur Aufgabenstellung. Ich möchte eine Vorlage für Stücklisten erstellen, welche unbedingt in ausgedruckter Form gebraucht werden und auf dem Ausdruck eine vorgeschriebene Form haben müssen. Eine dieser Vorgaben ist, dass die Angaben in der Kopf- und Fußzeile in einer Tabelle enthalten sein müssen. Leider unterstützt die Tabellenkalkulation eine solche Möglichkeit nicht in den Kopf- und Fußzeilen. Meist lautet die Lösung dann, dass eine solche Tabelle als Grafik abgespeichert wird und diese dann in die Kopf- und Fußzeile eingebunden wird. Dies ist hier leider nicht möglich, weil einige Angaben in den beiden Tabellen veränderlich sein müssen. Dies konnte ich wenigstens für die Kopfzeile dadurch ausgleichen, dass ich nicht die "echte" Kopfzeile genutzt habe und dafür den Wiederholbereich nutze. Leider ist die Lösung noch nicht ganz zufriedenstellen. Zu dem Problem dann gleich mehr. Für die Fußzeile habe ich mir mit einer Grafik und den Zuweisungen von Werten über VBA geholfen. Die Anregung dazu habe ich von hier übernommen. Die Platzierung der Werte mittel Leerzeichen ist zwar sonst nicht meine bevorzugte Arbeitsweise. Aber hier hat sie mir eine ausreichende Lösung gebracht. Nun mal zum Problem in der Pseudo-Kopfzeile. Die Stückliste ist Bestandteil eines anderen Dokuments. In diesem Dokument gibt es eine Angabe der Seitenanzahl in Form von "xx von yy". Da die Anzeige von Seitenzahlen nur in der echten Kopfzeile möglich ist, wird hier ein wenig getrickst mit Leerzeichen um letztendlich eine Positionierung dieser Angabe innerhalb der vorhandenen Tabelle beim Ausdruck zu erreichen. Es hat zwar einige Zeit gekostet, die "Formatierungen" anzupassen, aber es ist jetzt ausreichend gut. Zu finden ist diese Anpassung im VBA. Die Seitenzahl dieser Stückliste muss aber die bisher ausgefüllten Seiten im anderen Dokument berücksichtigen, weil es eben in ausgedruckter Form zusammengehört. Leider hat man in Excel nur die Möglichkeit, die Seitenzahl vorzugeben, mit der die Zählung anfangen soll. Hat mein erstes Dokument als 8 Seiten, kann ich die Angabe in der Kopfzeile so weit modifizieren, dass zur aktuellen Seitenzahl immer diese 8 Seiten hinzu gezählt werden. Diese Möglichkeit gibt es aber nicht für die Gesamtzahl. Würde also die Stückliste 3 Seiten lang sein, dann steht auf der letzten Seite eine Angabe "Seite: 11 von 3" Hier sollte aus nachvollziehbaren Gründen aber "Seite: 11 von 11" Meine Versuche aus den vorhandenen Informationen durch einfache Berechnungen die gewünschten Ausgaben zu erzeugen sind leider gescheitert. Meist wurde mir von VBA vorgeworfen, dass die Operationen nicht möglich sind auf Grund von Typenunverträglichkeit. Oder falls die Typen übereinstimmen sind die Ergebnisse nicht verwendbar. Wahrscheinlich sind die meisten beim Lesen schon eingeschlafen. Für alle die noch wach sind und helfen wollen , habe ich mal die Datei angehangen. Damit sollte dann hoffentlich etwas klarer werden, was ich hier vielleicht zu umständlich beschrieben habe. Außerdem habe ich noch eine Zusatzfrage: Mein Ziel ist es, auch den Druckbereich entsprechend vorzugeben. Da die Tabelle unterschiedlich befüllt wird, habe ich schon mal nach Lösungen gesucht, mir die letzte ausgefüllte Zeile zu ermitteln. Hier bin ich sogar fündig geworden. Leider zeigt mir diese Funktion nicht die Zeile an, welche mit Werten ausgefüllt ist. Hier wird immer die Zeile angezeigt, bis zu der ich die notwendige Formatierung der Zellen vorsorglich vorgenommen habe. Die Verschmelzung der Zellen ist leider notwendig, da ja die Kopftabelle eine bestimmte Größe haben sollte. Vielleicht hat ja hier noch jemand eine Idee, wie ich das besser hinbekomme? Danke im Voraus. ------------------ Gruß Udo Keine Panik, Du arbeitest mit CREO (ehemals Pro/E)! Und Du hast cad.de gefunden! Neu hier? Verwundert über die Antworten? Dann schnell nachfolgende Links durchlesen. • Richtig Fragen • Nettiquette • Suchfunktion • System-Info • Pro/E-Konfig • 7er-Regel • Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 13. Jul. 2018 15:07 <-- editieren / zitieren --> Unities abgeben:
Ich versuche es nochmal etwas kürzer. Für die Zuweisung einer Textes in der Kopfzeile habe ich folgendes: Code: With ActiveSheet.PageSetup ' Seitenzahl in die Kopfzeile einfügen .RightHeader = "&P" & " von " & "&N" End With
Damit wird mir die Seitenzahl und die Gesamtseitenzahl in der Kopfzeile angezeigt. Soweit ganz hübsch. Auf Grund der äußeren Bedingungen brauche ich aber eine Verschiebung der Seitenzahlen. Diese Vorgabe möchte ich in einer Zelle als Zahl ablegen und nutzen. In den unzähligen Informationen habe ich noch den Hinweis zur Verschiebung der ersten Seite gefunden. Code: With ActiveSheet.PageSetup ' Seitenzahl in die Kopfzeile einfügen .RightHeader = "&P+3" & " von " & "&N" End With
Beim Ausdruck eines einblättrigen Dokumentes würde der Ausdruck dann " 4 von 1" lauten. Hier wird aber " 4 von 4" gebraucht Aus diesem Grund versuche ich, selbst erstellten Variablen den Wert der Seitenzahl zuzuweisen, die Vorgabe zu addieren und das Ergebnis auszugeben. Code: seite_beginn = Range("W2") seite_laufend = "&P" seite_gesamt = "&N"
Diese Zuweisung erzeugt mir eine Variable seite_laufend vom Typ String und zwar mit dem Wert "&P". Versuche ich diese Variable in einen Typ zu wandeln, mit dem man rechnen kann, bekomme ich immer den Laufzeitfehler 13 präsentiert. Dabei ist es egal, ob ich es bei der Variablendefinition versuche oder dies dann mittels Typkonvertierung versuche. Also ist die einfache Frage: Wie ist es möglich, mit der Seitenzahl zu rechnen? Lasst mich nicht hängen, auch wenn ich es als Anfänger vielleicht verdient hätte. ------------------ Gruß Udo Keine Panik, Du arbeitest mit CREO (ehemals Pro/E)! Und Du hast cad.de gefunden! Neu hier? Verwundert über die Antworten? Dann schnell nachfolgende Links durchlesen. • Richtig Fragen • Nettiquette • Suchfunktion • System-Info • Pro/E-Konfig • 7er-Regel • Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 13. Jul. 2018 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für U_Suess
Moin, sorry, aber das ist mir derzeit zuviel Text Hilft es Dir, wenn Du weißt, dass Du auf Zellinhalte zurückgreifen kannst? Müßtest dann halt die Vorgabe von dort holen.
Code: Sub Gesamtgesamt() Dim AnzahlSeiten% AnzahlSeiten = ActiveSheet.PageSetup.Pages.Count With ActiveSheet.PageSetup ' Seitenzahl in die Kopfzeile einfügen .RightHeader = "&P" & " von " & AnzahlSeiten + Cells(1, 1) End With End Sub
Oder per Eingabeaufforderung:
Code: Sub GesamtgesamtFragMich() With ActiveSheet.PageSetup ' Seitenzahl in die Kopfzeile einfügen .RightHeader = "&P" & " von " & .Pages.Count + InputBox("Zu addierende Seitenzahl eingeben") End With End Sub
Hoffe, ich hätte nicht doch besser den ganzen Text gelesen Derzeit baue ich darauf, dass Dir nur die Übersetzung von &N (= .Pages.Count) fehlte. Wenn ja, dann Haltepunkt am End With setzen, Augen auf das Menü>Ansicht>Lokalfenster richten und Bäumchen aufklappen >> Dort findest Du die Elemte, die Du nutzen kannst. Zusätzliche Leseempfehlung, weil Du dafür sorgen mußt, dass das Makro auch ausgeführt wird, bevor Du druckst, bzw die Seite anguckst >> Inhalt von L2 automatisch (!) beim Ändern oder vorm Drucken in CenterFooter schreiben << genug rumeditiert, das bleibt jetzt so ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 13. Jul. 2018 18:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von runkelruebe: ... sorry, aber das ist mir derzeit zuviel Text
Deshalb hatte ich ja auch die Datei angehangen. Mir ist sehr bewusst, dass ich meist zu viel schreibe. Aber ich möchte eben möglichst alle notwendigen Informationen weitergeben, da ich es persönlich hasse, wenn ich den Leuten die Informationen aus der Nase ziehen muss. Zitat: ... Hilft es Dir, wenn Du weißt, dass Du auf Zellinhalte zurückgreifen kannst? Müßtest dann halt die Vorgabe von dort holen. ...
Ja, das ist mir bekannt und wurde auch schon so angewendet. Allerdings bin ich eben noch ein echter Neuling, so dass mir die richtigen Begriffe fehlen, ich mich in der Umgebung noch nicht sicher bewege und auch ein verlässliches Nachschlagewerk fehlt. Zitat:
Dim AnzahlSeiten% AnzahlSeiten = ActiveSheet.PageSetup.Pages.Count Du bist mein Held!Das genau habe ich gesucht. Ich kannte eben nur das &N oder &P. Zitat: ... Hoffe, ich hätte nicht doch besser den ganzen Text gelesen Vielleicht hast Du ja noch einen Einfall für die Zusatzfrage im ersten Beitrag.Zitat: Wenn ja, dann Haltepunkt am End With setzen, Augen auf das Menü>Ansicht>Lokalfenster richten und Bäumchen aufklappen >> Dort findest Du die Elemte, die Du nutzen kannst.
Manches klingt noch etwas wie Böhmische Dörfer. Aber ich habe ja schon einige Deiner Beiträge gelesen und fand den Hinweis auf das Lokalfenster extrem hilfreich. Zitat: ... Zusätzliche Leseempfehlung, ...
Den habe ich mir natürlich angesehen bevor ich den laaaannnnggggeeennn Text geschrieben habe. Nochmal vielen Dank.
------------------ Gruß Udo Keine Panik, Du arbeitest mit CREO (ehemals Pro/E)! Und Du hast cad.de gefunden! Neu hier? Verwundert über die Antworten? Dann schnell nachfolgende Links durchlesen. • Richtig Fragen • Nettiquette • Suchfunktion • System-Info • Pro/E-Konfig • 7er-Regel • Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 14. Jul. 2018 20:07 <-- editieren / zitieren --> Unities abgeben: Nur für U_Suess
Hallo Udo, Zu Deiner Zusatzfrage: Hast Du eine Zelle (Spalte) die immer gefüllt ist wenn Werte vorhanden sind? Dann kannst Du doch, ausgehend von der letzten gefundenen Spalte diese überprüfen ob ein Wert darin steht Code:
Sub main() Dim s As Long, z As Long s = 3 ' ( Spalte C ) z = Letzte(s) MsgBox z End SubFunction Letzte(Spalte As Long) As Long Dim letzteZeile As Long Letzte = 0 letzteZeile = ActiveSheet.UsedRange.Rows.Count For i = letzteZeile To 1 Step -1 If Not IsEmpty(Cells(i, Spalte)) Then Letzte = i Exit For End If Next If i = 0 Then Debug.Print "Tabelle ohne Werte": Stop End Function
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 15. Jul. 2018 12:34 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von KlaK: ... Hast Du eine Zelle (Spalte) die immer gefüllt ist wenn Werte vorhanden sind? ...
Ja, das ist gewährleistet. Somit kann ich das ja mit Deinem Vorschlag probieren. In meiner noch etwas naiven Vorstellung war ich davon ausgegangen, dass ActiveSheet.UsedRange.Rows.Count mir die Information bereitstellen kann. --> Ich muss noch viel lernen. ------------------ Gruß Udo Keine Panik, Du arbeitest mit CREO (ehemals Pro/E)! Und Du hast cad.de gefunden! Neu hier? Verwundert über die Antworten? Dann schnell nachfolgende Links durchlesen. • Richtig Fragen • Nettiquette • Suchfunktion • System-Info • Pro/E-Konfig • 7er-Regel • Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 16. Jul. 2018 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für U_Suess
Hallo Udo Wie wäre es als Alternative eine "Ausdruck"-Tabelle zu erstellen. Also ein Makro, welches die "Druck"-Seiten zusammen stellt. So fällt auch das Gefriemel mit der Kopf- und Fusszeile weg. Hab dir ein Beispiel angehängt. Gruss Andreas ------------------ 21 ist nur die halbe Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 16. Jul. 2018 14:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas, vielen Dank für Deinen Vorschlag. Das ist auf jeden Fall eine Möglichkeit, wie man mit solchen Sachen auch umgehen kann. Soweit habe ich natürlich als Neuling nicht gedacht. Leider setzt das aber eine konstante Zeilenhöhe für die fertige Stückliste voraus. Beim Ausfüllen der Spalte "Bemerkung" kommt es aber öfters vor, dass dies nicht einzeilig abbildbar ist. Somit müsste man für die Festlegung die tatsächliche Höhe jeder einzelnen Zeile berücksichtigen, um ein ordentliches Ergebnis zu erzielen. Scheint mir etwas zu aufwendig, wobei sich da ein Neuling eben auch komplett verschätzen kann. Ich werde dann mal versuchen, die guten Ratschläge von Rübe und Klaus in die Tat umzusetzen. Das Gefriemel mit Kopf- und Fusszeile habe ich ja schon fast fertig. Es fehlten ja erstmal nur noch Kleinigkeiten. ------------------ Gruß Udo Keine Panik, Du arbeitest mit CREO (ehemals Pro/E)! Und Du hast cad.de gefunden! Neu hier? Verwundert über die Antworten? Dann schnell nachfolgende Links durchlesen. • Richtig Fragen • Nettiquette • Suchfunktion • System-Info • Pro/E-Konfig • 7er-Regel • Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HenryV Mitglied Konstrukteur, Engineering
Beiträge: 778 Registriert: 18.05.2005 SolidWorks 2020 x64 SP3.0 Dell Precision 5820 Intel Xeon W-2125 4x4GHz NVIDIA Quadro P2000 5GB 32GB RAM 2x Dell U2412M, 24" TFT Windows 10 Enterprise x64 21H1 Microsoft Office 365 ProPlus Microsoft Visual Studio Enterprise 2022
|
erstellt am: 16. Jul. 2018 15:37 <-- editieren / zitieren --> Unities abgeben: Nur für U_Suess
|
U_Suess Ehrenmitglied V.I.P. h.c. CAD-Admin / manchmal Konstrukteur
Beiträge: 10560 Registriert: 14.11.2001 Windows 7 Excel 2010
|
erstellt am: 16. Jul. 2018 15:59 <-- editieren / zitieren --> Unities abgeben:
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 18. Jul. 2018 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für U_Suess
Zitat: Original erstellt von U_Suess: In meiner noch etwas naiven Vorstellung war ich davon ausgegangen, dass ActiveSheet.UsedRange.Rows.Count mir die Information bereitstellen kann.
Leider ist dieses UsedRanged für nicht viel im Leben zu gebrauchen Meine eigene Schnarchnasigkeit zum Thema Letzte Zeile / Letzte Spalte hatte ich mal >> hier << verewigt Aber ich denke, Du hast bereits die Komfortlösung von HenryV erhalten. Ungetestete 10 Unies
------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|