Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1072to1076
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kopier-Makro verbessern

Kopier-Makro verbessern
17.05.2009 10:05:21
Claudia
Hallo zusammen,
ich nutze folgendes Makro zum kopieren:

Private Sub Zeilen_kopieren_wenn_bestimmter_inhalt()
Dim i As Integer
Dim r As Range
j = 2 'Zeile, mit der der Eintrag in der neuen Tabelle beginnen soll
x = Range("a65536").End(xlUp).Row 'letze benutze zeile
For i = 2 To x
If Worksheets("aktiv").Cells(i, 14).Value = "Fehler" Then 'Cells(i,1) bedeutet suche in Spalte  _
A
Worksheets("Fehlerbearbeitung").Rows(j).Columns("A:Z").Value = Worksheets("aktiv").Rows(i). _
Columns("A:Z").Value 'alle Zeilen mit Spalten a bis F
j = j + 1
End If
Next i
End Sub


Folgende Änderungen hätte ich gerne, habe aber leider aufgrund meiner VBA-Kennntnisse nicht die Chance (der Makrorekorder hilft halt hier leider nicht).
1.
Kopiert werden soll immer aus dem aktiven Tabellenblatt, so dass die Abfrage nach dem ersten Tabellenblatt (der Einfachheit halber hier aktiv genannt) schon einmal wegfallen könnte.
2.
Der zu suchende Begriff soll sich aus der Eingabe in eine Inputbox ergeben. Toll wäre es, wenn beim Start der Wert der aktiven Zelle in der Inputbox vorbelegt werden könnte . Das würde mir in vielen Fällen die Eingabe ersparen.
3.
In welches Blatt kopiert werden soll, soll ebenfalls per Inputbox festgelegt werden. Hier mit der Besonderheit, wenn das Blatt noch nicht existiert, dass es angelegt wird. Andernfalls wird in das bestehende Blatt kopiert.
4. In das Blatt in das kopiert wird, sollen die zu kopierenden Zeilen ab der ersten leeren Zeile eingefügt werden. Derzeit ist das fest vorgegeben. Was unschön ist, wenn da bereits schon Zeilen belegt sind.
5. Die Möglichkeit einer leichten Änderung
- die Zeile kopieren und im alten Blatt stehen lassen
oder
- die Zeile kopieren und im alten Blatt auch dann löschen.
Ich weiß, dass ich unverschämt von mir. Aber ohne Eure Hilfe bekomme ich es nicht geschafft.
Vielen vielen Dank!
Liebe Grüße
Claudia

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopier-Makro verbessern
17.05.2009 12:35:41
Josef
Hallo Claudia,
statt über Inputboxen, würde ich das über ein kleines UF lösen.
Hier ein Beispiel:
https://www.herber.de/bbs/user/61881.xls
Gruß Sepp

Kopier-Makro erweitern usf...!
17.05.2009 13:37:34
Luc:-?
Hallo, "unverschämte" Claudia;
als Auftragspgmierung will ich das zwar noch nicht bezeichnen, aber es könnte schon etwas dauern, vorausgesetzt, jemand nimmt sich die Zeit... ;-)
Vorerst auf die Schnelle nur soviel...
zu 1.: Worksheets("aktiv") in deinem Sinn schreibt man ActiveSheet.
zu 2.: So etwas habe ich hier wohl schon mal gepostet. Grabe dich mal durch's Herber-Archiv unter InputBox, dürfte 'ne ganze Menge zusammenkommen... Ich empfehle Deklarierung einer Konstanten Const blattZelleErst As String = "bname ; zelle", natürlich mit realem Blattnamen und realer Zelladresse (da so etwas am PgmAnfang steht, lässt es sich b.Bed auch leicht ändern). Außerdem benötigst du eine statische Variable (1x erhaltener Wert bleibt während der ganzen Dauer der PgmNutzung in einer xlSitzung bzw bis zur Neubelegung erhalten) Static blattZelleLetzt As String und eine normale Variable Dim blattZelleAkt As String. Am PgmAnfang muss dann noch vor der InputBox blattZelleLetzt abgefragt wdn → If blattZelleLetzt = "" Then blattZelleLetzt = blattZelleErst. Die Zeile mit der InputBox lautet dann blattZelleAkt = InputBox(param...), wobei du den Parameter Default durch blattZelleLetzt ersetzen musst. Anschließend muss nur noch der Eingabeabbruch (If blattZelleAkt = "" Then Exit Sub Else blattZelleLetzt = blattZelleAkt abgefangen und blattZelleAkt in Blattname und Zelladresse zerlegt wdn bz = Split(blattZelleAkt, ";"): bz(0) = Trim(bz(0): bz(1) = Trim(bz(1), wobei bz am PgmAnfang als Variant zu deklarieren ist. Mit bz(0) und bz(1) kannst du dann Blattname Sheets(bz(0)) und Zelle Range(bz(1)) bestimmen. Du kannst natürlich auch blatt As Worksheet und zelle As Range deklarieren und dann gleich Set blatt = Worksheets(Trim(Split(blattZelleAkt, ";")(0))): Set zelle = Range(Trim(Split(blattZelleAkt, ";")(1))) schreiben. Die Variable bz könnte dann entfallen. Die vbFkt Trim dient der Sicherheit, falls sich Leerzeichen an Anfang u/o Ende der Teiltexte einschleichen.
So, das wäre schon mal ein Anfang, den du schreiben und testen könntest. Bei 3. bis 5. wird dir dann sicher auch noch geholfen wdn können, falls du mit den vielen Inhalten des Archivs zu diesen Themen nicht allein weiter kommst...
Ansonsten gilt, wer VBA einsetzen will, sollte VBA erlernen - zur eigenen Sicherheit!
Gruß Luc :-?
Anzeige
@ Sepp
17.05.2009 16:52:48
Claudia
Hallo lieber Sepp,
das ist noch besser als was ich mir gewünscht habe. :-) Das ist schon phänomenal.
Vielen vielen Dank an Dich!
Eine Bitte hätte ich aber jetzt doch noch, eigentlich sind es zwei. :-)
Könntest Du in der Userform noch die Zeilennummer (voreingestellt = 2) ab der gesucht weden soll
und
die Spalten-Nr. des Suchbegriffs (voreingestellt = N) einbauen. Bei der Spalte wenn möglich die Bezeichnung des Buchstabens. Ansonsten muss ich umrechnen, das wäre aber nicht so schlimm.
Wärst Du so lieb?
Liebe Grüße
Claudia
AW: @ Sepp
17.05.2009 17:16:53
Josef
Hallo Claudia,

Die Datei https://www.herber.de/bbs/user/61883.xls wurde aus Datenschutzgründen gelöscht


Gruß Sepp

Anzeige
vielen vielen lieben dank,
17.05.2009 18:19:35
Claudia
es klappt prima.
Schönen Abend
Claudia

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige