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

Bereichsnamen in Range-Objekt?

Bereichsnamen in Range-Objekt?
20.08.2002 14:46:57
Peter Weil
Hallo Excel Profis,
hab ein kleines Problemchen und ich seh den Wald vor lauter Bäumen nicht mehr.

Ich möchte bei dem folgenden Spezialfilter Makro bei Range einen Bereichsnamen (z.B. "Mack1") anstatt der Angabe "A3:A500 einsetzen, da ich diesen Bereich variabel halten möchte.

Sheets("Tabelle2").Select
Sheets("Tabelle1").Range("A3:A500").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A4"), Unique:=True

Die folgende Variante klappt aber nicht?

Sheets("Tabelle2").Select
Sheets("Tabelle1").Range("Mack1").AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A4"), Unique:=True

Bin im Moment etwas ratlos. Weiß jemand die Lösung.

Grüße
Peter


11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Bereichsnamen in Range-Objekt?
20.08.2002 14:55:02
Nike
Hi,
ich möchte ja nichts böses unterstellen,
aber könnte es sein, das du den Namen in Tabelle2 vergeben hast?

Bye

Nike

Re: Bereichsnamen in Range-Objekt?
20.08.2002 15:13:07
andre
Hallo Peter,
das select funktioniert so, und bestimmt auch der Rest:
Macke = Names("mack1").RefersToRange.Address
Worksheets("Tabelle1").Range(Macke).Select
gruss andre
Re: Bereichsnamen in Range-Objekt?
20.08.2002 15:47:25
Peter Weil
@ Andre, @ Nike,
erst einmal vielen Dank für die schnellen Antworten ("Unterstellungen").
Also der Name ist auf jeden Fall in Tabelle1 vergeben worden.

Andre mit deiner Antwort bin ich zwar ein wenig schlauer aber ins Gesamt komme ich mit deinem Ansatz nicht weiter.

Sheets("Tabelle1").Select
Macke = Names("Krit1").RefersToRange.Address
Sheets("Tabelle2").Select
Sheets("Tabelle1").Range(Macke).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A4"), Unique:=True

Also wie gesagt der Bereich "Krit1" befindet sich auf Tabelle1.
Die gefilterten Daten sollen aber auf Tabelle2 A4 abgelegt werden. (Klappt ja auch mit der Rangeangabe A3:A500 einwandfrei)
Wahrscheinlich habe ich die Ubergaben von Tabelle1 nach Tabelle2 nich richtig gesetzt
Könntest du mir noch einmal einen Tip geben.

Gruß
Peter

Anzeige
Re: Bereichsnamen in Range-Objekt?
20.08.2002 17:18:50
Andre
Hallo Peter,
habe es mal mit Deinem Code ausprobiert. Wenn der Zielbereich leer ist, funkts. Wenn im Zielbereich dasselbe steht auch. Wenn dort aber was anderes steht dann kommt eine Fehlermeldung. Wenn ich mich recht entsinne, musst Du den Zielbereich vorher leeren oder die Daten an einen vollen Bereich dranhängen.
gruss andre
Re: Bereichsnamen in Range-Objekt?
20.08.2002 18:08:11
Charlie
Hallo, Peter!

Lass das ständige Hin- und Herselecten bleiben. Es ist nicht nur unnötig, sondern auch problematisch, wenn es um die Referenzierung der Tabellen und der Zellbereiche bzw. Namen geht. Starte das Makro von dort aus, wo Du Dich gerade in der Tabelle befindest und verweise nur auf den Zeilbereich bzw. die Zielzelle.

Was mir noch aufgefallen ist: Der AdvancedFilter ohne CriteriaRange kopiert Dir die ganze Tabelle.

Ach ja: Vor dem Kopieren den Einfügebereich zu leeren kann nicht schaden, damit nicht beim nächsten Kopieren "alte" Daten übrig bleiben, wenn weniger Daten kopiert werden als zuletzt.

Viel Erfolg,
Charlie

Anzeige
Re: Bereichsnamen in Range-Objekt?
20.08.2002 20:48:32
Peter Weil
Hallo Andre,
nochmals vielen Dank für deinen zweiten Beitrag.
Hab von deinem Vorschlag noch einmal beide Zeilen genommen und dann gings.

Vielen Dank
Peter

(Charlies Ansatz ist da natürlich etwas eleganter als mein Makro-Rekorder Murks)

