Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Werte aus Tabelle per Button in andere übertragen





Frage

Hallo Excel-Freaks, ich bin ziemlicher Excel-Laie (insbesondere VBA) und habe folgende Herausforderung (heutzutage sagt ja keiner mehr PROBLEM!): Ich hab ein Worksheet, in dem in meine Rechnungen erstelle und im gleichen Excel-File ein zweites Worksheet, dass die komplette Auflistung meiner Rechnungen hat. Ich will nun eine Rechnung erstellen und dann per Button gewisse Zellen (Rechnungsempfänger, Rechnungsdatum, Rechnungsbetrag..) an das andere Worksheet übertragen; dort muss eine neue Zeile eingefügt werden und die übertragten Zellen in die entsprechenden Spalten eingetragen werden. Den Button hab ich mir zumindestens schon mal hingelegt und nu kommt VBA.... Hat dazu jemand eine Lösung? Das wäre toll!!!! Danke im Voraus, Dirk

Antwort 1 von coros

Moin Dirk,

da Du etwas wenig darüber schreibst, welche Zellen kopiert werden sollen und wo in dem neuen Tabellenblatt eine Leerzeile eingefügt werden soll, kommt hier mal ein recht allgemeiner Code. Den kopierst Du in das VBA Projekt der Tabelle, in der auch Deine Schaltfläche vorhanden ist.

Private Sub CommandButton1_Click()
Worksheets("Tabelle2").Rows("3:3").Insert Shift:=xlDown
Range("A2,B2,C2").Copy Worksheets("Tabelle2").Range("A3")
End Sub


Dieser Code fügt in dem Tabellenblatt2, in Zeile 3, eine Leerzeile ein und kopiert danach in dem gerade aktiven Blatt die Zellen A1, B1 und C1. Diese werden dann in der vorher eingefügten Leerzeile wieder in Zelle A3 eingefügt. Die Bereiche für das Kopieren und das Einfügen der Leerzeile müssen sicherlich noch angepasst werden. Dazu muss, wenn andere Zellen als A2, B2 und C2 kopiert werden sollen, in der Zeile

Range("A2,B2,C2").Copy Worksheets("Tabelle2").Range("A3")

die Zellbezeichnungen in der Klammer nach dem ersten Range geändert werden. Genauso verhält es sich mit dem Einfügen. Soll an einer anderen Stelle eingefügt werden als A3 in dem Tabellenblatt 2, muss die Bezeichnung in der Klammer des 2. Range geändert werden. Bei einem anderen Blattnamen den Text "Tabelle2" ändern. Wenn in einer anderen Zeile, als Zeile 3, eine Leerzeile eingfügt werden soll, dann in Zeile

Worksheets("Tabelle2").Rows("3:3").Insert Shift:=xlDown


in der Klammer hinter Rows, die Zeilennummer ändern. Den Blattnamen wie oben beschrieben änden.

Da Du ja geschrieben hast, dass Du Dich nicht mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.

1. Markiere die Anweisung aus diesem Beitrag und Kopiere (Strg c) diesen.

2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücke die Tastenkombination Alt F11

3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle)

4. Klicke danach in dem linken Fenster auf den Eintrag Tabelle1(Dein Tabellenname) oder Tabelle2(Dein Tabellenname),bzw die Tabelle, in dem der Code wirken soll.

5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.

Ich hoffe, das der Button, den Du in Deinem Tabellenblatt eingefügt hast von der Symbolleiste Steuerelement/Toolbox stammt. Denn nur dann kann der obige Code funktionieren. Wenn nicht öffne die Symbolleiste mal (Ansicht => Symbolleiste => Steuerelement/Toolbox) und klicke die 6. Schaltfläche von links an und füge eine neue Schaltfläche ein. Danach musst Du zum Beenden des Entwurfmodus noch die erste Schaltfläche von links in der Symbolleiste anklicken.

Du solltest zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.

Ich hoffe, Du kommst klar. Wenn nicht, melde Dich noch mal. Wenn Du einen genaueren Code als den obigen benötigst, musst Du schon etwas genauer schreiben, was wann wo passieren soll und was wohin kopiert werden soll. Denn dies hier ist ein Computerforum, in dem keiner hellsehen kann, glaub ich zumindest. ;-)

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Dirk_04

Hi Coros,

ich hab's noch nicht ausprobiert, aber ich wollt' mich mal direkt für die extrem prompte und ausführliche Anleitung bedanken.
Das ist echt selten geworden im Netz, dass man so ein hilfreiches Board findet!

1000dank!

Dirk

Antwort 3 von Dirk_04

Hallo Coros,

