Combobox mit Variable ansprechen

Hallo Zusammen

Ich habe wieder einmal eine knifflige Frage. :smiley:

Also, folgendes:

Ich habe verschieden ComboBoxen, bei denen beim Verlassen eine Prozedur ausgelöst wird.

Nun möchte ich diese Comboboxen mit einem Makro füllen und dann auch gleich diese „_Exit“ Funktion ausführen. Nun habe ich aber das Problem, dass ich nicht weiss wie ich diese ComboBoxen ihm Code ansprechen.

Wichtig dabei: Ich möchte die ComboBoxen nicht namentlich ansprechen, sondern über eine Variable.

Ist das möglich?
Wenn ja, wie?

Danke für die Hilfe

Jochen

Habe schon folgendes versucht:

  1. Versuch

CB1 As String

CB1 = „ComboBox1“

Call Me(CB1)_Exit

  1. Versuch

CB1 As String
CB1_Object As Object

CB1 = „ComboBox1“
CB1_Object = Me(CB1)

Call CB1_Object_Exit

Beides ging nicht.

Hallo,

Du verrätst nicht, ob es um VB6 oder VBA geht.

In VB6 sieht das so aus:

Option Explicit

Private Sub Command1\_Click()
 Dim i As Integer
 i = 1
 Me.Controls("CB" & CStr(i)).AddItem "Test"
End Sub

Das fügt der Combobox ‚CB1‘ eine Zeile ‚Test‘ hinzu.
In Excel wird das ähnlich sein.

Gruß Rainer

Hallo Jochen,

Ich habe wieder einmal eine knifflige Frage. :smiley:

das sehe ich noch nicht. Ich sehe es erstmal als „knifflige“ Rätselaufgabe für die Helfer zu ermitteln was bei dir vorliegt und was du genau möchtest.

Wenn deine Angaben stimmen geht es um VBA.
@Rainer auch mir ist es, da es das 10 jahre nicht gab, noch nicht in Fleisch und Blut übergegangen bis nach unten zu den Stichworten zu scrollen :frowning: Dazu kommt zu 98% bringts nix, hier hätte es dir was gebracht. Mal abgesehen davon daß etliche Anfrager das ggfs. falsch angeben aus Unkenntnis.

Wieder zu Jochen. In Excel-Vba gibt es zwei ComboBoxen.
Diejenige die du auf ein Tabellenblatt legst kennt kein Exit-Erignis.
Wenn es also bei dir um das Exit-Erignis einer ComboBox geht
so muß die in einer Userform stehen. Dann sieht der prozedurrumpf so aus:
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
End Sub

Insofern, geht es um diesen _Exit Aufruf oder hast du da eine
-Exit-Prozedur selbst geschrieben die aufgerufen werden soll wen, äh, ja, was eigentlich geschieht?

Wenn du diese CB auf der UF verläßt erübrigt es sich den Namen der CB zu kennen. Ihr -Exitcode reagiert dann automatisch.

Was also liegt da vor und warum muß ich da rumrätseln?

Ist ja okay und belang wenn du nur Codeschipsel zeigst.
Besser ist allemal eine kleine selbst laufende Prozedur.
Ob sie Fehler produziert ist ohne Belang.
Wichtig für Helfer ist den Code zu kennen um den es geht.

Wie gesagt, manchmal ist ach ein Codeschnipsel okay. ABER bei allem Verständnis für Minimalismus, was zum henker soll denn das sein?
CB1 As String
Da knurrt doch jeder Debugger :smile:

Gut, das Dim kann ich mir noch dazudenken aber warum steht es da nicht?
Dann kommt sowas:
Call Me(CB1)_Exit

Glaub mir, kein mensch auf Erden kann sich da erdenken was du damit meinst. Bzw. schon aber das sind zig Möglichkeiten.
Alle sagen dir wie ich, zeig da mal deine relevanten Codes.

Gruß
Reinhard

@Rainer auch mir ist es, da es das 10 jahre nicht gab, noch
nicht in Fleisch und Blut übergegangen bis nach unten zu den
Stichworten zu scrollen :frowning:

Stimmt, Sorry.

