Clever-Excel-Forum

Normale Version: refresh von DropDown liste
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen

In diesem Beispiel wurde in der Tabelle Daten etwas geändert:
Vorher: bla bla
Jetzt: bla blam

Hat jemand eine Idee, wie man die Tabelle Test automatisch bzgl. der Änderung in Daten updaten kann, ohne/mit VBA?
Scheinbar gibt es nicht so einfache Lösung

Danke
zur info:

ich habe den Code auf MS gefunden, bekomme error 421


Code:
Sub Worksheet_Activate()

Test.Range("B3").Select
With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=Daten!$B$2:$B$6"
End With

Test.Range("B6").Value = Daten.Range("$B$5").Value


End Sub
Hallo,

ist ganz simpel: in Daten dynamische Tabelle anlegen. Die Tabelle einen Bereich zuweisen. Den Namen des Bereiches ins DD hinter dem = eintragen.
da braucht es kein VBA.
Dein Beispiel eingebaut im Anhang

Gruß Uwe
Bin mir nicht sicher ob die Idee richtig verstanden wurde? 

versuche bitte in der Tabelle Daten da da da zu da da do ändern, wechsele dann zur Tabelle Main (ohne etwas zu machen) um zu sehen, ob deine Änderung stattgefunden hat.
ja bei mir ändert es sich im DD Menü. Ich vermute aber, dass sich die Werte in den Zellen, wo vorher da da da  drin stand, dann wohl da da do drin stehen soll? Wenn das der Fall ist, kann man mit einer Schleife With Tabelle1. im Modul der Tabelle2 und Methode .Find die Änderung aus ActiveCell auswerten, in Find übergeben und alle ein Frage kommenden Zellen der Tabelle1 mit der Schleife abklappern und den neuen Wert unter der Vergleich des alten (ehemaligen) Wertes dann ausgetauschen.

Gruß Uwe
danke
Je ich denke auch dass die Schleife hergeht und die Spalte in Test - um bei diesem Beispiel zu bleiben- je nach Veränderung aus der Tabelle Daten updatet.

Hier muss ich höllisch bei großen Datensätzen aufpassen; die Änderungen sind manchmal so minimal, dass kaum jemand merkt.
daher ein Sub Worksheet_Activate() wäre keine gute Idee für dieses Vorhaben.
ich habe den Code in der Excel-Datei angepasst und man sieht was ich meine.

ok, schön wäre wenn man hier keine 1:1 Beziehung hat sondern durch eine Schleife automatisch die Werten in der Tabelle Test updatet.


Das Problem ist hier, wenn man eine Tabelle1 mit 100 Zeilen durch Drop-Down befüllt hat und später eine Änderung in der Liste (Tabelle2) kommt, braucht man eine Woche und ist es nicht sicher ob man alles manuell richtig ausgewählt hat, abgesehen davon, dass die Liste werte hat wie

CoTBa
CoTBaa
CoTBc
CoTBcx
usw.....
@TE  du hast recht, das ist merkwürdig.  da hilft nur die Zelle löschen.

Aber warum hälst du dich nicht an die Vorschläge mit dem Namensmanager und der Intelligenten Tabelle?

Die Listendaten zu eine Tabelle formatieren. Deren Name erscheint im Namensmanager.  Einen neuen Namen erstellen  mit dem Bezug  "=tabellenname"  
dieser neue Name kann als Referenz in der Gültigkeitsprüfung benutzt werden.  fertig.
Ich würde gerne jedem hier Recht einräumen, wenn er mit Excel in nicht Enterprise-Umgebung (große Datenmenge, unterschiedliche ERP-Modulen, Sprache, Länder, etc.) zu tun hat.

Fak ist jedoch dass man den Aufwand so gering halten sollte, wie ein/ausatmen. Natürlich sind andere Lösungen denkbar.
Diese minimal-Lösung (1:1 Bezeigung) ist nach einer langen Überlegung und Aufwand-Einschätzung (mit Dep) äußerst beherrschbar/ungefährlich, überlege für eine VBA-basierte Schleife-Lösung.

Wie oben, kommt selbst Sub Worksheet_Activate() bei einem Datensatz von 2000 nicht in Frage wegen der System Blockade (es gibt einen normal VBA-code wenn man Worksheet_Activate event nicht benutzen will).

Code:
Sub UpdateDropDown_manually()

On Error Resume Next
' //Your Line here




Sheets("Test").Activate ' Amend to suit
Sheets("Test").Range("D2").Select 'DropDown

With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=Daten!$A$1:$A$4" ' Amend to suit
End With
Sheets("Test").Range("D3").Value = Sheets("Daten").Range("$A$1").Value




' //
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If
End Sub

thx
Seiten: 1 2