Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
356to360
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
356to360
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range als Variable

Range als Variable
07.01.2004 08:31:03
Flexubi
Hallo,

mein Makro fügt eine variable Anzahl von Datensätzen untereinander in eine neue Tabelle. Einige Spalten werde ausgelassen und dann zeilenweiseeinzeln aus einer anderen Tabelle hinzugefügt. Der Ausgangspunkt ist immer in Spalte V. Nun muss ich die Range V4:V60000 variabel gestalten. Wenn ich z-B. 30 Datensätze eingetragen habe soll er 30 mal zeilenweise die anderen daten hinzufügen. Beim nächsten Durchgang fügt er wieder z.B. 25 Datensätze ein und nun muß die Variable genau eine Zeile unter dem letzten Eintrag der vorherigen 30 beginnen.
Die ersten Zelle am Anfang ist V4.

Ich bekomme das nicht hin mit der Variablen.
Wenn das verständlich war bin ich wahnsinnig dankbar für jede Hilfe

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range als Variable
07.01.2004 09:13:25
Carsten
Hallo Flexubi (real-Name wäre nett),

Du brauchst die Range nicht variabel gestalten. Wenn ich Dich richtig verstanden habe mußt Du nur die letzte freie Zeile finden, also z.B. mit "Selection.End(xlUp).Select" die letzte benutzte Zelle aktivieren, eine Zeile runter und dann Deine Daten einfügen.

Gruß
Cartsen
AW: Range als Variable
07.01.2004 09:19:42
Ralf (Flexubi)
Hallo Carsten,

das klingt schon gut, ich suche auch bereits imer nach der letzten Zeile, die Findet er auch. Beim ersten Durchgang klappt das auch wunderbar, er sortiert die Daten der zweiten Tabelle richtig zu den Datensätzen der ersten Tabelle.
Dann kommt der zweite durchgang und er verrrutscht in den Zeilen.
Die Daten, die er zeilenweise raussammelt, werden über eine bestimmt Zelle pro Zeile abgeglichen, um die richtigen Daten zu bekommen. (Zellen sind eindeutige IDs)

Beim zweiten Durchgang nimmt er nicht die erste ID die er sollte sondern die zweite und fügt mitr die in die 1. Zelle ein.

Das ist sehr schwer zu erklren und der Quellcode ist wirklich sehr sehr groß.
Anzeige
AW: Range als Variable
07.01.2004 09:25:31
Ralf
Hier ist der Quellcode (Auszug)

Dim zwie As Variant
Dim hilf As Variant

hbereich = "V4:V60000"
Columns(1).Select
Selection.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
zeile = ActiveCell.Row


For Each zelle In Range(hbereich)
zelle.Activate
If ActiveCell.Value = "" Then GoTo ENDE

zwie = Worksheets("Ruhende").Cells((hzaehl + zaehl), 4).Value
Windows("Mastertabelle2.xls").Activate
Columns(3).Select
Selection.Find(zwie, After:=ActiveCell, LookIn:=xlValues).Select
hilf = ActiveCell(1, -1).Value
Windows("Betriebsrat.xls").Activate
ActiveCell(1 + hzaehl, -20).Value = hilf

Windows("Mastertabelle2.xls").Activate
hilf = ActiveCell(1, 11).Value
Windows("Betriebsrat.xls").Activate
ActiveCell(1 + hzaehl, 2).Value = hilf
.
.
.

zaehl = zaehl + 1
Next zelle
ENDE:

hzaehl = zaehl - 4

End Sub

Vor diesem Quellcode steht noch was, da werden andere Datensätze kopiert mit unterschiedlich vielen Zeilen.
Variable hilf bekommt den Inhalt der zu kopierenden Zelle
Variable zwie bekommt die ID der Zelle der Zeile in der die Daten eigefügt werden sollen.
Mit der ID suche ich in der Quelltabelle die richtige Zeile und dann die entsprechenden Datensätze.

Brauche da unbedingt Hilfe....


Anzeige
AW: Range als Variable
07.01.2004 09:27:03
Ralf
Wenn mir jemand wirklich helfen kann und will stelle ich auch gerne den Code zur Verfügung. Der Aufbau ist ansich sehr einfach, weil alles widerholt wird.
AW: Range als Variable
07.01.2004 09:29:55
Carsten
Hallo Ralf,

ich bin leider auch nicht fit genug in VBA um mich in einen Code hineinzuarbeiten ohne zu sehen oder zu testen was passiert. Da sind die Experten gefragt.

Gruß
Carsten
AW: Range als Variable
07.01.2004 09:25:46
Carsten
Hast Du denn mal versucht, den Code Schrittweise zu prüfen? Vielleicht fällt Dir da dann auf, warum beim zweiten Durchgang falsche Daten eingelesen werden.
AW: Range als Variable
07.01.2004 09:28:43
Ralf
Ja, zig male, aber ich vertsehe nicht warum er das beim zweiten durchgang anders zählt als beim ersten. Hat wohl was mit den globalen Variablen zu tun bzw mit den anderen Variablen....ich weiß es einfach nicht mehr... leider habe ich nie VB gelernt und bin auch kein Programmierer... bin Systemintegrator und NEtzwerktechniker... also eigentlich garnicht mein Ding, aber es muss.....
Anzeige
NOCH OFFEN
07.01.2004 10:09:39
Carsten
Sorry Ralf, ich muss passen.

Gruß
Carsten
AW: NOCH OFFEN
07.01.2004 10:21:41
@Carsten und anderef
Kein Problem,