Die Stichworte übersehe ich regelmäßig.

Gruß Rainer

Es ist leider VBA

Hallo Reinhard
Danke für die ausführliche Antwort. Wie du merkst, bin ich kein Spezialist was das posten in Foren angeht. Normalerweise finde ich die Lösung indem ich andere Beiträge durchlese. Daher danke für die Tipps, ich werde sich berücksichtigen.

Was deine Vermutungen angeht, stimmt so ziemlich alles was du angenommen hast. Es handelt sich um die ComboBox aus einer UserForm und ich möchte eben genau die

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
End Sub

Funktion ansprechen. Ich habe keine eigene programmiert.

Hier das Szenario: (Codesätze kann ich leider erst Morgen posten, wenn ich im Geschäft bin)

Ich habe eine UserForm (Name: UserForm6) mit der ich ein Produkt erstellen kann. Dieses Produkt kann verschieden Unterprodukte haben, welche ich aus den vielen ComboBox auslesen kann. Diese Unterprodukte sind in einem speziellen Tabellenblatt angelegt.
Damit nicht jedesmal alle Produkte durchgesucht werden, wenn ich einen Buchtaben eintippe, geht die Suchfunktion erst beim verlassen der ComboBox los. Wenn ich die ComboBox verlasse, wird das Produkt anschliessend im Tabellenblatt gesucht und die benötigten Atribute werden geladen.
Wenn das eingegebene Produkt nicht gefunden werden kann, wird automatisch eine neue UserForm gestartet (UserForm5) in der man das Unterprodukt erfassen kann. Es wird dann im entsprechendem Tabellenblatt abgelegt. Beim schliessen der UserForm5 wird der Name des neuen Produkts in die entsprechende ComboBox geschrieben.

Und jetzt kommt mein Problem.

Ich möchte das die Atribute dann automatisch geladen werden. Dafür muss ich aber diese Exit-Funktion von der ComboBox aufrufen.
Ich kann zwar auch kurz in die ComboBox klicken und wieder rausgehen, aber ich möchte es lieber direkt mit meinem Code machen.

Ist die Problematik jetzt klarer?

Ich weiss, dass es extrem schwer ist, die Problematik zu verstehen, wenn man sich nicht täglich damit befasst. :smile:
Darum bin ich um dein Bemühen echt dankbar!!!

Gruss Jochen

@Rainer auch mir ist es, da es das 10 jahre nicht gab, noch
nicht in Fleisch und Blut übergegangen bis nach unten zu den
Stichworten zu scrollen :frowning:

Stimmt, Sorry.
Die Stichworte übersehe ich regelmäßig.

Hallo Rainer,

daß die Stichworte so weit unten sind ist schon eine Einladung sie zu übersehen.
Übrigens, das weißt du garantiert auch so wie, wenn man nicht aufs genaueste auf den Scrollbalken achtet, wer macht das schon ohne Grund, liest/sieht man eine Beitragstext.
Wenn der so wirkt als wäre es der ganze Text gewesen so scrollt man nicht, ich zumindest nicht, schon öfters geschehen.
Dabei geht mir halt flöten daß da nach dem Beitrgstext der für mich den Eindruck machte das wäre der Gesamttext, noch weitere Textpassagen folgen.

Und da ich mich bei Anfragen in den Anfragetext vertiefe und über Lösungen nachsinne habe ich schon längst vergessen welcher Nick da die Anfrage stellte und was er/sie im Betreff schrieb.
Zum Glück nur sehr sehr selten, meist merke ich das noch vorher,
frage ich dann nach um welche Excelversion es denn geht falls ich das als wichtig erachte.
Naja, daß im Betreff dick steht „Excel 2007“, was soll ich dazu sagen *grins*

Wie gesagt, sowas ist bei mir seltenst sonst würde ich mir Gedanken machen.
Und sowas ist halt menschliches Versagen und bringt für ein Forum keinerlei Probleme.
Du hast so gesehen die nachfrage gestellt, geht es um VB oder VBa.
Na und, da fällt doch dem Anfrager kein Zacken wenn er dir sagt Vba.
Auch (mein Humor), kurzer Hinweis im Betreff auf Fielmann ist da okay *grins*
Oder sonstige Antworten, alles kein Problem.

