09.11.2016, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2016, 16:43 von Timo.)
Hallo! Mein Problem (ich suche mir die Augen tränig im Internet): Ich habe eine Excel2010 Tabelle zur Erfassung von Gegenständen. Mit Überschrift und Spaltennamen beginnt die Liste der Gegenstände in Spalte 7 (A7 bis K7) und führt sich dann logischerweise nach unten weiter. Ich möchte jetzt in Tabelle2 automatisch eine Liste zusammenstellen lassen, die die Daten zu den Gegenständen 1 bis 10 ausgibt, wenn ich in zwei Zellen (H3 und I3) eingebe, welche Gegenstände ausgegeben werden sollen. Also in H3 steht "1" und in I3 steht "5" für die Ausgabe der Daten in Zeile 7 bis 11 in Tabelle2. Ich hoffe, das ist verständlich beschrieben...
Jetzt habe ich einen Button über "Entwicklertools - Einfügen - ActiveX-Steuerelement" eingefügt, der "DRUCKEN" heißt, denn ich will dann nur diesen Bereich genannten Bereich über Tabelle2 ausdrucken (und wahrscheinlich die Schriftgröße anpassen).
Hat jemand eine Idee zu meinem Problem? Ich sage schon mal danke im Voraus!
anbei deine Beispieldatei mit überarbeitetem Makro zurück. Ich hoffe es ist so gut dokumentiert das du es verstehst.
Das Makro in Modul1 habe ich gelöscht, da waren mir zu brisante Befehle drin. Amüsanterweise hast du zuerst einen normalen Button mit Add eingefügt, und wieder gelöscht. Dann einen Aktive CommandButton eingefügt. Beim benutzen dieses Makro würde Excel dir aber bei jedem Druckvorgang ein neues Aktives Steuerelement genau über das alte hinzufügen. Otisch kann man das nicht sehen, irgendwann hättest du >100 Objekte in der Tabelle! Nicht gut!
Ich habe mir erlaubt in Tabelle2 in Zeile2 eine Überschrift einzufügen. Wenn nicht gewünscht bitte löschen. Zum kopieren gehe ich über neue Adressen, weil man ja den Kopierbereich festlegen muss. Schau mal ob es so hinhaut, sonst ändern wir den Kopierbereich.
Mit Drucken und Drucker einrichten kenne ich mich nicht aus, ist nicht mein Fachgebiet. Das zeichnest du am besten mit dem Recorder auf, und fügst den Code in das schon existierende Makro "Drucken" ein. Im Augenblick kommt da eine MsgBox. Beim Drucken kann ich dir leider nicht weiterhelfen.
Hallo und zunächst mal VIELEN DANK dass Du Dir die Mühe mit meinem Problem machst.
Irgendwie tut sich bei mir aber nichts, wenn ich den "DRUCKEN" Knopf betätige. Er übernimmt dann zwar die Nummer 1-3 oder mehr wenn ich es eintrage, aber das, was in der Tabelle dahinter kommt wird nicht mit kopiert. In der Zwischenzeit kam leider noch ein weiterer Wunschpunkt (SORRY!): Ist es möglich, z.B. Spalte B (und wenn meine Mitarbeiterin irgendwann merkt, dass sie auch andere Spalten nicht ausgedruckt braucht, auch diese...) nicht mit zu kopieren? Oder wird das dann zu kompliziert?
Zum Drucken selbst brauche ich da nichts im Makro. Wenn die Daten in Tabelle2 gelandet sind, kann ich das von Hand drucken, das macht mir nichts, kommt eh nicht so oft vor.
Sorry, da hat tatsaechlich was nicht geklappt. Auf Grund deiner Bitte nur einzelne Spalten zu kopieren habe ich das alte Makro verworfen und eine ganz neue Lösung ausgetüfftelt. Nach der Devise: Wir basteln uns selbst ein Makro Nicht erschrecken, ich kann Vba gut erklären. (Dr. Oetker Backbuch)
Ich habe drei Module eingefügt. Im Modul1 wird über den Button das Makro "Kopieren" aufgerufen. Von dir selbst entwickelt! Im Modul2 ist nur eine Kopie aus Modul1 als Kopier Vorlage. Im Modul3 kannst du diir ansehen wie mein Makro aufgebaut ist, warum ich mit Offset(0, 3) usw. arbeite, und was dabei genau passiert. Angezeigt über MsgBox, wo man genau sehen kann welcher Bereich gerade Selektiert wird. Den Zusammenhang begreift man schnell.
Im Modul1 hast du eine komplette Vorlage um jede einzelne Spalte aus Tabelle1, in jede beliebige Zielspalte in Tabelle2 zu kopieren Die Reihenfolge was du von wo, nach wo kopierst, ist dir jetzt selbst überlassen. Ebenso welche Spalten du kopieren willst. Die Makrobefehle die du nicht brauchst, die überflüssig sind, einfach löschen. Das ist alles.
Ich nenne das ein Universal Makro, weil der Anwender so nach belieben selbst festlegen kann was kopiert wird. Ich hoffe das ich es gut erklärt habe, und es so die bessere Lösung ist. Wenn du das System verstanden hast bist du vom Forum unabhängig. Brauchst nicht nachfragen um selbst was zu ändern
Selbst ist der Mann!! Ich hoffe das es so eine gute Idee ist. Du must zwar etwas üben, aber das hat schnell begriffen!
kleine Anmerkung: im Blatt ist ein Aktive Steuerelemnte Button. Waere es ein normaler Standad Button aus der Zeit Excel 97/2003 könnte man dem Button das Makro direkt zuweisen. Bei Aktiven musste ich über Private Sub gehen!
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • Timo
Das sieht so aus, wie ich es mir vorgestellt habe! Super! Wahrscheinlich werden noch die ein- oder anderen Kleinigkeiten verändert werden müssen (die Kollegin kommt alle halbe Stunde und hat noch mehr Ideen...) und wenn ich dann nicht weiter komme melde ich mich noch einmal... :)
Also VIELEN DANK dass Du meine Woche gerettet hast!!!!
Timo
PS: Zu Deinem Nachtrag: Ich habe den ActiveButton genommen, weil ich nicht wusste, dass das auch mit einem normalen Button geht...
Wenn ich jetzt eine Spalte einfüge, weil da noch mehr dazu soll - und die dann auch kopiert werden soll... dann versuche ich mich in den Makros durch, das klappt dann bestimmt irgendwann. Aber: Muss ich dann in allen Modulen das CopyPaste verändern oder nur in einem? Woher weiß Excel welches Modul verwendet wird oder funktionieren die nur gemeinsam?
es gbit drei Module, davon ist für den Button nur das Modul1 aktiv. Modul2 ist nur eine Kopie für dich, alte Gewohnheit von mir. Wenn man ein Makro ändert und es nichtr so klappt wie man will kann man wieder das Original Makro kopieren, und einen neuen Versuch machen. Deshalb behalte ich gerne eine Kopie. Nur zur Sicherheit.
Das Modul3 ist nur "zum spieien", zum Vba lernen gedacht. Dort kannst du optisch sehen was der Offset(0,x) Befehl bewirkt. Damit kopiert man jedesmal eine andere Spalte! Im zweten Makro "eigenen_Kopierbereich_Prüfen" kannst du dir selber die Spalten aussuchen die du kopieren willst, und bekommst per MsgBox angezeigt ob es die richtige Spalte ist. Das benutze ich auch selbst beim Makro Entwickeln, wenn ich Adressbereiche prüfen muss. Bei langen Makros verliere selbst ich manchmal die Übersicht. Dann ist es gut wenn man optisch sieht was man programmiert.
Die Zieladresse in Tabelle2 kannst du für jede Spalte selbst festlegen. Denn jede Einheit ist in sich abgeschlossen! Beispiel: Diese beiden Zeilen im unteren Beispiel gehören als Einheit zusammen. Zuerst Copy, dann Paste xlValues. Bei Offset(0, 4) siehtst du das damit Spalte E=Gegenstand kopiert wird.
Code:
Range(AnfAdr, EndAdr).Offset(0, 4).Copy 'E Gegenstand Worksheets("Tabelle2").Range("C3").PasteSpecial xlPasteValues
Die Basis Adresse ist immer deine Anf- und End Adresse aus den Zellen "J" + K1". Die ändert sich nicht. Offset(0,4) besagt aber das jetzt dieser Bereich, um vier Spalten verschoben, kopiert werden soll! Das ist alles. Kommen neue Spalten hinzu musst du nur abzählen wie gross dein Offset sein muss. Dazu gehst du am besten in Modul3 und testest es im zweiten Makro: "Eigenen_Kopierbereich_Prüfen". Dort gibt es zum prüfen nur Select, -ohne- Kopie!! Die Befehle die jetzt drin stehen kannst du löschen oder deaktivieren. Setze vor Range mal ein Hochkomm ', dann erscheint die Zeile in Grün. Excel wertet sie jetzt als Kommentar, als Text. Der Befehl wird nicht mehr ausgeführt. So aktivieren wir mal eben Befehle. kleine Vba Praxis.
Mit dem Modul3 kannst du zum üben frei experimentieren. Dort wird nichts kopiert oder eingefügt!! Ein reines Spalten Test Modul!!
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • Timo
ich habe ganz vergessen zu fragen ob du weisst wie man Makros starten kann. Drei Möglichkeiten: Über Butrton, über Menülsite Makrı Dialog öffnen, im Listenfeld auswaehlen und Run oder Start drücken. Mit Alt + F11 den Vba Editor öffnen, den Cursor im Modulblatt ins Makro mitten reinsetzen, F5 drücken. So starten Programmierer beim Entwickeln zum Testen.