Antwort 1 von M.O. vom 11.07.2019, 20:05 Options
Hallo Tom,
schau mal
hier nach, ob es das ist, was du dir vorgestellt hast.
Gruß
M.O.
Antwort 2 von Tomschi vom 12.07.2019, 08:47 Options
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. vom 12.07.2019, 10:58 Options
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 vom 12.07.2019, 12:55 Options
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 vom 12.07.2019, 12:56 Options
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. vom 12.07.2019, 13:42 Options
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. vom 12.07.2019, 19:32 Options
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 vom 13.07.2019, 07:11 Options
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 vom 16.07.2019, 13:15 Options
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. vom 16.07.2019, 15:33 Options
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 vom 16.07.2019, 16:02 Options
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. vom 16.07.2019, 19:56 Options
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 vom 16.07.2019, 20:05 Options
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 vom 16.07.2019, 20:09 Options
hi tomschi :-)
durch recherche in excel foren und ein wenig phantasie lernst du mehr als aus buechern :-))
gtuss nighty