Dropdown in einer Zelle per Skript erzeugen

Hi!

Habe ein Problem mit dem Erzeugen einer Dropdownliste in einer Zelle mit vba.

Folgende Grundsituation: Ich habe zwei Workbooks (A+B). In A steht die Datengrundlage und der Code, in B soll die Dropdownliste eingefügt werden.

Die Liste selbst würde ich mit folgendem Code erzeugen:

With Selection.Validation
.Delete
.Add Type:=3, AlertStyle:=1, Operator:=1, Formula1:=strString
.IgnoreBlank = True
.InCellDropdown = True
.ErrorTitle = „Eingabefehler“
.ErrorMessage = „Wählen Sie einen Wert aus dem Zelldropdown.“
.ShowError = True
End With

Natürlich nachdem eine Zelle mit „Select“ gewählt wurde.

In dem String „strString“ steht dann der Inhalt der Dropdownliste. Ursprünglich hatte ich dort die einzelnen Einträge der Liste durch Komma getrennt. Also so: „1, 2, 3, 4“. Die einzelnen Punkte sind Einträge in einer Spalte der Datengrundlage und stehen in jeweils einer Zelle, z.B. für diesen Fall in Spalte A, Zeile 1-4.

Diese Version funktioniert wunderbar - solange die Einträge in den Zellen nicht zu lang werden, denn die Länge von Strings scheint auf 256 Zeichen begrenzt zu sein!?

Man kann wohl scheinbar auch die Datengrundlage über die Zellbezeichnungen herstellen (alle folgenden Beispiele beziehen sich auf obigen Code, nur die genannte Stelle ist geändert):

Formula1:="=A1:A4"

So geht das auch. Probleme habe ich allerdings, wenn ich aus einem anderen Worksheet oder sogar einem anderen Workbook arbeiten möchte.

Formula1:="=’[A.xls]Tabelle1’!A1:A4"

oder

Formula1:="=[A.xls]Tabelle1!A1:A4"

Funktioniert beides nicht. Kann mir jemand helfen? Danke im Vorraus!

Hallo Jens,

Habe ein Problem mit dem Erzeugen einer Dropdownliste in
einer Zelle mit vba.

wenn jetzt der Code nicht wäre wüßte ich nicht was du mit DropDown meinst. Nicht weil ich DropDown nicht kenne, das Gegenteil, ich kenne mehrere.
Also sage bitte Gültigkeit—Liste, dann weiß man was du möchtest.

Wenn du Code zeigst, benutze bitte den pre-Tag.

Und bei Codebeispielen, hier nicht so ganz wichtig, aber generell, bitte einzeln lauffähige Komplettcodes.
Egal ob der Code an sich funktioniert, ich will nur wissen was im Moment des Codeaufrufes strString für einen Wert hat usw.

Frage nach der Version laße ich mal weg, sonst krieg ich wieder haue von Niclaus :smile:)
Äh, mußt du jetzt nicht verstehen *gg*

So, nach dem Negativen, mal was Postives, die Lösung :smile:

Bei Gültigkeit–Liste kannste nicht mal ein anderes Blatt angeben geschweige denn ein Blatt in einer andren Mappe.
Aber du kannst einen Namen angeben.
Dann schreibst du bei Gültigkeit–Liste rein
=Name

Vorher vergibst du über Einfügen—Namen irgendeinen Namen für
=[A.xls]Tabelle1!A1:A4

Die Hochkommas setze ich an sich nur wenn da Leerzeichen in Blatt oder Mappennamen sind.
Aber kannst sie natürlich auch setzen.
Mein Eindruck ist, manchmal setzt Excel die selbst, aber egal.

Gruß
Reinhard

Zuerst einmal vielen Dank - ich werde Deine Lösung mal probieren (morgen früh :wink:)

wenn jetzt der Code nicht wäre wüßte ich nicht was du mit
DropDown meinst. Nicht weil ich DropDown nicht kenne, das
Gegenteil, ich kenne mehrere.

deshalb war der Code da :wink:

Und bei Codebeispielen, hier nicht so ganz wichtig, aber
generell, bitte einzeln lauffähige Komplettcodes.

Tja, das würde ein wenig lang, denn…

Egal ob der Code an sich funktioniert, ich will nur wissen
was im Moment des Codeaufrufes strString für einen Wert hat
usw.

… strString kann ziemlich unterschiedliche Werte annehmen. Allen gemein ist aber die „Listenform“ - also beliebige (und auch beliebig lange und in beliebiger Anzahl) Zeichenketten, die durch Komma getrennt sind -> „1, 2, 3, …“

Frage nach der Version laße ich mal weg,

gut, denn die könnt ich jetzt nicht so direkt beantworten. Haben mehrere Versionen im Einsatz (ich weiß, nicht gut…)

So, nach dem Negativen, mal was Postives, die Lösung :smile:

Bei Gültigkeit–Liste kannste nicht mal ein anderes Blatt
angeben geschweige denn ein Blatt in einer andren Mappe.

ja, das hatte ich mir dann auch schon fast gedacht.

Aber du kannst einen Namen angeben.

Dann schreibst du bei Gültigkeit–Liste rein

=Name

Vorher vergibst du über Einfügen—Namen irgendeinen Namen
für

=[A.xls]Tabelle1!A1:A4

Gut, mein Skript muss mir das dann zusammenbauen. Denn die einzelnen Bestandteile werden erst zur Laufzeit übergeben. Aber das dürfte dann kein Problem sein. Wie schön wäre vba, wenn man Zeiger verwenden könnte…

Hallo Jens,

Zuerst einmal vielen Dank - ich werde Deine Lösung mal
probieren (morgen früh :wink:)

sie wird schon funktionieren.

wenn jetzt der Code nicht wäre wüßte ich nicht was du mit
DropDown meinst. Nicht weil ich DropDown nicht kenne, das
Gegenteil, ich kenne mehrere.

deshalb war der Code da :wink:

-) ja in dem Fall schon, da sehe ich das, aber oft geht das ohne Code, da weiß ich gar nix welches DropDown nun gemeint ist.

Und bei Codebeispielen, hier nicht so ganz wichtig, aber
generell, bitte einzeln lauffähige Komplettcodes.

Tja, das würde ein wenig lang, denn…

Nein. Wenn du schon codierst mußt du auch in der Lage sein wenn da irgendwo etwas nicht funktioniert die Problemprozeduren zu extrahieren
und nur die für andere zu zeigen, ggfs. mit einer Zusatzprozedur die sie aufruft.

Wie sollen denn Helfer Fehler finden wenn da in deinem Codeschnipsel irgendwelche Variablen stehen wo man gar nicht weiß was drinsteht bei Aufruf?
Das ist dann eine Sache für, wie heißt das Stochastik? Kombinationslehre?
Alle möglichen Kombinationen durchspielen was denn da in den unbekannten Variablen drin stehen könnte?

Nö.

Frage nach der Version laße ich mal weg,

gut, denn die könnt ich jetzt nicht so direkt beantworten.
Haben mehrere Versionen im Einsatz (ich weiß, nicht gut…)

Wieso ist das nicht gut, hab ich auch, 97,2000,2007.
Versionsangabe bedeutet logischerweise auch Code soll in 2000, 2003 2007 laufen.

Dann schreibst du bei Gültigkeit–Liste rein
=Name
Vorher vergibst du über Einfügen—Namen irgendeinen Namen
für
=[A.xls]Tabelle1!A1:A4

Gut, mein Skript muss mir das dann zusammenbauen. Denn die
einzelnen Bestandteile werden erst zur Laufzeit übergeben.
Aber das dürfte dann kein Problem sein.

Richtig, sehe da keine Schwierigkeiten.

Wie schön wäre vba,
wenn man Zeiger verwenden könnte…

Ist halt nicht so, akzeptiere es oder bau das Ganze nach mit C oder aus welcher Progrmmierecke du kommst :smile:

Gruß
Reinhard