mein Problem hat sich nun herauskristallisiert. Es liegt wirklich nur daran dass er falsch anfängt zu zählen, vielleicht kannst mir so nen Tip geben.
Ich aktiviere Range "V4:V60000". Nun werden 30 Zeilen eingefügt und er fängt oben an zu zählen zeile für zeile und fügt die anderen Daten hinzu, ohne Fehler.
Dann startet der zweite Durchgang und da liegt der Fehler: Er fängt wieder oben an zu zählen..also bei V4 und nicht in der ersten neu eingefügten Zeile bei V (hier wäre das also V31). Darin liegt das Problem. Wie kann ich ihm sagen, dass er dann da wiedser anfängt, ohne die bereits abgearbeiteten wieder zu zählen?
Anzeige
AW: NOCH OFFEN
07.01.2004 11:04:20
Carsten
Hallo Ralf,

wie schon gesagt, ich würde nicht fix in V4 anfangen sondern von Anfang an die erste freie Zeile suchen.

Gruß
Carsten
AW: NOCH OFFEN
07.01.2004 10:27:16
y
hi ralf,
duch den nur ansatzweisen auszug aus dem code kann man nur orakeln aber überprüf mal die variable "zaehl", im ersten durchgang könnte sie bei 0 und im zweiten bei 1 beginnen weil du zuweisung relativ spät setzt
cu Micha
AW: NOCH OFFEN
07.01.2004 10:50:39
Ralf @Mich
Hi Micha,

klasse dass du dir den Code anschaust. Im oberen teil des Codes, den ich nicht hier im Forum habe, setzt ich zwei Variablen. 1. Index und 2. zaehl. Index beginnt bei 1 und wird jedesmal um 1 unkrementiert. zaehl wird Index + 3 gesetzt, damit das Einfügen in der Tabelle bei Zelle 4 beginnt, wegen Überschriften und so.

Dan sind da noch zwie und hilf, bereits erklärt.hzaehl ist global und wird immer zaehl -4 gesetzt, um die richtige Zeilennummer für den nächsten Durchgang zu übergeben, aber das klappt leider nicht.

Die Range V4::V60000 ist denke ich der Fehler. Ich muß ihm sagen dass er da anders einsteigen soll. Bei einem neuen Durchgang die erste neu eingefügte Zeile. Bsp. 1. Durchgang 30 Zeilen, 2, Durchgang 20 Zeilen, also soll er bei 31 anfangen und dann wieder einzeln die 20 zählen.. ich weiß, sehr kompliziert.sorry.

Danke

Ralf
Anzeige
AW: NOCH OFFEN
07.01.2004 11:05:15
y
hi Ralf,
vielleicht solltest du mal eine (zwei) beispieldatei(en) hochladen damit das problem besser begriffen werden kann
cu Micha
AW: NOCH OFFEN
07.01.2004 11:15:39
@ Micha @ Carsten...
habe nun euren Rat befolgt und suche die letzte freie Zeile, das klappt nun auch mit dem zweiten Durchgang. Jetzt übergibt er leider nicht mehr die Variable hzaehl in den dritten durchgang.. Willst du die Datei mal haben? Wie gesagt, vom Verständins her ist sie nicht schwierig...
AW: Range als Variable
07.01.2004 10:54:58
Martin Beck
Hallo Ralf,

nix für ungut, aber der Codeschnipsel, den Du gepostet hast, ist programmiertechnisch schlecht und daher kaum durchschaubar. Besonders negativ ist das ständige Select/Activate.

Das soll hier kein Vorwurf sein (Du hast ja schon geschrieben, daß Du keine "Programmierer" bist), sondern nur erklären, warum Du keine konkrete Antwort auf Deine Frage bekommst, die "im Prinzip" sehr einfach ist.

Wenn ich Dich richtig verstehe, werden (u.a.) in Spalte V untereinander Daten eingetragen, und zwar in mehreren Durchläufen. Ein Durchlauf soll dort beginnen, wo der vorherige aufgehört hat, d.h. wenn Spalte V z.B. bis V30 gefüllt ist, soll im nächsten Durchlauf die erste Zahl in V31 eingetragen werden. Ist das so richtig?

Wenn ja, mußt Du also vor bzw. am Anfang eines jeden Durchlaufs die Zeiel mit dem letzten Eintrag in Spalte V bestimmen und 1 dazuaddieren. Das geht so:


Sub erste_leere_Zeile_in_Spalte_V()
z = Range("V65536").End(xlUp).Row + 1
MsgBox z
End Sub


Die gesuchte/gefundene Zelle in der Spalte V kannst Du dann in Deinem Code so ansprechen:

Cells(z, 22)

Gruß
Martin Beck

P.S. Rückmeldung wäre nicht schlecht.
Anzeige
AW: Range als Variable
07.01.2004 11:25:38
@ Martin Beck
Hallo,

vielen Dank für die Info, das sieht sehr gut aus und scheint soweit zu funktionieren. Klar ist das alles nicht sehr sauber programmiert, das weiß ich ja.Aber ich bin froh wenn es läuft. Das Select/Activate ist deswegen weil es immer nur um eine einzige Zelle geht die gefiltert werden muß und kopiert. Und diese muß vorher genau bestimmt werden, da diese Zelle sonst nicht zu dem bereits kopierten Datensatz passt. Ich sollte dazu sagen dass die beiden Mastertabellen aus denen kopiert wird Personenbezogene Daten enthalten und somit auch Personalnummern, also eindeutig, also kopiere ich einen Teil, nehme die Pers.Nr als ID und suche damit die Datensätze zu der Nummer die in einer Zeile der anderen Tabelle stehen, deswegen das "zappen". Geht bestimmt auch anders...keine Frage. .-)

Vielen vielen Dank für die Hilfe, bin für jeden Rat und Kitik dankbar
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige