Drop Down aktualisieren

Hallo,

ich erstelle ein DropDown-Feld über Daten-Gültigkeit, bei dem der Inhalt des DropDown aus einer anderen Tabelle (benannte Zellen) kommt. Wenn jetzt die Daten der Quelle (Stammdaten) geändert werden, dann bleibt der alte Wert/String in der zweiten Tabelle im DropDown bestehen und wird nicht automatisch aktualisiert. Ärgerlich ist das, weil das DropDown Gegenstand von Berechnungen ist, z.B. index(), sverweis(), und hier ein #NV erscheint. Kann man das DropDown zu einer Aktualisierung zwingen?

Gruß
Denis

Hallo Denis
Eine atmatische Aktualisierung der per Datengüligkeit-Dropdown eingetragenene Werte ist so einfach nicht möglich.

Wenn du so etwas realisieren willst, dann muss deine Dropdownauswahl indirekt anzeigen, wo der eigenliche Wert zu finden ist, so dass du per SVERWEIS oder ähnlich auf den eigentlichen Wert zugreifen kannst.
D.h. deine Auswahllisten müßten immer zweispaltig sein. Links stehen eindeutige Kennzeichnungen, rechts die Werte.
Die linke Spalte ist dann die Auswahlliste für die Dropdownlisten der Datengültigkeit. Per SVERWEIS holst du dir dann die Werte für die Berechnungen aus der rechten Spalte.

Gruß
Franz

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Daten – Gültigkeit – Liste dynamisch anpassen

ich erstelle ein DropDown-Feld über Daten-Gültigkeit, bei dem
der Inhalt des DropDown aus einer anderen Tabelle (benannte
Zellen) kommt. Wenn jetzt die Daten der Quelle (Stammdaten)
geändert werden, dann bleibt der alte Wert/String in der
zweiten Tabelle im DropDown bestehen und wird nicht
automatisch aktualisiert. Ärgerlich ist das, weil das DropDown
Gegenstand von Berechnungen ist, z.B. index(), sverweis(), und
hier ein #NV erscheint. Kann man das DropDown zu einer
Aktualisierung zwingen?

Hi Denis,
im Quellblatt mußt du diejenige Spalte(n) im Makrocode angeben wo durch manuelle Eingabe sich etwas ändert, also daraufhin etwas berechnet wird. Im Beispiel ist das die 5te Spalte, also Spalte E.

Bei Daten–Gültigkeit: Liste, =Bereich

in das Dokumentmodul des Quellblattes, also Tabelle2 o.ä:

Private Sub Worksheet\_Change(ByVal Target As Excel.Range)
Dim Zeile As Long, Spalte As Integer
Spalte = 5 ' 1= Spalte A, 2=Spalte B usw, also ist 5 = Spalte E
If Target.Column Spalte Then Exit Sub
If Cells(Rows.Count, Spalte) = "" Then
 Zeile = Cells(Rows.Count, Spalte).End(xlUp).Row
Else
 Zeile = Rows.Count
End If
ActiveWorkbook.Names.Add Name:="Bereich", RefersToR1C1:="=Tabelle2!R2C" & Spalte & ":R" & Zeile & "C" & Spalte
End Sub

Gruß
Reinhard

im Quellblatt mußt du diejenige Spalte(n) im Makrocode angeben
wo durch manuelle Eingabe sich etwas ändert, also daraufhin
etwas berechnet wird. Im Beispiel ist das die 5te Spalte, also
Spalte E.

Bei Daten–Gültigkeit: Liste, =Bereich

in das Dokumentmodul des Quellblattes, also Tabelle2 o.ä:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Zeile As Long, Spalte As Integer
Spalte = 5 ’ 1= Spalte A, 2=Spalte B usw, also ist 5 = Spalte
E
If Target.Column Spalte Then Exit Sub
If Cells(Rows.Count, Spalte) = „“ Then
Zeile = Cells(Rows.Count, Spalte).End(xlUp).Row
Else
Zeile = Rows.Count
End If
ActiveWorkbook.Names.Add Name:=„Bereich“,
RefersToR1C1:="=Tabelle2!R2C" & Spalte & „:R“ & Zeile & „C“ &
Spalte
End Sub

Hallo Reinhard,

das hat nicht funktioniert. Deinen Code habe ich in Tabelle2 kopiert, also die Quelle, wo die Daten manuell geändert werden können. Diese Zellen wurden mit „Bereich“ benannt. Anschliessend gehe ich in die Tabelle1, wo über Daten/Gültigkeit ein DropDown erstellt wird und der Name Bereich in Liste eingetragen wird. Jetzt wähle ich aus dem DropDown einen Wert aus, gehe zurück in die Tabelle2 (Quelle) ändere den Wert, schaue nach, ob das DropDown in Tabelle1 die Änderung automatisch übernommen hat. Hat es leider nicht. In der Quelltabelle stehen die Originalwerte in Spalte 5 wie oben bei dir im Code. Mit :RefersToR1C1:="=Tabelle2!R2C" beziehst du dich auf die Originalquelle, was plausibel ist, andere Fehlerquellen kann ich nicht erkennen.

