1.9k Aufrufe
Gefragt in Tabellenkalkulation von saarbauer Profi (15.6k Punkte)
Hallo,

ich arbeite in einer Tabelle mit Gültigkeitsprüfung und habe eine Liste hinterlegt. Diese Liste ändert sich entsprechend der Vorgabe eines anderen Feldes.

Wie kann ich in VBA es steuern, dass der Startwert immer in der 1. Zeile der Liste ist?

Gruß

Helmut

8 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Helmut,

wie hast du die Liste definiert - über Namen oder direkt als Zellbereich oder noch anders? Da müsste man schon mal die Mappe sehen, um konkret darauf antworten zu können. Eventuell ginge es mit einer Case-Anweisung im Worksheet_Change-Ereignis.

Bis später,
Karom
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

das ist mein Makro

www.supportnet.de/t/2447762

in AW 7

Die Daten des "Hilfsblatt" benötige ich auf dem "Arbeitsblatt",

Diese sind mit Namen "Objekt" definiert, bloß der Zeilenzeiger steht immer am Ende der Liste was nicht passt.

Gruß

Helmut
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

damit kann ich leider nichts anfangen, da ich die Mappe nicht kenne.

Bis später,
Karin
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

hier die Datei

auf dem Arbeitsblatt läuft das ganze ab

8111835/Datenmodell_Levelmanager-2013.xls.html">www.file-upload.net/download-
8111835/Datenmodell_Levelmanager-2013.xls.html


Die Spalten werden ab F nach rechts gefüllt, mit Daten aus den übrigen Tabellenblättern. Bei 02_Objekt sollen aber nur die angezeigt werden, die zu 01_Kategorie gehören.

Ich hoffe du kommst klar.

Gruß

Helmut
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

Datei existiert nicht!

Diese Datei wurde vom User oder durch eine Abuse-Meldung gelöscht.


Bis später,
Karin
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo,

ein neuer Versuch

www.file-upload.net/download-8111985/Datenmodell_Levelmanager-2013.xls.html

hoffe das es jetzt klappt

Gruß

Helmut
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

auf Select kann in VBA zu 99% aller Fälle verzichtet werden.

Private Sub worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("F6:F1000")) Is Nothing Then
' Wert = Left(Target.Value, 3)
Sheets("Hilfsblatt") .Cells.ClearContents
With Sheets("02_Objekt")
.Range("A2:J2").AutoFilter Field:=4, Criteria1:="=*" & Wert & "*", Operator:=xlAnd
.Range("J1:J100").Copy
Sheets("Hilfsblatt").Range("J1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("A2:J2").AutoFilter Field:=4
End With
Application.EnableEvents = False
Target.Offset(0, 1) = Worksheets("Hilfsblatt").Range("J3").Value
Application.EnableEvents = True
End If
End Sub


Was dabei die Zeile Wert = Left(ActiveCell.Value, 3) - ich habe sie geändert und an Target angepasst - dabei soll, entzieht sich allerdings meinem Verständnis.

Ich würde den definierten Namen "Objekt" sich dynamisch an die Anzahl an vorhandenen Daten anpassen lassen:

=Hilfsblatt!$J$3:INDEX(Hilfsblatt!$J$3:$J$1000;ANZAHL2(Hilfsblatt!$J$3:$J$1000);1)

So gewährleistest du, dass keine Leerzeilen in der Liste auftauchen.

Bis später,
Karin
0 Punkte
Beantwortet von saarbauer Profi (15.6k Punkte)
Hallo @ Beverly,

herzlichen Dank für deine Lösung die funktioniert wie ich mir das vorgestellt habe.

Mein Makro ist noch etwas holperig, da ich zum ersten mal mit Worksheet_Change arbeite.
Deine Ausführungen haben auch bei mir für das Verständnis der Makrofunktion Worksheet_Change ein gutes Stück beigetragen

Die Variabele Wert brauche ich in der Filterfunktion

Gruß und vielen Dank

Helmut
...