Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Usedrange auf eine Spalte?

Usedrange auf eine Spalte?
Jordan
Hallo zusammen,
ich habe hier ein kleines aber bedeutendes Problem.
Ich möchte in einer Spalte alle Zellen z. B. Markieren.
Nun ist es aber so, dass in der Spalte B die letzte Zelle die 14 ist und in Spalte A die 11.
Wenn ich das ganze nun mit UsedRange mache, dann markiert er mir die Zellen in Spalte A bis 14 und nicht bis 11.
Ich glaub ich seh den Wald vor lauter Bäumen nicht!
Kann mir jemand einen kleinen Schubbs geben?
Merci
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Usedrange auf eine Spalte?
20.07.2009 17:53:47
Gernot
Hi,
wenn du mitteilst, wozu die Markierung gebraucht wird, gibt es ggf. eine ganz andere Lösung.
mfg Gernot
Nähere Angaben
20.07.2009 19:31:50
Jordan
Danke Gernot,
danke Robert,
ich werds morgen gleich mal ausprobieren und mich wieder melden.
@ Gernot:
Eigentlich bin ich zur Zeit nur ein bisschen am basteln. Hab mich die letzten Monate ins VBA eingearbeitet und wollte nun sowas probieren. Konkret draufgekommen bin ich so:
Ich hab eine kleien UserForm gebaut, in der auch Listenfelder enthalten sind. Nun habe ich die Daten für das erste Listenfeld in Tabelle2 eingetragen und mittels diesem Code
Option Explicit
Private Sub UserForm_Initialize()
Dim Zeile As Long
For Zeile = 2 To Tabelle2.UsedRange.Rows.Count
If Cells(Zeile, 1)  "" Then
ComboBox1.AddItem Cells(Zeile, 1)
End If
Next Zeile
ComboBox1.ListIndex = 0
End Sub

Das Listenfeld vorausgefüllt. Nun, da ich mehrere Listenfelder habe, schrieb ich die Daten für die nächsten Listenfelder in die Spalten B-E. Sobald ich das aber mache, funktioniert mein oben geschriebene Code nicht mehr. Es wird ein Laufzeitfehler 380 gemeldet.
In der Spalte A stehen die Daten für das Listenfeld bis zur 3 Zelle. In der Spalte B aber bis zur 8 Zelle! Nun war meine Vermutung, das der Fehler darin liegt, dass mir der obige Code auch die Zellen 4-8 prüft und mir deshalb diesen Fehler angiebt. Nun wollte ich eben versuchen das ganze mit dem ersten Listenfeld auf die erste Spalte zu beschränken. Und deshalb hab ich hier gefragt.
Ich weis, ohne Tabelle und Code ist das alles schwierig. Ich werds morgen noch reinstellen, da ich den Fehler alleine nicht finde!
Danke bis dahin!
Anzeige
AW: Usedrange auf eine Spalte?
20.07.2009 18:16:54
robert
hi,
probier mal so..
irgendwo in der spalte markieren-makro starten
gruß
robert
Sub tt()
Dim lz%, sp%
Dim Bereich As Range
sp = ActiveCell.Column
lz = Cells(Rows.Count, sp).End(xlUp).Row
Set Bereich = Range(Cells(1, sp), Cells(lz, sp))
Bereich.Select
End Sub

Anzeige
ComboBox aus Spalte füllen
20.07.2009 20:26:52
Erich
Hi Jordan,
probier mal

Private Sub UserForm_Initialize()
Dim lngZeile As Long
lngZeile = Cells(Rows.Count, 1).End(xlUp).Row
ComboBox1.List = Range(Cells(1, 1), Cells(lngZeile, 1)).Value
ComboBox1.ListIndex = 0
End Sub
Dann kannst du UsedRange vergessen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

UsedRange auf eine Spalte beschränken in Excel VBA


Schritt-für-Schritt-Anleitung

Um den UsedRange nur auf eine bestimmte Spalte in Excel VBA zu beschränken, kannst Du den folgenden Code verwenden:

Sub MarkiereUsedRangeInSpalte()
    Dim lz As Long
    Dim sp As Long
    Dim Bereich As Range

    sp = ActiveCell.Column ' Aktuelle Spalte bestimmen
    lz = Cells(Rows.Count, sp).End(xlUp).Row ' Letzte benutzte Zeile in der Spalte finden
    Set Bereich = Range(Cells(1, sp), Cells(lz, sp)) ' Bereich definieren

    Bereich.Select ' Bereich markieren
End Sub

Dieser Code markiert alle Zellen in der aktiven Spalte, die tatsächlich Daten enthalten. Achte darauf, dass Du Dich in der Spalte befindest, die Du markieren möchtest, bevor Du das Makro ausführst.


Häufige Fehler und Lösungen

  1. Laufzeitfehler 380: Dieser Fehler tritt häufig auf, wenn der Code versucht, auf nicht vorhandene Zellen zuzugreifen. Stelle sicher, dass Du den UsedRange nur für die Spalte verwendest, die tatsächlich Daten enthält.

    Lösung: Überprüfe die Spalten, die Du in Deinem Code verwendest, und stelle sicher, dass sie korrekt definiert sind.

  2. Unvollständige Markierung: Wenn Du den UsedRange auf eine Spalte anwendest und die Markierung nicht wie erwartet erfolgt, kann es daran liegen, dass die letzte Zeile in einer anderen Spalte höher ist.

    Lösung: Verwende die oben dargestellte Methode, um die letzte benutzte Zeile in der gewünschten Spalte zu ermitteln.


Alternative Methoden

Eine weitere Möglichkeit, um eine ComboBox in einem UserForm zu füllen, ohne den UsedRange zu verwenden, ist der folgende Code:

Private Sub UserForm_Initialize()
    Dim lngZeile As Long
    lngZeile = Cells(Rows.Count, 1).End(xlUp).Row ' Letzte benutzte Zeile in Spalte A
    ComboBox1.List = Range(Cells(1, 1), Cells(lngZeile, 1)).Value ' Range für ComboBox setzen
    ComboBox1.ListIndex = 0 ' Ersten Eintrag auswählen
End Sub

Dieser Code sorgt dafür, dass die ComboBox nur die Werte aus der gewünschten Spalte anzeigt.


Praktische Beispiele

Angenommen, Du hast in Spalte A Daten bis zur Zeile 3 und in Spalte B bis zur Zeile 8. Um nur die Daten aus Spalte A in einer ComboBox anzuzeigen, kannst Du den oben genannten Code verwenden, um sicherzustellen, dass nur die relevanten Zellen einbezogen werden.


Tipps für Profis

  • Nutze die .UsedRange-Eigenschaft in Kombination mit gezielten Range-Objekten, um effizienter zu arbeiten.
  • Vermeide es, .UsedRange auf den gesamten Arbeitsbereich anzuwenden, da dies die Performance beeinträchtigen kann.
  • Setze Fehlerbehandlungsroutinen ein, um Laufzeitfehler elegant abzufangen und den Code robuster zu machen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen UsedRange und CurrentRegion?
UsedRange gibt den gesamten Bereich zurück, der Daten enthält, während CurrentRegion den Bereich zurückgibt, der von einem spezifischen Zellenwert umschlossen ist.

2. Wie kann ich die letzte Zeile in einer bestimmten Spalte ermitteln?
Verwende Cells(Rows.Count, sp).End(xlUp).Row, um die letzte Zeile mit Daten in der gewünschten Spalte zu finden.

3. Kann ich UsedRange auch auf mehrere Spalten anwenden?
Ja, Du kannst UsedRange auf mehrere Spalten anwenden, aber es ist oft effektiver, es auf eine spezifische Spalte zu beschränken, um unerwartete Ergebnisse zu vermeiden.

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