Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Werte in anderes Tabellenblatt per VBA übernehmen





Frage

Hi! Ich habe mal wieder eine Frage an die Excel-Experten: Ich möchte von einem Arbeitsblatt per VBA ein anderes mit bestimmten Werten befüllen. Da eine Beschreibung nicht einfach ist, habe ich eine Musterdatei unter [url]http://www.netupload.de/detail.php?img=dd490dc409170bbb8a6915808bc0eab5.xls[/url] abgelegt. Vielleicht kann mir bei meinem Problem jemand behilflich sein. DANKE! Tom

Antwort 1 von M.O.

Hallo Tom,

schau mal hier nach, ob es das ist, was du dir vorgestellt hast.

Gruß

M.O.

Antwort 2 von Tomschi

Guten Morgen!

Habe Deine Datei getest und bin echt erstaunt was man alles mit VBA-Kenntnis machen kann.
DANKE!

Was muss ich tun, wenn sich
a) der Bereich aus "Dienstreise-Antrag" mal ändern sollte?

Cells(lz, 2) = Worksheets("Dienstreise-Antrag").Cells(18, 5)
= Zeile 18, Spalte 5 = E --> ?

b) wo und wie kann ich den Einfügebereich im Blatt "Taggeld" anpassen?

Kann man per VBA noch auf ein ev. vorhandenes doppeltes Datum abfragen?
Wenn nicht, auch kein Problem. Ich mache mir dann halt eine Hilfsspalte und kontrolliere die "Datums-Spalte".

Der Blattschutz spielt offensichtlich keine Rolle, oder?

Thomas

Antwort 3 von M.O.

Hallo Tom,

a) richtig: Cells(Zeile, Spalte)

b) Der Einfügebereich ist mit der Variablen lz bestimmt. Da ich einer Schleife die Variable erhöhe, weise ich lz den Wert 16 zu, was durch die Schleife dann 17 ergibt, die erste Zeile deines Einfügebereichs.

Das mit dem Datum werde ich mal heute abend versuchen einzubauen.

Da du die betreffenden Zellen nicht zum Bearbeiten gesperrt hast, kann man diese auch ohne Problem kopieren. Ggf. kann man den Blattschutz auch per VBA aufheben bzw. wieder einrichten.

Gruß

M.O.

Antwort 4 von Tomschi

Mahlzeit!

Danke für Deine schnelle Antwort!
Steht lz für Zeile 16, oder wie darf ich das verstehen?

lz 32 = gleich die letzte Eingabezeile?

Das Makro funktioniert also auch, wenn ich z. B. zwischen der Spalten C und D eine neue Spalte einfüge, sodass der ehem. D-Eingabebereich nunmehr E wäre.

Was muss ich ändern, wenn z. B. ein weiterer Wert kopiert werden soll?

Beispiel --> noch klar
Cells(lz, 2) = Worksheets("Dienstreise-Antrag").Cells(20, 9)
Und dann ...
Steht Cells(lz, 2) für lz = 16 --> oder 17 ?!?
und 2 für die Spalte B?

Sorry, für die vielen Fragen --> kenne mich mit VBA leider nicht aus.

Thanx

Tom

Antwort 5 von Tomschi

Hi M.O.!

Sorry, vergessen zu fragen:
Was genau definiert in deinem Code, dass nur die Werte und nicht auch die Formate kopiert werden?

Tom

Antwort 6 von M.O.

Hallo Tom,

mit lz suche ich die leere Zeile.
Den ersten Wert, den lz zugewiesen bekommt ist 16, dieser wird durch die Schleife um 1 auf 17 erhöht. Ist lz größer 32, also größer als der Eingabebereich, so kommt eine Fehlermeldung.
Ist dein Eingabebereich noch leer, steht lz also für Zeile 17.

Das Kopieren erfolgt durch den Befehl
Cells(lz, 2) = Worksheets("Dienstreise-Antrag").Cells(20, 9)
Und hierdurch wird der Zielzelle der Wert der Quellzelle zugewiesen.

Fügst du z.B. in der Zieltabelle noch eine Spalte ein, musst du natürlich auch im Makro die Bezüge entsprechend ändern, ansonsten werden die Werte immer in die betreffende Spalte eingefügt:
Bsp: Cells(17,4) = Worksheets("Dienstreise-Antrag").Cells(20, 9)
Hier wird der Wert aus der Zelle I20 vom dem Blatt "Dienstreise-Antrag" in die Zelle D17 des aktuellen Blatts eingefügt.
Soll der Wert aber jetzt in E17 stehen muss der Ausdruck wie folgt aussehen:
Bsp: Cells(17,5) = Worksheets("Dienstreise-Antrag").Cells(20, 9)

Der Cells-Befehl ist wie folgt aufgebaut: Cells(Zeile, Spalte)
Cells(1,1) entspricht der Zelle A1
Cells(2,1) entspricht der Zelle A2
Cells(1,2) entspricht der Zelle B1

Wenn ich das Makro überarbeite füge ich entsprechende Kommentare bei.

Gruß

M.O.

Antwort 7 von M.O.

Hallo Tom,

hier findest du die überarbeitete Datei.
Ich habe das Makro etwas geändert und mit Kommentaren zum besseren Verständnis versehen.

Gruß

M.O.

Antwort 8 von Tomschi

Guten Morgen M.O.!

Werde mir am Wochenende Deine Musterdatei mal näher ansehen.

Vorweg schon mal ein "Vergelt's Gott!"

Tom

Antwort 9 von Tomschi

Hi M.O.!

Nochmal herzlichen Dank für Deine Mühen!
Habe alles - hoffenlich - verstanden.

Eine Frage noch:
Was genau macht der Eintrag "16" in

MsgBox "Das Datum ist bereits vorhanden! Der Kopiervorgang wird abgebrochen!", 16, "Fehler"?

Ich habe am Wochenende ein wenig experimentiert und dabei festgestellt, dass es irgendetwas mit "ja, nein, abbrechen" oder so ähnlich zu tun hat.

Kann man diese Syntax wo nachlesen?

Ciao

Tom

Antwort 10 von M.O.

Hallo Tom,

16 bedeutet in diesem Zusammenhang "Meldung mit Stop-Symbol anzeigen"

Wenn du im VBA-Editor den Cursor direkt vor oder hinter den Befehl "msgbox" setzt und F1 drückst, bekommst du die Hilfe mit einer ausführlichen Beschreibung der Möglichkeiten angezeigt.

Gruß

M.O.

Antwort 11 von Tomschi

Halli Hallo!

DANKE, dass Du mich ein wenig an Deinem großen Wissen teilhaben läßt!
Jetzt bin ich wieder ein wenig schlauer.

Tom

P.S.: Kannst Du zufällig ein VBA-Buch für Anfänger empfehlen?

Antwort 12 von M.O.

Hallo Tom,

leider ist mein Wissen nicht so groß, wie du wohl glaubst ;-).

Wegen des VBA-Buches rate ich dir zum Buchhändler deines Vertrauens zu gehen und mal verschiedene VBA-Bücher durchzublättern. Dann merkst du schnell, welches Buch dir am besten gefällt.
Ich habe mir mal das Buch (noch den Vorgänger) gekauft.

Gruß

M.O.

Antwort 13 von Tomschi

Guten Abend!

Auf jeden Fall hat mir Dein VBA-Wissen sehr viel weitgeholfen!
Danke für den Buch-Tipp.

Ciao - bis zum nächsten Mal ;-)

Tom

Antwort 14 von nighty

hi tomschi :-)

durch recherche in excel foren und ein wenig phantasie lernst du mehr als aus buechern :-))

gtuss nighty