Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Range-Objekt setzen ohne select

Range-Objekt setzen ohne select
21.07.2019 08:48:16
Jens
Moin mal wieder:-)
Ich bin immer noch dabei, die 'selects' zu eliminieren.
Folgender Code funktioniert nur, wenn das Tabellenblatt 'Overview' auch selektiert ist, was ich natürlich vermeiden möchte:-)
Sub Spalten_Formatieren()
Dim i As Long
Dim rng, outRng As Range
If Blatt.Name = "Overview" Then
For i = 2 To 20 Step 2
Set rng = Sheets("Overview").Range(Cells(3, i), Cells(LZEI, i))
If outRng Is Nothing Then
Set outRng = rng
Else
Set outRng = Application.Union(outRng, rng)
End If
Next
Die erste Schleifenzeile liefert 'Range Methode fehlerhaft', wenn rng gesetzt werden soll. Dim Blatt as worksheet steht unter Option Explicit.
Wie bekomme ich in OutRng das Tabellenblatt mit rein?
Gruß und Danke,
Jens
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range-Objekt setzen ohne select
21.07.2019 08:51:07
Hajo_Zi
Hallo Jens,
ja, Range bezieht sich auf Overview und Cells auf die aktuelle Tabelle.
arbeite mit With

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
Anzeige
AW: Range-Objekt setzen ohne select
21.07.2019 09:03:26
Jens
Danke für die schnelle Antwort,
aber
For i = 2 To 20 Step 2
With Sheets("Overview")
Set rng = .Range(Cells(3, i), Cells(LZEI, i))
End With
If outRng Is Nothing Then
Set outRng = rng
Else
Set outRng = Application.Union(outRng, rng)
End If
Next
geht auch nicht.....?
Anzeige
AW: Range-Objekt setzen ohne select
21.07.2019 09:05:36
Hajo_Zi
cells bezieht sich immer noch auf aktuelle Tabelle da er Punkt fehl.
Gruß Hajo
AW: Range-Objekt setzen ohne select
21.07.2019 09:08:57
Werner
Hallo Jens,
sei mir nicht böse aber bei VBA gut solltest du wissen, dass du bei Verwendung von With - End with dadurch auf das im With angegebene Blatt referenzierst, indem du vor alle Range Objekte einen Punkt setzt.
Sub Spalten_Formatieren()
Dim i As Long
Dim rng, outRng As Range
With Worksheets("Overview")
For i = 2 To 20 Step 2
Set rng = .Range(.Cells(3, i), .Cells(LZEI, i))
If outRng Is Nothing Then
Set outRng = rng
Else
Set outRng = Application.Union(outRng, rng)
End If
Next
End With
set rng=nothing:set outRng=nothing
End Sub
Gruß Werner
Zudem ist im Code die Variable LZEI weder deklariert, noch wurde ihr ein Wert zugewiesen.
Und die mit Set zugewiesenen Range Objekte sollten auch wieder geleert werden.
Anzeige
AW: Range-Objekt setzen ohne select
21.07.2019 09:18:20
Jens
Danke Euch beiden!!
Warum sollte ich böse sein? Wahrheit tut weh:-)
Bzgl. LZEI und Leeren: Das war nur der relevante Ausschnitt des Codes!
Gruß,
Jens
AW: Range-Objekt setzen ohne select
21.07.2019 17:49:29
Daniel
Hi
die Problemursache wurde ja schon erklärt.
hier noch eine alternative zur WITH-Klammer, falls diese schon für einen anderen Zellbereich verwendet wird:
Set rng = Sheets("Overview").Cells(3, i).Resize(LEZEI - 3 + 1, 1)
Gruß Daniel
Anzeige
AW: Range-Objekt setzen ohne select
22.07.2019 06:39:04
Jens
Moin,
Danke Dir für den Hinweis!!
Im Moment habe ich eher das Problem, dass das Makro (eher Makroabfolge) jetzt statt 2 1/2 Minuten nun
3 1/2 Minuten dauert.
Aber dafür mache ich einen neuen Thread auf, wenn ich der Ursache etwas näher bin!
Gruß,
Jens
Das ist seltsam
22.07.2019 07:51:19
Daniel
Normalerweise werden Makros schneller, wenn man so arbeitet.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Range-Objekt setzen ohne Select


Schritt-für-Schritt-Anleitung

  1. Deklaration der Variablen: Beginne mit der Deklaration der benötigten Variablen. Du benötigst mindestens Dim rng As Range und Dim outRng As Range.

    Dim rng As Range
    Dim outRng As Range
  2. Verwende With-Klausel: Nutze die With-Klausel, um das gewünschte Tabellenblatt zu referenzieren, ohne es vorher auszuwählen.

    With Worksheets("Overview")
       ' Dein Code hier
    End With
  3. Setze die Range: Setze die Range unter Verwendung des Punktes, um auf die Objekte innerhalb des With-Blocks zuzugreifen.

    Set rng = .Range(.Cells(3, i), .Cells(LZEI, i))
  4. Union der Ranges: Kombiniere die Ranges, indem du Application.Union verwendest.

    If outRng Is Nothing Then
       Set outRng = rng
    Else
       Set outRng = Application.Union(outRng, rng)
    End If
  5. Bereinigen der Objekte: Vergiss nicht, die Objekte am Ende auf Nothing zu setzen, um Speicherlecks zu vermeiden.

    Set rng = Nothing
    Set outRng = Nothing

Häufige Fehler und Lösungen

  • Fehler: Range Methode fehlerhaft: Dieser Fehler tritt häufig auf, wenn die Cells-Referenz nicht korrekt auf das Arbeitsblatt verweist. Stelle sicher, dass du den Punkt vor Cells setzt, um auf das richtige Arbeitsblatt zuzugreifen.

  • LZEI nicht deklariert: Achte darauf, dass alle Variablen deklariert sind. In deinem Fall sollte Dim LZEI As Long vor der Verwendung hinzugefügt werden.


Alternative Methoden

Wenn du die With-Klausel nicht verwenden möchtest oder bereits für einen anderen Zellbereich in Verwendung hast, kannst du die Range auch direkt mit Resize erstellen:

Set rng = Sheets("Overview").Cells(3, i).Resize(LZEI - 3 + 1, 1)

Diese Methode ist besonders nützlich, wenn du mit dynamischen Zellbereichen arbeitest.


Praktische Beispiele

Angenommen, du möchtest die Werte in einer bestimmten Spalte formatieren, ohne das Tabellenblatt "Overview" auszuwählen:

Sub Spalten_Formatieren()
    Dim i As Long
    Dim rng As Range, outRng As Range
    Dim LZEI As Long
    LZEI = 20 ' Beispielwert

    With Worksheets("Overview")
        For i = 2 To 20 Step 2
            Set rng = .Range(.Cells(3, i), .Cells(LZEI, i))
            If outRng Is Nothing Then
                Set outRng = rng
            Else
                Set outRng = Application.Union(outRng, rng)
            End If
        Next i
    End With

    ' Weitere Aktionen mit outRng
    Set rng = Nothing
    Set outRng = Nothing
End Sub

Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was die Fehlersuche erleichtert.

  • Optimierung durch ScreenUpdating: Deaktiviere Application.ScreenUpdating, um die Ausführungsgeschwindigkeit deiner Makros zu steigern.

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Vermeide unnötige Select-Befehle: Durch die Verwendung von Set rng ohne Select kannst du die Effizienz deiner Makros erheblich steigern.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Ranges in einer Schleife setzen?
Du kannst Application.Union verwenden, um mehrere Ranges in einer Schleife zu kombinieren.

2. Was bedeutet es, ein Range-Objekt auf Nothing zu setzen?
Das Setzen eines Range-Objekts auf Nothing gibt den Speicher wieder frei und verhindert mögliche Speicherlecks in deinem Makro.

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