Gruß
Denis

Eine atmatische Aktualisierung der per Datengüligkeit-Dropdown
eingetragenene Werte ist so einfach nicht möglich.

Wenn du so etwas realisieren willst, dann muss deine
Dropdownauswahl indirekt anzeigen, wo der eigenliche Wert zu
finden ist, so dass du per SVERWEIS oder ähnlich auf den
eigentlichen Wert zugreifen kannst.
D.h. deine Auswahllisten müßten immer zweispaltig sein. Links
stehen eindeutige Kennzeichnungen, rechts die Werte.
Die linke Spalte ist dann die Auswahlliste für die
Dropdownlisten der Datengültigkeit. Per SVERWEIS holst du dir
dann die Werte für die Berechnungen aus der rechten Spalte.

Hallo Franz,

Hilfsspalten nehme ich immer nur als letzten Ausweg, wenn mir nicht anderes mehr einfällt. Vielleicht geht hier noch was.

Gruß
Denis

das hat nicht funktioniert. Deinen Code habe ich in Tabelle2
kopiert, also die Quelle, wo die Daten manuell geändert werden
können. Diese Zellen wurden mit „Bereich“ benannt.
Anschliessend gehe ich in die Tabelle1, wo über
Daten/Gültigkeit ein DropDown erstellt wird und der Name
Bereich in Liste eingetragen wird. Jetzt wähle ich aus dem
DropDown einen Wert aus, gehe zurück in die Tabelle2 (Quelle)
ändere den Wert, schaue nach, ob das DropDown in Tabelle1 die
Änderung automatisch übernommen hat. Hat es leider nicht. In
der Quelltabelle stehen die Originalwerte in Spalte 5 wie oben
bei dir im Code. Mit :RefersToR1C1:="=Tabelle2!R2C" beziehst
du dich auf die Originalquelle, was plausibel ist, andere
Fehlerquellen kann ich nicht erkennen.

Hi Denis,
mein Makro passt den Zellbereich von „Bereich“ an, wenn man in Tab2 Änderungen vornimmt.
D.h., die nächste Auswahl der Gültigkeitszelle in Tab1 ist aktualisiert.
Wenn ich recht verstehe, möchtest du dass auch der Zellwert der Zelle in Tab1 die das Drop-Down-Feld enthält, angepasst wird.
Das geht m.E. nicht mit Daten-Gültigkeit, sondern nur über ein Kombinationsfeld, denn die Auswahl aus einem Daten–Gültigkeits-Feld löst leider kein mittels Vba abfangbares Ereignis aus.
Gruß
Reinhard

das hat nicht funktioniert. Deinen Code habe ich in Tabelle2
kopiert, also die Quelle, wo die Daten manuell geändert werden
können. Diese Zellen wurden mit „Bereich“ benannt.
Anschliessend gehe ich in die Tabelle1, wo über
Daten/Gültigkeit ein DropDown erstellt wird und der Name
Bereich in Liste eingetragen wird. Jetzt wähle ich aus dem
DropDown einen Wert aus, gehe zurück in die Tabelle2 (Quelle)
ändere den Wert, schaue nach, ob das DropDown in Tabelle1 die
Änderung automatisch übernommen hat. Hat es leider nicht. In
der Quelltabelle stehen die Originalwerte in Spalte 5 wie oben
bei dir im Code. Mit :RefersToR1C1:="=Tabelle2!R2C" beziehst
du dich auf die Originalquelle, was plausibel ist, andere
Fehlerquellen kann ich nicht erkennen.

Hi Denis,
ich habe das mal ausprobiert, mittels einem Kombinationsfeld aus Steuerelementtoolbox funktioniert dies so wie ich denke daß du es wünscht.
Den Code habe ich auf Diskette dabei, allerdings hat hier im Inet-Cafe nur ein Rechner noch ein Diskettenlaufwerk und der ist grad besetzt.
Melde dich hier bei Interesse.
Gruß
Reinhard

ich habe das mal ausprobiert, mittels einem Kombinationsfeld
aus Steuerelementtoolbox funktioniert dies so wie ich denke
daß du es wünscht.
Den Code habe ich auf Diskette dabei, allerdings hat hier im
Inet-Cafe nur ein Rechner noch ein Diskettenlaufwerk und der
ist grad besetzt.

Hallo Reinhard,
ein Kombifeld aus der Steuertoolbox kann ich auf keinen Fall nehmen, weil die DropDowns alle direkt untereinander in einer Liste stehen und ständig Zeilen über eine Schaltfläche kopiert und eingefügt werden. Selbst wenn man ein Kombifeld über Makros kopieren kann, dürfe die genaue Positionierung in den Zellen der Liste ein Ding der Unmöglichkeit sein.

Gruß
Denis