Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: select - aber das Gegenteil

select - aber das Gegenteil
Jörg-HH
Hallo zusammen
1. Frage - was mir der Rekorder nicht zeigt: Wenn ich die Selection per Mausklick (zB eines Rahmens) mit Escape aufheben will - wie nennt man das in VBA?
2. Frage - wenn ich einen Rahmen aufziehe, schreibt der Rekorder immer ein select dahinter. Möchte ich das vermeiden und lösche es, gieps Gemecker. Warum muß da das select stehen?
Grüße - Jörg
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: select - aber das Gegenteil
04.09.2010 19:03:23
Daniel
Hi
der Rekorder zeichnet (fast) alles auf, was du machst, das geht in vielen Fällen, insbesondere beim Arbeiten mit Zellen nicht anders.
Im VBA-Code ist das Selektieren allerdings überflüssig und störend, weil es den Code langsam und schwer verständlich macht.
Wenn man Aktionen mit dem Recorder aufgezeichnet hat, dann sollte man die .Selects und Selection. immer entfernen:
dh aus
Range("A1").Select
Selection.Copy

wird
Range("A1").Copy

gleiches gilt für Tabellenblätter:
Sheets("Tabelle1").Select
Range("A1").Select
Selection.ClearContents

wird zu
Sheets("Tabelle1").Range("A1").ClearContents

weil man in VBA keine SELECTS braucht, muss man eine Selection auch nicht aufheben, es geht auch nicht, wenn, dann muss man halt eine andere Zelle selektieren.
Gruß, Daniel
Anzeige
AW: select - aber das Gegenteil
04.09.2010 19:04:32
Hajo_Zi
Hallo Jörg,
nur wenige sehen Deinen Original code und Deinen veränderen Code.
Gruß Hjao
Beispiel
04.09.2010 19:19:24
Jörg-HH
Hallo,
dies sagt der Recorder, wenn ich einen Rahmen erstellt habe:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 177.38, 1963.34, 686.15, 364.3).Select
Auf dem Tabellenblatt hat das Ding dann die acht Kuller drumherum. Zieh ich mehrere Rahmen auf, hat immer der letzte die Kuller. Die will ich weghaben, aber ohne dafür eine andere Zelle zu selektieren.
Wenn ich das .select am Ende einfach lösche, gieps Mecker...
Grüße - Jörg
Anzeige
AW: Beispiel
04.09.2010 19:37:05
Daniel
Hi
naja, irgendwas musst du mit dem Shape ja machen, z.B.
einen Namen vergeben:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 686.15, 364.3).Name = "Hallo"
einer Objektvariablen zuweisen:
Dim rect As Shape
Set rect = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 686.15, 364.3)
oder die WITH-Klammer öffnen, um bei dem soeben erstellten Objekt die weiteren Eigenschaften zu ändern:
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 686.15, 364.3)
...
End With
ansonsten kannst du auch einfach nach dem Erstellen des Rechtecks eine andere Zelle selektieren, aber das habe ich ja schon beschrieben.
wenn du die Grafikelemente wie vom Recorder aufgezeichnet mit .Select erstelltst, musst du eine andere Zelle selectieren, denn irgendwas muss in Excel immer selektiert sein, deswegen gibts auch keinen Befehl zum Aufgeben der Selektion, man kann die Selektion von einem Objekt nur dadurch wegnehmen, daß man ein anderes selektiert.
(ist wie in der Politik, der Bundestag kann den alten Bundeskanzler nicht abwählen, wenn der alte weg soll, geht das nur über Wahl eines neuen)
btw. warum hast du in deiner Eingangsfrage nicht gleich erwähnt, daß es sich um Grafikelemente und nicht um normale Zellen handelt?
Gruß, Daniel
Anzeige
Eingangsfrage...
04.09.2010 20:20:32
Jörg-HH
...hab ich doch erwähnt...
"...Wenn ich die Selection per Mausklick (zB eines Rahmens) mit Escape aufheben will..."
aber ich hab den Knoten verstanden: Das With-Element hatte ich zu spät gesetzt
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 95.1, 2334.63, 82.21, 88.66).Select
With Selection.ShapeRange
.Fill.ForeColor.SchemeColor = 22
.Line.Visi...usw
dachte mir, erst muß add erledigt sein, dann kann with was machen :-) und selection gestrichen und beim with statt Selection irgendwas anderes geschrieben
langsam wird mir klar, warum irgendwer mal geschrieben hat, hier im Forum lernste mehr als aus Büchern...
Grüße - Jörg
Anzeige
AW: Eingangsfrage...
04.09.2010 21:29:51
Daniel
Hi
naja "Rahmen" ist ein mehrdeutiger begriff, daß könne auch der dicke Rahmen sein, wenn du mehrere Zellen gleichzeiitig selektierst.
Gruß, Daniel
:-))
05.09.2010 00:55:14
Jörg-HH
...stimmt - man sollte das Gehirn einschalten, bevor man den Mund aufmacht bzw. die Finger über die Tasten krümmt...
Ergänzung
04.09.2010 22:07:29
Jürgen
Hallo Daniel,
nur der Vollständigkeit halber: machen MUSS man nichts mit dem erstellen Objekt. Dazu lässt man einfach die Klammern um die Parameter weg, also einfach
ActiveSheet.Shapes.AddShape msoShapeRectangle, 177.38, 1963.34, 686.15, 364.3
Setzt man die Klammern, gibt es einen Rückgabewert (in diesem Fall ein Shape-Objekt), mit dem etwas geschehen muss, lässt man die Klammern weg, gibt es auch keinen Rückgabewert.
Gruß, Jürgen
Anzeige
AW: Danke
04.09.2010 22:42:40
Daniel
das sind so die Feinheiten, die man sonst nirgenwo erklärt bekommt
Gruss, Daniel
AW: Ergänzung
05.09.2010 01:05:23
Jörg-HH
Hi Jürgen
das is ja noch näher an meinen Gedanken als Karins Idee. Da ich das ohne Linie und in grau haben will, muß ich dann aber doch mit Klammer schreiben
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 95.91, 2000, 80.16, 425)
.Fill.ForeColor.SchemeColor = 22
.Line.Visible = msoTrue
End With
Ich finds ja immer wieder spannend, wenn von den Profis jeder nochmal in seinem Täschchen kramt und noch ein Häppchen zur Suppe beitragen kann, das andere Profis noch nicht kannten :-)
Gute Nacht an alle...
Anzeige
AW: Beispiel
04.09.2010 20:12:13
Beverly
Hi Jörg,
Sub RechteckErstellen()
Dim shShape As Shape
Set shShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 177.38, 1963.34, 686.15, 364.3)
Set shShape = Nothing
End Sub