Wichtig ist einzig daß man weiß was beim Anfrager vorliegt.
Nur das hilft ihm.

Daß mit immer auch zu den Stichworten runterscrollen muß ich halt noch üben.

Gruß
Reinhard

Hier das Szenario: (Codesätze kann ich leider erst Morgen
posten, wenn ich im Geschäft bin)

Hallo Jochen,

dann warte ich bis Morgen. Habe deshalb auch deinen nachfolgenden Text nur überflogen.

Prinzipiell ist jede Ereignisprozedur wie _Exit eine Prozedur die man auch durch andere Pozeduren starten kann.

Nimm mal eine leere neue Mappe, erstelle eine UF, darauf einen CommandButton und eine ComboBox.
Dann im Modul der Uf diesen Code:

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox „huhu“
End Sub

Private Sub CommandButton1_Click()
Call ComboBox1_Exit(True)
End Sub

Dann F5 und klick auf d en Button, du siehst das _Exitereignis bzw. dessen Code wird ausgelöst.

Morgen schauen wir weiter ob das für dich hilfreich ist.

Gruß
Reinhard

Hallo Jochen, Hallo Reinhard,

ahhh, jetzt ist es klar.

Die Prozedur [Variable]_Exit soll ausgeführt werden.
Von einer Stelle aus verschiedene Prozeduren. D.h. eigentlich immer die selbe Prozedur, aber von verschiedenen Steuerelementen (verschiedenen Comboboxen).

Ich hab’s mal für VB gebaut, zu meiner Überraschung geht das. :smile:

@Reinhard:
Kannst Du’s mal nach Exel-VBA umstricken?

Option Explicit

Private Sub Combo1\_Validate(Cancel As Boolean)
 MsgBox "Hat geklappt!"
End Sub

Private Sub Command1\_Click()
 Dim cb1 As String
 Dim Ctrl As Control
 cb1 = "Combo1"
 Ctrl = Controls(cb1)
 Call Ctrl\_Validate
End Sub

Gruß Rainer

1 Like

Hallo Reinhard,

Private Sub CommandButton1_Click()
Call ComboBox1_Exit(True)
End Sub

ich glaube, fast richtig, aber variabel.
Der Cod soll von der selben Stelle aus verschiedene Prozeduren aufrufen können. Ich hab’s in VB6 versucht, läuft.

Option Explicit

Private Sub Combo1\_Validate(Cancel As Boolean)
 MsgBox "Hat geklappt!"
End Sub

Private Sub Command1\_Click()
 Dim cb1 As String
 Dim Ctrl As Control
 cb1 = "Combo1"
 Ctrl = Controls(cb1)
 Call Ctrl\_Validate
End Sub

Gruß Rainer

Ja genau dieser Lösungsansatz brauche ich!!! :smiley:

Echt genial wie ihr euch in die Problematik hineinversetzen könnt.

Gruss

Jochen

Hallo Reinhard, Hallo Rainer
Ich glaube wir sind auf einem echt guten Weg.

Danke schon mal vorab!!!

Rainer hat die Problematik perfekt zusammen gefasst. Leider funktioniert der Code von VB6 nicht einwandfrei auf VBA.

Ich habe hier mal ein Muster programmiert:


Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Diese Funktion soll ausgelöst werden

MsgBox („Hat geklappt“)

End Sub


Private Sub CommandButton1_Click()
'Version mit Variable --> Funktioniert noch nicht
Dim cb1 As String
Dim Ctrl As Object

cb1 = „ComboBox1“
Ctrl = Me(cb1)

Call Ctrl_Exit(Nothing)

End Sub


Private Sub CommandButton2_Click()
'Version ohne Variable -> Funktioniert auch!!!

Call ComboBox1_Exit(Nothing)

End Sub


(Ich hoffe diesmal ist der Code besser. :wink:)

All dies spielt in EINEM UserForm ab!!

Ich weiss noch nicht, was das Problem ist, aber das müsste doch klappen.

Gruss Jochen