Re: Bereichsnamen in Range-Objekt?
20.08.2002 20:57:34
Peter Weil
Hallo Charlie,

besten Dank für deine Lösung. Bin leider nicht so fit in VBA und arbeite halt noch viel mit dem Makro-Rekorder.
Was ich allerdings nicht verstanden habe war die Zeile mit
(CriteriaRange:=Tabelle1.Range("F1:F4"), _).

Wofür soll das gut sein?
Was muß in Tabelle1 an der Stelle stehen?

Also bei meiner Beispiel-Datei wird auch mit dieser Zeile die komplette Liste aus Tabelle1 nach Tabelle2 ungefiltert kopiert.
Erst wenn ich (Unique:= True) setze bekomme ich die Liste gefiltert in Tabelle2 angezeigt.

Also beide Varianten von dir laufen prima.
Nochmals vielen Dank

Gruß
Peter



Anzeige
Re: Bereichsnamen in Range-Objekt?
20.08.2002 21:14:03
Charlie
Hallo, Peter!

Das CriteriaRange legt die Filterkriterien fest, die dem Filter zu Grunde gelegt werden sollen. Beispiel:
In den A steht in A1 die Spaltenüberschrift Vornamen und darunten - na klar - Vornamen. Du willst z.B. Datensätze filtern, in denen 3 Vornamen vorkommen. Also schreibst Du in F1 die Spaltenüberschrift von A ("Vornamen") und darunter die Namen, die gefiltert werden sollen. Das Untereinanderschreiben in einer Spalte bewirkt praktisch ein "ODER".

Das war eben nur ein Beispiel. Der Kriterienbereich kann sich auch über mehrere Spalten erstrecken und Du kannst kombinieren: Hast Du z.B. in B die Nachnamen stehen, kannst Du eben nach der Kombination filtern. Dazu musst Du den Kriterienbereich auch auf G ausweiten. F1 = Spaltenüberschrift der Spalte A und darunter die Vornamen, G1 = Spaltenüberschrift der Spalte B und darunter die Nachnamen. In diesem Fall werden die Kriterien mit "UND" verknüpft.

Dass in meinem Beispiel bei Dir auch die ganze Tabelle kopiert wurde wird daran liegen, dass der Bereich F1:F4 leer ist. Kein Suchkriterium führt eben zum Kopieren der gesamten Tabelle, weil alle Datensätze den "Kriterien" entsprechen.

Ich hoffe, das war jetzt einigermaßen verständlich ?!?!?

Gruß,
Charlie


Anzeige
Re: Bereichsnamen .. Nachtrag
20.08.2002 21:22:18
Charlie
Hallo, Peter!

Unique:=True bedeutet, dass auch doppelte Datensätze im Filter angezeigt werden, Unique:=False, dass doppelte Datensätze nur 1x vorkommen dürfen.

Was ich in Deinem Beispiel eben nicht verstanden habe ist, dass Du den AdvancedFilter ohne Kriterium verwendet hast. Denn das Ergebnis ist in diesem Fall doch, dass eine ganze (ungefilterte) Tabelle in eine andere kopiert wird. Dafür wäre der übliche Weg eher: ...Range("Irgendwas").Copy Destination:="Wieder irgendwas".

Gruß,
Charlie

Re: Bereichsnamen .. Nachtrag
21.08.2002 08:38:18
Peter Weil
Hallo Charlie,

Noch einmal vielen Dank für die Mühe die du dir mit mir gemacht hast. Deine Erläuterungen zu dem letzten Punkt habe ich jetzt auch verstanden und auch gleich einmal an einem Beispiel ausprobiert.
Nur mit dem Unique:= False/True ist es bei meinem Beispiel genau anders herum als du es beschrieben hast.
Ich werde also noch ein wenig herum probieren.
Nochmals vielen, vielen Dank. Das war echt super von dir.

Gruß
Peter

Anzeige
Re: Bereichsnamen .. Nachtrag
21.08.2002 10:59:12
Charlie
Hallo, Peter!

Das stimmt auch so! Wo hatte ich da nur meine Gedanken, als ich Dir diesen Blödsinn aufschwatzen wollte.

Unique:=True bedeutet selbstverständlich, das jeder Datensatz nur 1x (Unikat!!) vorkommen darf.

Sorry, ich wollte Dich nicht absichtlich verwirren, das ist mir irgendwie passiert. :(

Viele Grüße,
Charlie

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige