Discussion:
Combobox mit Daten aus 2 Spalten untereinander füllen
(zu alt für eine Antwort)
Martina Möhrke
2007-03-08 10:13:11 UTC
Permalink
Hallo NG,

jetzt benötige ich bitte noch einmal Eure Hilfe (excel 2003). Über die
Combobox cboartikelnummer kann ich eine Artikelnummer eingeben, die in
meiner Liste auf dem Tabellenblatt "Artikelliste" in Spalte A steht
(A4). Die dazugehörigen Daten erscheinen in den anderen Feldern auf
meiner Userform. So auch die neue Artikelnummer, die ich nach einer
Katalogumstellung jetzt über den CommandButton "Daten in Artikelliste
korrigieren" ändere.

Wenn diese Änderung nun vorgenommen wurde und ich die neue
Artikelnummer in meine Combobox cboartikelnummer eingebe, stellt die
Combobox diese neue Artikelnummer natürlich nicht zur Verfügung. Wie
kann ich dies ermöglichen? Die neue Artikelnummer steht in "B4" der
"Artikelliste".

Also müsste der Zugriff der Combobox auf die Daten der Spalten A und B
der Artikelliste erfolgen und diese Inhalte untereinander in dieser
Combobox zur Verfügung stellen. Geht so etwas?

Bislang sieht mein Code für das Füllen der Combobox so aus:

'Kombinationsfeld cboartikelnummer mit Daten füllen
Private Sub cboartikelnummer_Change()
Dim textstr1 As String, textstr2 As String
If cboartikelnummer.ListIndex <> -1 Then
txtartikelnummerneu =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
1)
txtartikelnummerneu.Enabled = False
txtName =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
2)
txtName.Enabled = False
txtKatalog =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
3)
txtKatalog.Enabled = False
txtStückpreis =
Format(Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
4), "#0.00")
txtStückpreis.Enabled = False
txtPreis100Stück =
Format(Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
5), "#0.00")
txtPreis100Stück.Enabled = False
Else
txtartikelnummerneu = ""
txtartikelnummerneu.Enabled = True
txtName = ""
txtName.Enabled = True
txtKatalog = ""
txtKatalog.Enabled = True
txtStückpreis = ""
txtStückpreis.Enabled = True
txtPreis100Stück = ""
txtPreis100Stück.Enabled = True
End If
End Sub

Ich hoffe, ich habe mein Problem einigermaßen deutlich geschildert.
Freue mich über Eure Tipps und Vorschläge. Herzlichen Dank schon
einmal im Voraus!

Gruß
Martina Möhrke
stefan onken
2007-03-08 13:32:24 UTC
Permalink
hallo Martina,
das hatten wir doch schonmal ;)
Das ist nicht der Code, mit dem du die Combobox füllst, sondern der,
der abläuft, nachdem du einen Wert in der Combobox ausgewählt hast.
Der Code zum füllen ist (insofern du den nicht inzwischen geändert
hast):

Private Sub UserForm_Initialize()
cboartikelnummer.RowSource = "Artikelliste!A4:C120"
txtName = ""
End Sub

So, und nun kommt das Dilemma. Man kann bei angezeigtem UserForm einer
Combobox Werte hinzufügen mit Combobox.AddItem
Das geht aber nur, wenn die vorhandenen Werte nicht über RowSource
zugewiesen wurden.
Du musst also den Code im Initialize ändern in:

For i= 4 to 120
cboartikelnummer.AddItem Sheets("Artikelliste").range("A"& i).Value
Next
txtName = ""

In den Code des CommandButton "Daten in Artikelliste korrigieren"
integrierst du dann sowas wie
cboArtikelnummer.AddItem "neueArtikelnummer"

So. Wenn ich das richtig sehe, hast du Artikelnummern in Spalte A und
B.
Dein jetziger Code aus cboartikelnummer_Change
Range("A4").Offset(cboartikelnummer.ListIndex
sieht vor, das die Reihenfolge in der Combobox mit der Reihenfolge in
der Tabelle, und zwar Spalte A, übereinstimmt. Wenn du Artikelnummern
aus Spalte B einfach unten dran hängst in der Combobox, klappt das mit
der Zuordnung nicht mehr. Abhilfe wäre auch hier wieder die Find-
Funktion, um in Spalte A und B nach der ausgewählten Artikelnummer zu
suchen, oder das Konzept mit den 2 Spalten nochmal zu überdenken ;)

Gruß
stefan
Post by Martina Möhrke
Hallo NG,
jetzt benötige ich bitte noch einmal Eure Hilfe (excel 2003). Über die
Combobox cboartikelnummer kann ich eine Artikelnummer eingeben, die in
meiner Liste auf dem Tabellenblatt "Artikelliste" in Spalte A steht
(A4). Die dazugehörigen Daten erscheinen in den anderen Feldern auf
meiner Userform. So auch die neue Artikelnummer, die ich nach einer
Katalogumstellung jetzt über den CommandButton "Daten in Artikelliste
korrigieren" ändere.
Wenn diese Änderung nun vorgenommen wurde und ich die neue
Artikelnummer in meine Combobox cboartikelnummer eingebe, stellt die
Combobox diese neue Artikelnummer natürlich nicht zur Verfügung. Wie
kann ich dies ermöglichen? Die neue Artikelnummer steht in "B4" der
"Artikelliste".
Also müsste der Zugriff der Combobox auf die Daten der Spalten A und B
der Artikelliste erfolgen und diese Inhalte untereinander in dieser
Combobox zur Verfügung stellen. Geht so etwas?
'Kombinationsfeld cboartikelnummer mit Daten füllen
Private Sub cboartikelnummer_Change()
Dim textstr1 As String, textstr2 As String
If cboartikelnummer.ListIndex <> -1 Then
txtartikelnummerneu =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
1)
txtartikelnummerneu.Enabled = False
txtName =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
2)
txtName.Enabled = False
txtKatalog =
Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex,
3)
txtKatalog.Enabled = False
txtStückpreis =
Format(Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex­,
4), "#0.00")
txtStückpreis.Enabled = False
txtPreis100Stück =
Format(Sheets("Artikelliste").Range("A4").Offset(cboartikelnummer.ListIndex­,
5), "#0.00")
txtPreis100Stück.Enabled = False
Else
txtartikelnummerneu = ""
txtartikelnummerneu.Enabled = True
txtName = ""
txtName.Enabled = True
txtKatalog = ""
txtKatalog.Enabled = True
txtStückpreis = ""
txtStückpreis.Enabled = True
txtPreis100Stück = ""
txtPreis100Stück.Enabled = True
End If
End Sub
Ich hoffe, ich habe mein Problem einigermaßen deutlich geschildert.
Freue mich über Eure Tipps und Vorschläge. Herzlichen Dank schon
einmal im Voraus!
Gruß
Martina Möhrke
Martina Möhrke
2007-03-08 14:15:49 UTC
Permalink
Hallo Stefan,
Post by stefan onken
das hatten wir doch schonmal ;)
Das ist nicht der Code, mit dem du die Combobox füllst, sondern der,
der abläuft, nachdem du einen Wert in der Combobox ausgewählt hast.
Sorry, irgendwann werde ich verstehen, welcher Code was auslöst.
Post by stefan onken
Der Code zum füllen ist (insofern du den nicht inzwischen geändert
Private Sub UserForm_Initialize()
cboartikelnummer.RowSource = "Artikelliste!A4:C120"
txtName = ""
End Sub
Etwas angepasst, da Anzahl der Zeilen variabel sein soll (auch ein
Tipp aus der NG) - aber funktioniert.
(...)
lnglastrow = Sheets("Artikelliste").Range("A65536").End(xlUp).Row
cboartikelnummer.RowSource = "Artikelliste!A4:C" & lnglastrow
(...)
Post by stefan onken
So, und nun kommt das Dilemma. Man kann bei angezeigtem UserForm einer
Combobox Werte hinzufügen mit Combobox.AddItem
Das geht aber nur, wenn die vorhandenen Werte nicht über RowSource
zugewiesen wurden.
For i= 4 to 120
cboartikelnummer.AddItem Sheets("Artikelliste").range("A"& i).Value
Next
txtName = ""
In den Code des CommandButton "Daten in Artikelliste korrigieren"
integrierst du dann sowas wie
cboArtikelnummer.AddItem "neueArtikelnummer"
So. Wenn ich das richtig sehe, hast du Artikelnummern in Spalte A und
B.
Dein jetziger Code aus cboartikelnummer_Change
Range("A4").Offset(cboartikelnummer.ListIndex
sieht vor, das die Reihenfolge in der Combobox mit der Reihenfolge in
der Tabelle, und zwar Spalte A, übereinstimmt. Wenn du Artikelnummern
aus Spalte B einfach unten dran hängst in der Combobox, klappt das mit
der Zuordnung nicht mehr. Abhilfe wäre auch hier wieder die Find-
Funktion, um in Spalte A und B nach der ausgewählten Artikelnummer zu
suchen, oder das Konzept mit den 2 Spalten nochmal zu überdenken ;)
Ich werde mir das mal überlegen. Vielleicht fällt mir noch eine andere
Möglichkeit ein, wie ich diese Sache angehen kann.

Erst einmal recht herzlichen Dank für Deine Erklärungen!

Gruß
Martina Möhrke
Martina Möhrke
2007-03-09 10:31:27 UTC
Permalink
Hallo Stefan,
Hallo NG,

ich hätte noch eine andere Idee, wie mein Problem gelöst werden
könnte.

Die Zeilen der Artikelliste, die in Spalte B (neue Artikelnummer)
einen Eintrag haben, werden kopiert und am Ende der Liste eingefügt.
Dabei wird der Eintrag in Spalte B in Spalte A geschrieben und
umgekehrt. Die restlichen Daten bleiben bestehen. Somit ist dann
gewährleistet, dass auch die "neuen Artikelnummern" in der Combobox,
die die Artikelnummern aus Spalte A anzeigt, wiedergegeben werden.

Ist dies mit einem Makro machbar? Gibt es Ideen?

Vielen Dank für Eure Hilfe!!

Gruß
Martina Möhrke
stefan onken
2007-03-09 14:50:06 UTC
Permalink
Post by Martina Möhrke
Hallo Stefan,
Hallo NG,
ich hätte noch eine andere Idee, wie mein Problem gelöst werden
könnte.
Die Zeilen der Artikelliste, die in Spalte B (neue Artikelnummer)
einen Eintrag haben, werden kopiert und am Ende der Liste eingefügt.
Dabei wird der Eintrag in Spalte B in Spalte A geschrieben und
umgekehrt. Die restlichen Daten bleiben bestehen. Somit ist dann
gewährleistet, dass auch die "neuen Artikelnummern" in der Combobox,
die die Artikelnummern aus Spalte A anzeigt, wiedergegeben werden.
Ist dies mit einem Makro machbar? Gibt es Ideen?
Vielen Dank für Eure Hilfe!!
Gruß
Martina Möhrke
hallo Martina,
das ist prinzipiell möglich. Es entsehen aber doppelte Datensätze. Die
Verwaltung der Datensätze wird dadurch schwieriger.
Wie wäre es denn mit einer 2. Combobox für ArtikelNeu?

Wenn du die Artikelnummern aus A und B in einer Combobox haben willst,
musst du den Code zum füllen ändern:

lnglastrow = Sheets("Artikelliste").Range("A65536").End(xlUp).Row
For i =4 To lngLastRow
cboartikelnummer.AddItem Sheets("Artikelliste").Range("A"& i)
cboartikelnummer.AddItem Sheets("Artikelliste").Range("B"& i)
Next

und der Code im cboartikelnummer_Change müsste im Prinzip so aussehen:

With Sheets("Artikelliste")
Set suche = .Range("A:B").Find(ComboBox1)
If Not suche Is Nothing Then
txtArtikelnummerNeu = .Cells(suche.Row, 2)
txtName = .Cells(suche.Row, 3)
txtKatalog = .Cells(suche.Row, 4)
Else
txtArtikelnummerNeu = ""
txtName = ""
txtKatalog = ""
End If
End With

Gruß
stefan
Martina Möhrke
2007-03-12 07:36:17 UTC
Permalink
Guten Morgen, Stefan,

hoffe, Du hattest auch ein super sonniges Wochenende!

Deine Idee ist nicht schlecht. Ich habe den Code ausprobiert. Leider
entsteht in nachfolgender Zeile ein Laufzeitfehler 70, Zugriff
verweigert. Wie kommt dies?
Post by stefan onken
cboartikelnummer.AddItem Sheets("Artikelliste").Range("A"& i)
Ich werde schauen, ob sich allgemein Dein Vorschlag in der Anwendung
gut verarbeiten lässt. Ansonsten muss ich meine Überlegungen in eine
andere Richtung lenken.

Vorab nochmals vielen Dank!

Guten Start in die neue Woche!
Gruß
Martina Möhrke
Martina Möhrke
2007-03-12 08:52:43 UTC
Permalink
Hallo Stefan,

ich habe mir überlegt, einfach eine zusätzliche Userform mit der
Prüfung der Artikelnummern vorzuschalten. Ich möchte also die
Artikelnummer in ein Textfeld eingeben, über einen CommandButton die
Nummer prüfen und dann in Textboxen "Alte Artikelnummer" und "neue
Artikelnummer" die entsprechende Nummer ausgeben lassen. Hierfür werde
ich eine neue Diskussion beginnen, da es sich ja um ein anderes Thema
handelt.

Der Übertrag in die Buchungs-Userform ist dann wiederum ein weiterer
Schritt.

Auf jeden Fall vielen Dank bsi hier hin für die Hilfe!

Gruß
Martina Möhrke
stefan onken
2007-03-12 09:50:00 UTC
Permalink
moin Martina,
Post by Martina Möhrke
Guten Morgen, Stefan,
hoffe, Du hattest auch ein super sonniges Wochenende!
danke, ja!
Und hatte heute das erste Mal Krankengymnastik (nach dem
Achillessehnenriss). Es geht aufwärts!
Post by Martina Möhrke
Deine Idee ist nicht schlecht. Ich habe den Code ausprobiert. Leider
entsteht in nachfolgender Zeile ein Laufzeitfehler 70, Zugriff
verweigert. Wie kommt dies?
das liegt am RowSource im Code von UserForm_Initialize()

lnglastrow = Sheets("Artikelliste").Range("A65536").End(xlUp).Row
cboartikelnummer.RowSource = "Artikelliste!A4:C" & lnglastrow

muss geändert werden in

lnglastrow = Sheets("Artikelliste").Range("A65536").End(xlUp).Row
For i =4 To lngLastRow
cboartikelnummer.AddItem Sheets("Artikelliste").Range("A"& i)
cboartikelnummer.AddItem Sheets("Artikelliste").Range("B"& i)
Next

Evtl steht in den Eigenschaften der cboartikelnummer noch etwas bei
RowSource. Das muss ebenfalls entfernt werden.
Post by Martina Möhrke
Post by stefan onken
cboartikelnummer.AddItem Sheets("Artikelliste").Range("A"& i)
Ich werde schauen, ob sich allgemein Dein Vorschlag in der Anwendung
gut verarbeiten lässt. Ansonsten muss ich meine Überlegungen in eine
andere Richtung lenken.
das hast du ja schon. Für meinen Geschmack werden das etwas zu viele
UserFormen. Desweiteren geht die Funktionalität/Bequemlichkeit der
Combobox verloren, da man in der vorgeschalteten Textbox die Artikelnr
wissen muss.
Ändere den Code im Initialize wie oben geschrieben und teste das dann
noch mal.

stefan
Martina Möhrke
2007-03-13 07:38:31 UTC
Permalink
Guten Morgen, Stefan,

vielen Dank für Deine neuen Informationen.
Post by stefan onken
Und hatte heute das erste Mal Krankengymnastik (nach dem
Achillessehnenriss). Es geht aufwärts!
Freut mich, dass es Dir wieder besser geht. Krankengymnastik erfordert
viel Disziplin, aber nach meiner Meniskusop war es hilfreich. Nur
leider zahlen die Krankenkassen mittlerweile ja nur noch 3 Rezepte,
sprich 18 Anwendungen. Das ist inklusiv anfänglicher Mobilisierung und
anschließendem Aufbautraining nicht das Meiste (aber besser als gar
nichts!).
Post by stefan onken
das hast du ja schon. Für meinen Geschmack werden das etwas zu viele
UserFormen. Desweiteren geht die Funktionalität/Bequemlichkeit der
Combobox verloren, da man in der vorgeschalteten Textbox die Artikelnr
wissen muss.
In meiner neu gestarteten Diskussion hat Herbert Taferner mir einen
Code aufgezeigt, der über eine Inbox die Artikelnummern abfragt. Genau
das, was ich gesucht habe. Du hast Recht, dass man die Artikelnummern
kennen muss. Das ist ok, denn ich gehe davon aus, dass ich immer eine
Nummer kenne. Die Rechnung über den Bürobedarf beinhaltet ja auf alle
Fälle Artikelnummern.

Nochmals danke für Deine Hilfestellung. Dieses Mal konnte ich den
Vorschlag von Herbert besser nutzen.

Bis zum nächsten Mal in der NG,
alles Gute und weiterhin viel Erfolg beim Heilungsprozess
(Krankengymnastik)

Gruß
Martina Möhrke

Loading...