Anzeige
ahhh...
04.09.2010 20:23:27
Jörg-HH
...so geht das also...
:-)
genau das meinte ich, Karin. Wär nur nie von selbst auf den Weg über Dim und Set gekommen.
Danke euch allen...
Schönes WE! - Jörg
;
Anzeige
Anzeige

Infobox / Tutorial

Auswahl aufheben in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstellen eines Shapes: Um ein Shape in Excel zu erstellen, benutze den Befehl ActiveSheet.Shapes.AddShape. Beispiel:

    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)
  2. Vermeidung von .Select: Um zu verhindern, dass eine Selektion aufgerufen wird, kannst du den Befehl einfach ohne .Select ausführen. Zum Beispiel:

    ActiveSheet.Shapes.AddShape msoShapeRectangle, 10, 10, 100, 50
  3. Objektvariablen nutzen: Weisen Sie das Shape einer Objektvariablen zu, um es später zu verwenden, ohne .Select zu benötigen:

    Dim rect As Shape
    Set rect = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 50)
  4. Eigenschaften setzen: Verwende die With-Anweisung, um die Eigenschaften des Shapes zu bearbeiten, ohne es zu selektieren:

    With rect
       .Fill.ForeColor.SchemeColor = 22
       .Line.Visible = msoTrue
    End With

Häufige Fehler und Lösungen

  • Fehler: Gibt es einen Rückgabewert?

    • Lösung: Wenn die Klammern um die Parameter weggelassen werden, gibt es keinen Rückgabewert und somit ist kein weiteres Handeln erforderlich.
  • Fehler: Mecker beim Löschen von .Select

    • Lösung: Wenn du .Select aus dem Recorder-Code entfernst, stelle sicher, dass die Selektion nicht notwendig ist. Verwende stattdessen Objektvariablen.

Alternative Methoden

  • Shapes ohne Selektion erstellen: Anstatt Shapes zu selektieren und zu bearbeiten, kannst du sie direkt mit einer Objektvariablen ansprechen, wie bereits beschrieben. Dies beschleunigt den Code und erhöht die Lesbarkeit.

  • Direktes Arbeiten mit Eigenschaften: Anstatt die Selektion aufzuheben, kannst du direkt auf die Eigenschaften des Shapes zugreifen, ohne es vorher selektieren zu müssen.


Praktische Beispiele

  1. Rechteck erstellen und Eigenschaften setzen:

    Sub RechteckErstellen()
       Dim shShape As Shape
       Set shShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 177.38, 1963.34, 686.15, 364.3)
       With shShape
           .Fill.ForeColor.SchemeColor = 22
           .Line.Visible = msoTrue
       End With
       Set shShape = Nothing
    End Sub
  2. Aktive Zelle ändern ohne Selektion:

    Sub ZelleAendern()
       ActiveSheet.Range("A1").Value = "Test"
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Fehler durch nicht deklarierte Variablen zu vermeiden.
  • Schreibe lesbaren Code: Halte den Code so klar wie möglich, indem du erklärende Variablennamen verwendest und unnötige .Select-Befehle vermeidest.
  • Nutze Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Fehler zu vermeiden.

FAQ: Häufige Fragen

1. Warum sollte ich .Select vermeiden? Die Verwendung von .Select verlangsamt den Code und macht ihn schwerer verständlich. Durch den direkten Zugriff auf Objekte wird der Code effizienter.

2. Was ist der Unterschied zwischen Set und ohne Set? Set wird verwendet, um Objektvariablen zu setzen, während der Befehl ohne Set für einfache Variablen verwendet wird. Bei Shapes ist Set notwendig, um die Referenz zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige