PDA

Vollständige Version anzeigen : Variabler Namensbezug


Kollaps
14.07.2014, 12:14
Hallo Freunde,

ich habe mal wieder ein kleines Problem.

In Excel kann man ja Namensräume erstellen, das habe ich auch gemacht alles soweit so gut.

Ich habe allerdings EINE SPALTE in meiner Tabelle, die mit jeder Zeile, die sie runter geht, auch eine Spalte in der nächsten Tabelle weiter nach rechts geht, um Daten zu kriegen. (Verständlich?)

Dabei geht es um eine Ziffernfolge, die für unser System wichtig ist.

Jetzt möchte ich in VBA (per UserForm) das ganze Ausfüllen, allerdings fehlt mir da noch ein RowSource.

Probiert habe ich das folgendermaßen:
Me.ComboBox2.RowSource = Worksheets("Tabelle3").Cells(lZeile, 43).Value

Aber hätte das funktioniert, wäre das ja auch nicht VBA, nech? :D

Mit jedem neuen Eintrag, den man in der ersten Tabelle macht, wird in die 43 Spalte der Tabelle eine laufende Nummer "i" geschrieben, die einmal dazu dient, dass ich ne ID habe und zweitens (sollte) das für diesen variablen Namensbezug herhalten, was nicht ganz geklappt hat:

Laufzeitfehler: '1004'
Anwendungs- oder objektdefinierter Fehler.

Ich hoffe ihr versteht was ich meine und habt eventuell einen Tipp für mich?

Vielen Dank im Voraus.

Liebe Grüße
Christoph

MWOnline
14.07.2014, 12:22
Hallöchen,

die RowSource möchte eine Range haben:

ListBox1.RowSource = Worksheets("Tabelle1").Range("A1:A3").Address


Der Code passt nur zu meiner Testdatei ;) Bitte Bezüge anpassen!

Beste Grüße und Viel Erfolg
Marc

Mc Santa
14.07.2014, 12:24
Hallo,

mir ist noch nicht ganz klar was du genau möchtest.

Also übergeordnetes Ziel habe ich mal geraten, dass du Spaltenüberschriften in eine ComboBox einlesen willst.
Hilft dir folgendes weiter?
Me.ComboBox1.List = Application.WorksheetFunction.Transpose(Range("A1:E1").Value)

VG

chris-kaiser
14.07.2014, 12:30
@ Marc,

starte einmal den Code vom Tabellenblatt2 aus ;)
Rowscource kann mit einem "echten" Range nichts anfangen.

Blatt ohne Leerzeichen
Sheets("xy").name & "!A1:A3"

oder eben
Range(..).address statt dem A1:A...

MWOnline
14.07.2014, 12:32
Hi Chris,

stimmt ja, Du hast vollkommen Recht, geht aber auch noch kürzer:
ListBox1.RowSource = "Tabelle1!A1:A3"

Klappt natürlich auch zusammengesetzt:
ListBox1.RowSource = Tabelle1.Name & "!A1:A3"

Beste Grüße
Marc

Kollaps
14.07.2014, 12:39
Ich versuche das mal zu verbildlichen:
http://s1.directupload.net/images/140714/w4ufav4i.jpg

der Bereich in Spalte C ist 2 und so weiter.

I wird auf einem anderen Tabellenblatt hochgezählt 1,2,3,4 etc.
und ich muss in der ComboBox ZEILENSPEZFISCH sagen, du hast den Namensraum 1 nach Daten zu fragen.
oder eben den Namensraum 2, je nachdem, ob man in die erste oder zweite Zeile geklickt hat.

Allerdings muss das ganze für dreißig (bzw. 31) Tage funktionieren.
____________________
Mein Fehler fällt mir gerade auf xD
1 ist nicht gleich "Eins"

Wäre das nächste Problem, kann man das (ohne alles einzeln zu deklarieren) bestimmen? :D

Kollaps
14.07.2014, 12:56
Diese Range möchte ich ja über den Namensraum definieren.
Das war schon beim Dropdown in Excel direkt ne ziemliche fleißarbeit.

Also Namensraumvergabe
Range("A3:A10") = Eins
Range("B3:B10") = Zwei

(im Original)

Jetzt muss ich hinbekommen, dass einmal i als "Eins" erkannt werden kann UND das sich das ganze in dem RowSource von sich aus ändert!

(geht übrigens bis 54 das Spiel...)

Kollaps
14.07.2014, 13:24
Okay, Zahl zu Wort habe ich jetzt in der Spalte daneben gelöst.
Wie bekomme ich das variabel in den RowSource rein?

Der soll mir dann ja nicht "Eins", "Zwei", "Drei" wiedergeben, sondern die hinterlegten Werte in der Tabelle, die ich eben als Screenshot hochgeladen habe...

Mc Santa
14.07.2014, 13:38
Hallo,

Bitte lade Dateien (am besten eine Exceltabelle und kein Bild) hier im Forum hoch. Fremdanbieter werden bei mir geblockt.

VG

Kollaps
14.07.2014, 13:39
Puh, dafür müsste ich jetzt ne Stunde Daten rauslöschen...

Mc Santa
14.07.2014, 13:41
Hallo,

Du könntest auch die Datei neu erstellen auf der Grundlage von deinem Bild.
Das würde ich genauso tun(, wenn ich das Bild denn sehen könnte).

VG

Kollaps
14.07.2014, 13:48
hier mal auf die Schnelle ein Extrem vereinfachtes Modell der Geschichte...

Kollaps
15.07.2014, 08:19
Okay, die Frage einmal anders formuliert:

Wie schaffe ich es, dass das UserForm als RowSource den NAMEN in einer bestimmten Zelle nimmt?

Nepumuk
15.07.2014, 08:57
Hallo,

so:
ComboBox2.RowSource = Range(Worksheets("Projekt-Service").Cells(lZeile, 44).Value).Name
Die Variable lZeile muss aber vorher gesetzt werden und nicht wie in deiner Prozedur danach !!!

Kollaps
15.07.2014, 09:15
Okay, verstanden, gemacht.

Neuer Fehler :D

Laufzeitfehler: '1004':
Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen.

Den hatte ich auch noch nie.
Hiernach hab ich glaub ich alle Fehler einmal durch :D

Die Hilfe von Microsoft ist auch irgendwie merkwürdig?
Komm ich eindeutig nicht auf einen Nenner mit! :D
______________________________________________________________

Muss da evtl. nochmal Worksheets... vor?

Nepumuk
15.07.2014, 09:48
Hallo,

hast du das setzen der Variablen lZeile auch vor diese Zeile gesetzt? In deiner Mappe kam die Anweisung lZeile = 7 nämlich dahinter.

Kollaps
15.07.2014, 09:50
Ja, habe ich gemacht.
Ich bin ja gehörig :D

Private Sub UserForm_Initialize()
Dim lZeile As Long
Dim i As Integer

TextBox3 = ""
ComboBox1 = ""
ComboBox2 = ""

ListBox1.Clear

lZeile = 7

Me.ComboBox1.RowSource = "Projekte"

ComboBox2.RowSource = Range(Worksheets("Projekt-Service").Cells(lZeile, 44).Value).Name

TextBox3.Enabled = False
ComboBox1.Enabled = False
ComboBox2.Enabled = False


Do While Trim(CStr(Worksheets("Projekt-Service").Cells(lZeile, 43).Value)) <> ""

ListBox1.AddItem Trim(CStr(Worksheets("Projekt-Service").Cells(lZeile, 43).Value))
ListBox1.ListIndex = 0

DTPicker1.Value = Worksheets("data").Cells(lZeile, 3)
TextBox3 = Worksheets("data").Cells(lZeile, 12).Value
ComboBox1 = Worksheets("data").Cells(lZeile, 9).Value
ComboBox2 = Worksheets("data").Cells(lZeile, 7).Value

lZeile = lZeile + 1
i = i + 1

Loop




End Sub

Und das meckert er mit gegebenem LF an:
Range(Worksheets("Projekt-Service").Cells(lZeile, 44).Value).Name

Nepumuk
15.07.2014, 09:54
Hallo,

welchen Wert hat:

Worksheets("Projekt-Service").Cells(lZeile, 44).Value

in dem Moment? Ich hab das ja in deiner Mappe getestet und keine Fehlermeldung erhalten.

Kollaps
15.07.2014, 09:58
"=WENN(AQ7=1;"Eins";"")"

Da keine 1 eingetragen ist also: ""
in dem Test ist es eingetragen, ne?

Stimmt.
Aber, wenn ich die dauerhaft drin habe, habe ich das Gefühl, dass was neues schief geht :D
________________________________

Jau, ich glaub das nicht :D
Mit eingetragenem Wert bekomme ich keinen Fehler.
Allerdings trotzdem keine Auswahlmöglichkeit in der ComboBox2.

Das allerdings kann an der Mappe liegen, ich schau mir das mal genauer an.

Rein theoretisch, kann ich doch sagen bei ComboBox2 Change trag ein, ne?

Kollaps
15.07.2014, 10:19
Gut. Läuft.


Herzlichsten Dank an alle beteiligten. :)

Nepumuk
15.07.2014, 10:36
Hallo,

du hast die Boxen an 2 !!! Stellen disabled, kein Wunder dass sich nix auswählen lässt.

Kollaps
15.07.2014, 10:39
Wer möchte kann sie sich hier runterladen und für sich umschreiben.

:)

Eventuell solltet ihr dann darauf achten wirklich EURE Tabellenblattnamen zu benutzen und eure Ranges :D

Das habe ich am Anfang nämlich alles übersehen und naja :D
________________
Komando zurück. Entschuldigung.

Kollaps
15.07.2014, 12:07
Die werden bei bestimmten Aktionen ja wieder klickbar gemacht, das ist nicht das Problem.

Deine Lösung funktioniert, nach langeweile rumprobieren, leider nicht vollständig.
Wenn ich nicht von Anfang an alle Services hatte, kann ich die später leider auch nicht mehr nutzen.

Hast du ne Ahnung warum?

Kollaps
16.07.2014, 09:23
Okay, ich habe jetzt herumprobiert in allen möglichen Varianten, aber tut das, was er tun soll nur halb.

Er stoppt bei dem ersten Namensbereich und bleibt dann da, obwohl er laut lZeile eine weiter runter gehen müsste.

Ich habe es jetzt da mit eingebaut, weil die beiden in unmittelbarem Zusammenhang stehen.

Private Sub ComboBox1_Click()
Dim lZeile As Long

lZeile = 7


Do While ListBox1.Text = Worksheets("Projekt-Service").Cells(lZeile, 43)

Worksheets("data").Cells(lZeile, 9).Value = ComboBox1.Text
Me.ComboBox2.RowSource = Range(Worksheets("Projekt-Service").Cells(lZeile, 44).Value).Name

lZeile = lZeile + 1

Loop



End Sub

Was habe ich da jetzt falsch gemacht?

Kollaps
16.07.2014, 10:45
So. In Ordnung, das ist mein letztes Problem.
Wenn mir hier noch jemand nenn Hint geben kann bin ich fertig! :)