Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1080to1084
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

Verständnisfrage ...

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
habs noch etwas verkürzt ...
17.06.2009 20:16:30
Matthias
Hallo Excelfreunde
Ok, ein Stückchen kürzer als vorhin.

Sub mit_Abfrage()
If Range("Bereich1").Column > Range("Bereich2").Column Then
Range("Bereich1").Cut
Range("Bereich2").Insert Shift:=xlToRight
Else
Range("Bereich2").Cut
Range("Bereich1").Insert Shift:=xlToRight
End If
End Sub


Hat jemand noch bessere Vorschläge?
Gruß Matthias

Absolut : Namen per INDIREKT() definieren
18.06.2009 10:22:42
NoNet
Hallo Matthias,
ich schliesse mich Daniels Erklärung an.
Noch eine Zusatzbemerkung : Die Bereichsangabe B2:B3 im Code ist ja - im Gegensatz zum Bereichsnamen "Bereich1" - absolut.
Das gleiche Ergebnis könntest Du per Bereichsnamen erreichen, wenn Du diese auch "absolut" definierst, also nicht verschiebbar :
Name : Bereich1 - Bezieht sich auf : =INDIREKT("$B$2:$B$3")
Name : Bereich2 - Bezieht sich auf : =INDIREKT("$C$2:$C$3")
Dann verhält es sich wie im Sub mit_Range().
Gruß, NoNet
Anzeige
Danke ... oT
18.06.2009 17:09:09
Matthias
AW: Verständnisfrage ...
17.06.2009 20:24:40
Daniel
Hi
naja, der Unterschied ist, wenn du im Code Range("B2") verwendest, dann wird immer die Zelle B2 verwendet, egal was der Anwender sonst noch mit der Datei macht, insbesondere Zellen löschen und verschieben.
dh wenn du z.B. die Spalte A löschst, dann wird die Zelle B2 ja zu A2.
Das ist deinem Makro aber egal, weil es von dem löschen nichts weiß, und wird weiterhin B2 verwenden.
anders siehts aus, wenn du einen Namen auf B2 referenzierst und diesen im Makro verwendest: Range("DeinName").
In diesem Fall würde der Name aktualisiert und falls du Spalte A löschst, würde ich dein Makro jetzt nicht mehr auf B2 sondern auf A2 beziehen.
Beim Vertauschen von Zellen werden also auch die Namen mitgetauscht und wenn du die Linke Zelle ausschneidest und sie vor der rechten wieder einfügst, passiert ja nichts.
Ein solches Verhalten kann also durchaus sinnvoll sein, wenn du eine Datei hast, deren Struktur nicht bombenfest steht und vom Anwender noch Spalten eingefügt und gelöscht werden können.
Denn die Namen passen sich automatisch an und du musst dein Makro nicht ändern, nur weil der Anwender ein paar weitere Spalten eingefügt oder glöscht hat.
außerdem ist es viel einfacher, sich einen griffigen Namen zu merken als einen Abstrakten Zellbezug, du musst also während der Programmierung viel weniger nachschauen, welcher Zellbezug jetzt gebraucht wird, vorallem wenn es viele sind.
Da tut man sich mit Namen einfach leichter.
Gruß, Daniel
Anzeige
Spalten löschen ist aber verboten ;o)
17.06.2009 20:39:02
Matthias
Hallo Daniel
naja, soweit wollte ich jetzt nicht gleich gehen, das ein Anwender eine Spalte löscht.
Es ging ja wirklich nur darum, mache ich es mit Namen oder mit Range.
Wahrscheinlich ist dann aber eher Range besser, sonst läufts auf einen Laufzeitfehler 1004 hin.
Ich denke nochmal drüber nach.
Ich danke Dir für Deinen Beitrag
Gruß Matthias
AW:Warum denn?
17.06.2009 20:42:47
Daniel
schränke deine Anwender doch nicht so ein ;-)
was besser und was schlechter ist, kann man doch so allgemein nicht sagen, es hängt halt vom Anwendungsfall ab. Und der Laufzeitfehler liegt sicherlich nicht an der Verwendung von Namen.
Gruß, Daniel
Anzeige
ich schränke nur mich selber ein ;o)
17.06.2009 20:59:33
Matthias
Hallo Daniel
Zitat
der Laufzeitfehler liegt sicherlich nicht an der Verwendung von Namen.
Natürlich, liegts am Namen
Wenn ich einen Namen definiere der in Spalte C vorhanden ist und der Anwender diese Spalte löscht,
kommt es zum Laufzeitfehler, da auch der Name gelöscht wird.
VBA findet dann Range("Bereich1") bzw. Range("Bereich2") nicht mehr.
Ist ja aber auch nicht relevant. Hatte ja geschrieben ist nur eine Verständnisfrage.
Es gibt kein derartigen Projekt.
Danke für Deinen Beitrag
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige