Discussion:
RowSource für Listbox
(zu alt für eine Antwort)
Detlef Schulz
2004-02-20 10:08:31 UTC
Permalink
Hallo,

ich möchte eine dynamische Anzahl an Listboxeinträgen erhalten. Dazu muss
ich beim initalisieren der Listbox ermitteln, wieviele Zeilen einer
Datentabelle mit Werten gefüllt sind. Die Datentabelle soll dabei nicht
aktiviert werden. Suche also das "Ax", dass je nach Anzahl der belegten
Zeilen einen anderen Wert hat, um mit "Listbox.rowsource=Datentabelle!A1:Ax"
die Listbox zu füllen.

Mit freundlichem Dank für jeden Tipp

Detlef
Herbert Taferner
2004-02-20 11:30:59 UTC
Permalink
Hallo Detlef,

etwa so,

Dim Ax As Long
Ax = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Listbox1.ListFillRange = Datentabelle! & "A1:A" & Ax

mfg Herbert
unknown
2004-02-20 12:06:24 UTC
Permalink
Hallo Detlef,
1)
als Beispiel für die Listbox im Tabellenblatt "Datentabelle1":

In meinem Beispiel stehen die Daten im Bereich C8 bis maximal C1000.
Vergib unter Einfügen/Namen/Definieren den Namen. Daten, bezieht sich
auf:
=BEREICH.VERSCHIEBEN(Datentabelle1!$C$8;0;0;ANZAHL2(Datentabelle1!$C$8:$C$1000);1)

In der Listbox gibst du bei der Eigenschaft ListFillRange den
vergebenen Namen ein (hier: Daten).

Anmerkung:
Im Bereich Daten müssen die Daten ohne Leerzellen bündig untereinander
stehen.

2)
als Beispiel für eine Listbox in der Userform:

Private Sub UserForm_Activate()
Dim strStartadresse As String
Dim strEndAdresse As String

strStartadresse = "C8"
strEndAdresse = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Address

ListBox1.RowSource = Worksheets("Datentabelle1"). _
Range(strStartadresse & ":" & strEndAdresse).Address
End Sub

MfG Frank
_____________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Website: http://www.xl-faq.de; Auftragsprogrammierung
Detlef Schulz
2004-02-20 16:23:51 UTC
Permalink
Hallo Frank,

vielen Dank für deinen Tipp! Die Listbox ist bei mir in einer Userform. Das
htte ich natürlich in meiner Frage mit angeben sollen. Leider funktioniert
das ganze nur, wenn das Tabellenblatt "Datentabelle" aktiv ist. Ich möchte
aber gerne von einem anderen Blatt aus auf die Daten im Blatt Datentabelle
zugreifen. Habe deshalb das "ActiveSheet" durch
"Worksheets("Datentabelle1")" ersetzt, aber das funktioniert leider nicht.

Gruß

Detlef
Post by unknown
Private Sub UserForm_Activate()
Dim strStartadresse As String
Dim strEndAdresse As String
strStartadresse = "C8"
strEndAdresse = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Address
ListBox1.RowSource = Worksheets("Datentabelle1"). _
Range(strStartadresse & ":" & strEndAdresse).Address
End Sub
MfG Frank
_____________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Website: http://www.xl-faq.de; Auftragsprogrammierung
Melanie Breden
2004-02-20 16:57:44 UTC
Permalink
Hallo Detlef,
Post by Detlef Schulz
Leider funktioniert
das ganze nur, wenn das Tabellenblatt "Datentabelle" aktiv ist. Ich möchte
aber gerne von einem anderen Blatt aus auf die Daten im Blatt Datentabelle
zugreifen. Habe deshalb das "ActiveSheet" durch
"Worksheets("Datentabelle1")" ersetzt, aber das funktioniert leider nicht.
du musst die Angaben nicht im Code zur Laufzeit festlegen, sondern kannst
den Namen Daten in das Eigenschaftenfenster der ListBox neben RowSource
eintragen.
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Detlef Schulz
2004-02-20 17:09:13 UTC
Permalink
Melanie schrieb
Post by Melanie Breden
du musst die Angaben nicht im Code zur Laufzeit festlegen, sondern kannst
den Namen Daten in das Eigenschaftenfenster der ListBox neben RowSource
eintragen.
Hallo Melanie,

das habe ich ja schon probiert, aber das Problem liegt darin, das die Anzahl
der Daten variiert. Mit dem Codeschnipsel von Frank funktioniert es ja auch,
aber ich muss dazu das Blatt "Datentabelle" aktiviert haben! Die Userform
wird aber über einem anderen Blatt ausgeführt....

Gruß

Detlef
Melanie Breden
2004-02-20 17:35:07 UTC
Permalink
Hallo Detlef,
Post by Detlef Schulz
Post by Melanie Breden
du musst die Angaben nicht im Code zur Laufzeit festlegen, sondern kannst
den Namen Daten in das Eigenschaftenfenster der ListBox neben RowSource
eintragen.
das habe ich ja schon probiert, aber das Problem liegt darin, das die Anzahl
der Daten variiert. Mit dem Codeschnipsel von Frank funktioniert es ja auch,
aber ich muss dazu das Blatt "Datentabelle" aktiviert haben! Die Userform
wird aber über einem anderen Blatt ausgeführt....
bei mir wird der Bereich korrekt angezeigt, auch wenn ein anderes Blatt aktiv ist.

Der Name ist Blattübergreifend, wenn er nur einmal existiert.
Hast du den Namen Daten evtl. mehrfach vergeben?
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
unknown
2004-02-20 20:35:03 UTC
Permalink
Hallo Detlef,
sorry mein Fehler; so ist das wenn ich nicht alle Eventualitäten
durchteste. Mein Code funktioniert nur wenn das tabelleblatt
"Datentabelle1" aktiv ist, aber
hier kommt die Korrektur :-)))

Version 1:
Private Sub UserForm_Activate()
Dim strStartadresse As String
Dim strEndAdresse As String

strStartadresse = "C8"
strEndAdresse = Worksheets("Datentabelle1"). _
Cells(Rows.Count, 3).End(xlUp).Address

ListBox1.RowSource = "Datentabelle1!" & _
Worksheets("Datentabelle1"). _
Range(strStartadresse & ":" & strEndAdresse).Address
End Sub

Version 2:
Private Sub UserForm_Activate()
Dim strStartadresse As String
Dim strEndAdresse As String
Dim rngDaten As Range
Dim rngZelle As Range

ListBox1.Clear
ListBox1.RowSource = ""
strStartadresse = "C8"
strEndAdresse = Worksheets("Datentabelle1"). _
Cells(Rows.Count, 3).End(xlUp).Address

Set rngDaten = Worksheets("Datentabelle1"). _
Range(strStartadresse & ":" & strEndAdresse)

For Each rngZelle In rngDaten
ListBox1.AddItem rngZelle.Value
Next
End Sub

Ich hoffe alle Varianten getestet zu haben. Geht's jetzt?

MfG Frank
_____________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Website: http://www.xl-faq.de; Auftragsprogrammierung

Loading...