Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
04.12.10, 13:42
|
#1
|
Anfänger
Registriert seit: Sep 2010
Beiträge: 3
Bedankt: 0
|
VBA Variablen "Platzhalter"
Hallo,
ich habe bereits ein paar kleine Programme mit VBA geschrieben, aber das ist jetzt mein erstes eigenes Programm, also ich habe noch nicht viel Erfahrung.
Aber erstmal grob zu dem Programm, es hat 25 Comboboxen. Ich möchte jetzt sobald sich in einer etwas ändert, dass sich eine Variable um 1 erhöht und eine andere um 1 verringert. Und hier kommt mein Problem.
Es gibt hier insgesamt 31 Variablen, von denen immer 2 betroffen sind, das Ganze könnte ich jetzt mit enorm vielen If Abfragen lösen, dass halt ich aber für unsinnig.
Meine Idee sieht so aus:
Sobald ich auf eine Combobox klicke soll der aktuelle Inhalt in die Variable "Alt" eingelesen werden. Sobald sich der Inhalt der Combobox ändert soll der neue Inhalt in die Variable "Neu" geschrieben werden. Diese beiden Strings ändere ich mit einer Split Funktion so, dass der Inhalt immer identisch mit einer der 31 Variablen ist.
Und jetzt möchte ich, dass der Inhalt der Variablen "Neu" bzw "Alt" in den Platzhalter für den Variablen Namen bei der Variablen zuweisung gesetzt wird. So sieht es bis jetzt bei mir aus:
Code:
Private Sub ComboBoxGrp1_1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBoxGrp1_1.Click
Alt = ComboBoxGrp1_1.Text
Alt = Join(Split(Alt, "Ü"), "ue")
Alt = Join(Split(Alt, "ä"), "ae")
Alt = Join(Split(Alt, " "), "_")
Alt = Join(Split(Alt, "("), "_")
Alt = Join(Split(Alt, ")"), "")
End Sub
Private Sub ComboBoxGrp1_1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBoxGrp1_1.TextChanged
Neu = ComboBoxGrp1_1.Text
Neu = Join(Split(Neu, "Ü"), "ue")
Neu = Join(Split(Neu, "ä"), "ae")
Neu = Join(Split(Neu, " "), "_")
Neu = Join(Split(Neu, "("), "_")
Neu = Join(Split(Neu, ")"), "")
PLATZHALTER_FÜR_INHALT_VON_ALT += 1 '<--Ergibt natürlich noch keinen Sinn
PLATZHALTER_FÜR_INHALT_VON_NEU -= 1 '<--Ergibt natürlich noch keinen Sinn
End Sub
Der untere Teil soll Später dann in eine Funktion, die ich dann für alle Comboboxen aufrufe.
Ich hoffe es ist halbwegs verständlich, was mein Problem ist.
Danke schonmal!
|
|
|
04.12.10, 13:56
|
#2
|
Banned
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
|
Benutz Logik, Gatter-Konstrukte o.ä.
Ist ja wohl ein SAT-Problem.
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Ohne genau zu wissen, was Erfüllt werden muss, kann ich Dir nicht genauer helfen.
|
|
|
04.12.10, 14:44
|
#3
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
Was ich sehe, Du benutzt die falschen Events.
ComboBoxGrp1_1_SelectionChanged (unter VBA heißt es ein wenig anders) ist das richtige Event, was Du dafür brauchst.
Dann brauchst Du nur eine Variable, die den aktuellen Wert zwischenspeichert.
Wenn Du mehrere Comboboxen hast und Du nicht für jede ComboBox eine eigenes EventHandling kreieren willst, kannst Du zu jeder ein AddHandler(<Dein Comboboxname>.SelectionChanged, Address Of MeinEventHandling) hinzufügen.
Dann den EventHandler so setzen:
Code:
Private Sub MeinEventHandling(ByVal sender as Object, ByVal e As System.EventArgs)
Über das Objekt sender kannst Du dann herausfinden, welche ComboBox nun das Event getriggert hat.
Zum Bleistift
Code:
Select Case sender.Name
Case ComboBoxGrp1_1
'mach was
Case ComboBoxGrp1_2
'mach jenes
|
|
|
04.12.10, 16:39
|
#4
|
Anfänger
Registriert seit: Sep 2010
Beiträge: 3
Bedankt: 0
|
Danke schonmal für die Antworten.
Das Event ist evtl noch nicht ganz richtig, das stimmt. Aber mein Hauptproblem besteht dennoch, dass "PLATZHALTER_FÜR_INHALT_VON_ALT" durch den Inhalt von der Variablen "Alt" ersetzt werden soll.
Als Beispiel:
In der Combobox steht Test 1, ich klicke auf diese Combobox und die Variable "Alt" bekommt den Inhalt Test_1. Dann wähle ich in der Combobox einen neuen Inhalt, Test 2, aus und die Variable "Neu" bekommt den Inhalt Test_2.
Jetzt soll aus:
Code:
PLATZHALTER_FÜR_INHALT_VON_ALT += 1
PLATZHALTER_FÜR_INHALT_VON_NEU -= 1
Code:
Test_1 += 1
Test_2 -= 1
|
|
|
05.12.10, 23:50
|
#5
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
Gib mal mehr Info's:
1. Haben die ComboBoxen Inhalt oder willst Du sie als TextBox missbrauchen?
2. Was willst Du genau erreichen? Was mir aus Deinem bisherigen Code nicht klar wird, was machst Du mit den Variablen Neu und Alt?
Code:
Public Class FooBar
Private Alt as String
Private Neu as String
Private PHIndex as Integer
'...
'Dein Code hier
'...
Sub ComboBox.SelectionChanged(..)
Dim MeineCb as ComboBox = sender
Alt = MeineCb.Item(PHIndex).ToString
PHAlt += 1
PHNeu -= 1
Neu = MeineCb.SelectedItem.ToString
|
|
|
06.12.10, 17:54
|
#6
|
Anfänger
Registriert seit: Sep 2010
Beiträge: 3
Bedankt: 0
|
Die Comboboxen haben bereits einen Inhalt, insgesamt 31 Auswahlmöglichkeiten. Die Variablen Neu und Alt wollte ich jeweils für den alten Inhalt der Combobox nehmen, also bevor man einen neuen Inhalt wählt und für den neuen Inhalt, nach der Änderung, die Variable Neu.
Letzendlich will ich zählen welcher Inhalt wie oft vorhanden ist, deswegen muss die Variable von dem alten Inhalt -1 genommen werden und die neue +1.
Ich klicke auf die Box, der aktuelle Inhalt Test1 wird eingelesen in die Variable Alt, jetzt ändere ich den Inhalt auf Test2 und Neu bekommt den Inhalt Test2. Und jetzt soll sozusagen der Inhalt der beiden Variablen als Variablenname genommen werden. Die 31 Variablen wurden vorher schon deklariert und sind identisch mit den Auswahlmöglichkeiten.
Aus dem Teil
PlatzhalterAlt -=1 soll Test1 -=1 werden
und aus
PlatzhalterNeu +=1 soll Test2 +=2 werden
Momentan habe ich das ganze erstmal so gelöst, dass ich den Inhalt der Variablen an jeweils eine Funktion übergebe, die mit 31 If Abfragen überprüft welche Variable es ist und addiert, bzw. subtrahiert diese dann mit 1. Es funktioniert zwar, aber ich denke aber das es auch einfacher und sinnvoller geht.
|
|
|
08.12.10, 00:12
|
#7
|
Erfahrener Newbie
Registriert seit: Mar 2009
Beiträge: 154
Bedankt: 56
|
Irgendwie verstehe ich immer noch nicht ganz, was Du erreichen willst.
Zitat:
Letzendlich will ich zählen welcher Inhalt wie oft vorhanden ist, deswegen muss die Variable von dem alten Inhalt -1 genommen werden und die neue +1.
|
Du hast also 25 ComboBoxen. Diese ComboBoxen haben jeweils 31 Einträge, die identisch sind?
Und Du willst nun herausfinden, wie oft derselbe Eintrag in den ComboBoxen ausgewählt wurde?
Zitat:
Ich klicke auf die Box, der aktuelle Inhalt Test1 wird eingelesen in die Variable Alt, jetzt ändere ich den Inhalt auf Test2 und Neu bekommt den Inhalt Test2. Und jetzt soll sozusagen der Inhalt der beiden Variablen als Variablenname genommen werden. Die 31 Variablen wurden vorher schon deklariert und sind identisch mit den Auswahlmöglichkeiten.
|
Den Teil habe ich Dir im vorherigen Beispielcode gepostet. Du brauchst lediglich eine Platzhaltervariable, die den Index des ausgewählten Items speichert.
Darüber kommst Du dann an den Inhalt des zuletzt gewählten Items.
Somit sparst Du Dir die beiden Events, zumal sie für Deinen Einsatzzweck fehlerhaft sind.
Beispiel:
Du klickst in Die ComboBox und das Click-Event wird ausgelöst.
Du wählst ein neues Item per Maus oder mit Tastatur aus. SelectionChanged-Event wird ausgelöst. TextChanged-Event wird evtl. ausgelöst (Je nachdem, wie der Modus der ComboBox eingestellt ist und ob Du die Pfeiltasten nimmst oder Buchstaben).
Ok, nun bleibst Du in der ComboBox und wählst ein weiteres Item mit den Pfeiltasten aus und siehe da, SelectionChanged-Event wird ausgelöst,Click-Event jedoch nicht.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
().
|