wenn in der zu kopierenden Zelle einfach eine Zahl steht, dann klappt das Ganze. In der Zelle steht aber leider 'ne Formel (Summe aus Nettobetrag + MwSt) und dann bekomme ich immer #BEZUG in der Rechnungsliste. Kannst Du mir das noch erklären; der Rest klappt's super!

Danke,
Dirk

Antwort 4 von coros

Hi Dirk,

dann sollte der Code folgendermaßen aussehen.

Private Sub CommandButton1_Click()
Worksheets("Tabelle2").Rows("3:3").Insert Shift:=xlDown
Range("A2,B2,C2").Copy
Worksheets("Tabelle2").Range("A3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub


Bei dem neuen Code werden nur die Werte aus der Tabelle eingefügt. In der allten wurde alles eingefügt. So eben auch wenn eine Formel in dem zu kopierenden Bereich vorhanden war, dann eben diese Formel. Tausche ihn einfach gegen den alten Code aus.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von Dirk_04

Geil! Funzt jetzt auch! Jetzt hab ich noch ein letztes (hoffentlich) Problem, dass in der Rechnungsliste die Formatierung (zB. die Spalte Rechnungsbetrag soll immer in Euro mit 2 Nachkommastellen dargestellt werden). Wenn die Zahl jetzt aus der Rechnung rüberkopiert wird, so steht da nur noch zB. 1000 statt 1.000,00 €.
Kann man das auch noch festlegen, dass die Formatierung bei Einfügen einer neuen Zeile + rüberkopieren erhalten bleibt?

Danke,
Dirk

Antwort 6 von coros

Hi Dirk,

so, dass sollte es dann gewesen sein. Nachfolgender Code kopiert und fügt ein und zwar den Wert und das Format.

Private Sub CommandButton1_Click()
Worksheets("Tabelle2").Rows("3:3").Insert Shift:=xlDown
Range("A2,B2,C2").Copy
Worksheets("Tabelle2").Range("A3").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
End Sub


Bei weiteren Fragen oder Problemen kannst Du Dich gerne wieder melden.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 7 von Dirk_04

Yo, super! Läuft 1a genau so, wie ich es mir vorgestellt hatte. Super!!!!

Noch mal's VIELEN DANK für Deine klasse Hilfe.
Solltest das zu Deinem Beruf machen... :-D

Wenn's noch was gibt mach in ein neues Topic auf, da dies jetzt, wie gesagt, genau so funktioniert, wie ich mir das gedacht hatte.

Danke,
Dirk

Antwort 8 von coros

Hi Dirk,

feut mich, dass wir das hinbekommen haben. Danke auch für die Rückmeldung.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 9 von Dirk_04

Ach, einen hab ich noch....

es geht sich immer noch um die gleiche Tabelle.
Wenn ich nun Daten aus einem Worksheet per SVERWEIS in eine andere übertragen möchte und dabei aber auch die Formatierung aus dem Worksheet übernehmen möchte, wo die Daten drin sind, muss ich das dann auch per VBA machen?
Es geht sich darum, dass in der selben Zelle mal ein Eurobetrag (mit 2 Nachkommastellen & Währungssymbol); mal eine Stückzahl (ohne 2 Dezimalstellen/ohne Währungszeichen) stehen soll.
Geht das auch ohne VKA?

Danke noch mal,

Dirk

Antwort 10 von coros

Moin Dirk,

mir fällt da im Moment keine Möglichkeit ohne VBA ein. Es kann aber sein, dass man das mit einer Formel eventuell hinbekommt. Nur dafür bin ich nicht der richtige. Mir liegt eben VBA mehr als Formeln. Vielleicht packst Du Deine letzte Frage mal in ein neuses Thread, dann kommt eventuell ein Formelexperte, der die helfen kann.

Bei einer VBA Lösung würde ich das über eine UserForm lösen, in der man die Eingabe, die bei Dir im Moment in dem Tabellenblatt stattfindet, auf die dann die SVERWEIS-Formel reagiert, in der UserForm erledigen würde. Man könnte diese UserForm so gestalten, dass entweder Begriffe eingegeben werden oder ein Listenfeld vorhanden ist, aus dem man die Einträge auswählt. Allerdings kann ich Dir dazu jetzt kein Beispiel hier hinschreiben, da ich vom Aufbau her Deine Tabelle nicht kenne und nicht weiß, ob das so einfach umzusetzen geht. Ein 0815 Beispiel zu kreieren wäre zwecklos, da man da auf Deine Datei zurecht schneidern müsste.

Allerdings kannst Du mir gerne mal eine Beispieldatei Deiner Rechnung schicken und ich schaue nach, wie man das mit VBA lösen könnte. Sende die Datei an E-Mail:coros@onlinehome.de. Aber wie schon geschrieben, wenn Du eine Formellösung bevorzugst, eröfffne einen neuen Thread.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.