VBA: Key-Press-Code in Sub od. Funktion auslagern?

VBA: Key-Press-Code in Sub od. Funktion auslagern?

Hallo, die Sonntagsfrage:
Kann ich aus der

Private Sub cboAbrisskosten_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
Exit Sub
Case Else
MsgBox „Nur:“„Verkäufer“","„Käufer“", „„Mdt““ (z.B. für Überlasser) und „„Ggn““ (z.B. für „„Übernehmer““ möglich!", vbExclamation
End Select
End Sub

den Select case KeyAscii-Code, der gleichlautend in etlichen Comboboxen benötigt wird, irgendwie auslagern, damit auch die anderen cbocbo auf ihn zugreifen können?
Liebe Grüße
Wilhelm

Hallo,

VBA: Key-Press-Code in Sub od. Funktion auslagern?

Was spricht dagegen :wink: Genau dafür gibt es Funktionen :smile:

Hallo, die Sonntagsfrage:
Kann ich aus der

Private Sub cboAbrisskosten_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Select Case KeyAscii
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
Exit Sub
Case Else
MsgBox „Nur:“„Verkäufer“","„Käufer“", „„Mdt““
(z.B. für Überlasser) und „„Ggn““ (z.B. für „„Übernehmer““
möglich!", vbExclamation
End Select
End Sub

So auf dem ersten Blick, weisst dieser Source ein kleinen Fehler auf!
ICh weiss nun zwar nicht aus dem Stehgreif welcher ASCII Code für welchen Buchstaben steht. Und ehrlich gesagt bin ich auch zu Faul um nachzuschauen :s
Hat aber mit deinen Source nichts zu tun :smile:

Nun aber mal zu deinem Problem :smile:
Was passiert, wenn das „A“ gedrueckt wird?
Der Buchstabe ist nicht zulaessig. Das bekommt dein Script mit und schmeisst einem die MsgBox um die Ohren!
Jedoch wird danach genuesslich der Buchstabe „A“ dargestellt!
Soll das so sein? Ich denke mal nicht.
Wenn ein ungültiges Zeichen eingegeben wurde, dann soll doch sicherlich die Meldung kommen und das zeichen gelöscht bzw. nicht dargestellt werden oder?

Wenn es andem ist, schauen wir uns mal die Randbedingungen an.
Wir bekommen ein Zeichen! Und wenn dieses nicht gewuenscht ist, so soll es nicht dargestellt werden! Das erreichen wir indem wir den Wert auf 0 setzen! Wir ueberlegen mal weiter :wink:
Du brauchst genau diese Version für mehrere Controls?

Nun schauen wir mal, was uns VB alles so bietet.
Wir brauchen etwas, was einen Wert entgegen nimmt und uns etwas zurueck liefert! Wir koennten eine Sub nehmen. Sie empfaengt Daten und wenn sie ByRef übergeben werden, koennen wir sie aendern! Alternativ, sofern es eine Refernez ist, koennen wir diese auch mit ByVal aendern :smile:
Koennte man das realsieren?
Nein, denn es handelt sich um ein Wertetyp den wir nur via ByVal erhalten.
Wir ueberlegen weiter! Wir nutzen eine Function?
Sie kann Parameter annehmen und kann uns werte zurueckliefern!
Genau das ist es, was wir suchen!

Wir schreiben also eine Function! Sie soll von ueberall erreicht werden. Ergo packen wir sie in ein Modul und machen sie öffentlich ( Public) Ihr übergeben wir einfach den ASCII Code und liefern ihn zurueck, wenn er zugelassen ist! Ist er nicht zugelassen, so zeigen wir die MSGBOX an und liefern den WERT 0 zurueck!
Im Keypress Ereignis des Controls, rufen wir einfach die Function auf :smile:
Wir koennten die Sache nun ein wenig weiter spinnen. Wir koennten noch er Function die zugelassenen zeichen mit uebergeben, oder nen Flag was sagt, hey zeige ne MSGBOX an etc. Wie du siehst, werden wir Arg Flexibel dadurch :smile:

Aber nungut kommen wir einfach mal zu realisierung. Den grössten Teil hast du ja schon selber gemacht :smile:

'Code im Modul

Public Function Checkeingabe (vRet as MSForms.ReturnInteger) as MSForms.ReturnInteger
Select Case vRet
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
 Checkeingabe=vret
Case Else
 MsgBox "Nur:""Verkäufer"",""Käufer"", ""Mdt""
(z.B. für Überlasser) und ""Ggn"" (z.B. für ""Übernehmer""
möglich!", vbExclamation
Checkeingabe=0
End Select
End Function

'in der entsprechenden Form, wo das Control befindet rufen wir nun
'die Function auf :smile:

Private Sub cboAbrisskosten\_KeyPress(ByVal KeyAscii as MSForms.ReturnInteger)
 KeyAscii=Checkeingabe(KeyAscii)
End Sub

Wie du nun siehst, brauchst du lediglich nur die eine zeile zu schreiben.
Dabei ist es egal ob es sich um eine textbox etc. handelt :smile:

Übrigens. In VBA bin ich net so bewandert. Aber ich denke mal das
„MSForms.ReturnInteger“ wird schon so stimmen? Ich habe es mal direkt
von dir übernommen :smile:

MfG Alex

Hi Wilhelm,

ich freue mich immer wenn Axel antwortet, weil da kann man immer was lernen, leider ist es so daß ich es noch nie schaffte mehr als 50% zu verstehen was er denn meint weil mir das Hintergrundwissen fehlt :frowning:

Ich erklärs dir mal wie für Dumies wie mich.
Klar geht auslagern. Entweder einfach, indem du für jede vorhandene CB den Code anlegst:
Private Sub cboAbrisskosten_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Call MeinMakro(Keyascii)
End Sub

Oder das als Function wie es Axel aufzeigt.

Oder schwierig, was dann aber in der Handhabung einfach ist.
Du legst eine Klassenmodul für diese CBs an, dann hast du nur einen Code der für alle KeyPress-Ereignisse aller CBs wirkt.

Du schreibst es geht um Vba , immerhin ein Hinweis, aber nicht ausreichend, Vba haben so locker 30 versciedene Programme, klar word, excel, access, aber auch corel draw usw, also nicht unbedingt auf MS beschränkt, und deren Vba unterscheidet sich teilweise gewaltig.
Nur mal so als Info, als bitte gib an welches Vba du meinst.

Am Beispiel von Excel kann ich dir sagen was ich oben mit Klassenmodul gemeint habe.
Das Modul „Tabelle1“ ist ein Klassenmodul. Und da gibt es z.B. das Ereignis „Worksheet_Change“, also ein Zelleninhalt wurde verändert.
Darauf kann man dann reagieren indem man „target“ auswertet.

Genauso ist es wenn du selbst ein Klassenmodul für CBs schreibst,
dann kannst du analog zu eben auf Keypress" reagieren im Code.

Und so ein Klassenmodul für CBs zu schreiben geht fix, sind nur so 8 Codezeilen.
Naja fix ist leider relativ, wers kann braucht da nur 2 Minuten.
Ich kanns leider nicht, aber ich kann mal kramen, ich habe da ein zwei fertige Klassenmodule, nicht für Comboboxen, aber das kannst du ja anpassen, Interesse an den Codes?

Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Wilhelm,

Hi Reinhard :smile:

ich freue mich immer wenn Axel antwortet, weil da kann man
immer was lernen, leider ist es so daß ich es noch nie
schaffte mehr als 50% zu verstehen was er denn meint weil mir
das Hintergrundwissen fehlt :frowning:

Puh, na aber so schwer ist das doch net gewesen. Oder ?
Das einzigste ist das mit den Werte oder Refernenztype. Aber das habe ich dir glaube auch einmal erklaert :wink:

Ich erklärs dir mal wie für Dumies wie mich.
Klar geht auslagern. Entweder einfach, indem du für jede
vorhandene CB den Code anlegst:
Private Sub cboAbrisskosten_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Call MeinMakro(Keyascii)
End Sub

Warum so umstaendlich?

Oder das als Function wie es Axel aufzeigt.

Genau, so hat man eine Function, die functioniert auf „Alle“ Elemente die das KeyPress Ereigniss auslösen :smile:

Oder schwierig, was dann aber in der Handhabung einfach ist.
Du legst eine Klassenmodul für diese CBs an, dann hast du nur
einen Code der für alle KeyPress-Ereignisse aller CBs wirkt.

Das macht doch die Function! Warum willst du da extra ne Klasse basteln?

Du schreibst es geht um Vba , immerhin ein Hinweis, aber nicht
ausreichend, Vba haben so locker 30 versciedene Programme,
klar word, excel, access, aber auch corel draw usw, also nicht
unbedingt auf MS beschränkt, und deren Vba unterscheidet sich
teilweise gewaltig.
Nur mal so als Info, als bitte gib an welches Vba du meinst.

Am Beispiel von Excel kann ich dir sagen was ich oben mit
Klassenmodul gemeint habe.
Das Modul „Tabelle1“ ist ein Klassenmodul. Und da gibt es z.B.
das Ereignis „Worksheet_Change“, also ein Zelleninhalt wurde
verändert.
Darauf kann man dann reagieren indem man „target“ auswertet.

Das Ereignis wird doch ausgelöst bei ihm! Ich denke mal er hat eine Userform. Darauf einfach die Steuerelemente gezogen und kann nun somit auf die Ereignisse der Elemente reagieren :smile:

Genauso ist es wenn du selbst ein Klassenmodul für CBs
schreibst,
dann kannst du analog zu eben auf Keypress" reagieren im Code.

Was verstehst du denn unter einem Klassenmodul?
Unter VB6 waere mir das Fremd. Unter .NET kann ich mir eine Klasse erstellen. Dort dann zum Bsp. die Listbox implementieren und kann dann gewisse Routinen ueberschreiben. So koennte man zum Bsp. das Verhalten der Elemente Grundlegend aendern :smile:

Und so ein Klassenmodul für CBs zu schreiben geht fix, sind
nur so 8 Codezeilen.
Naja fix ist leider relativ, wers kann braucht da nur 2
Minuten.
Ich kanns leider nicht, aber ich kann mal kramen, ich habe da
ein zwei fertige Klassenmodule, nicht für Comboboxen, aber das
kannst du ja anpassen, Interesse an den Codes?

MfG Alex

Hi Reinhard,
bitte kram ganz schnell und schick die Codes. Vielleicht kann ich tatsächlich noch lernen, was ein Klassenmodul ist und wie es funktioniert
Liebe Grüße
Wilhelm

Hi Anno74,
natürlich hast Du recht. Mein Code ist von mir unvollständig kopiert worden. Ich hatte nur die Auskommentierung löschen wollen, damit ich vor Euch nicht so nackt und unwissend dastehe. Vollständig:

Select Case KeyAscii
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
Exit Sub
Case Else
MsgBox „Nur:“„Verkäufer“","„Käufer“", „„Mdt““ (z.B. für Überlasser) und „„Ggn““ (z.B. für „„Übernehmer““ möglich!", vbExclamation
SendKeys „{BS}“ ’ *** Harris Kap. 20 BS bedeutet: Backspace ***
End Select
Liebe Grüße
Wilhelm

Hallo Wilhelm,

natürlich hast Du recht. Mein Code ist von mir unvollständig
kopiert worden. Ich hatte nur die Auskommentierung löschen
wollen, damit ich vor Euch nicht so nackt und unwissend
dastehe. Vollständig:

Select Case KeyAscii
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
Exit Sub
Case Else
MsgBox „Nur:“„Verkäufer“","„Käufer“", „„Mdt““
(z.B. für Überlasser) und „„Ggn““ (z.B. für „„Übernehmer““
möglich!", vbExclamation
SendKeys „{BS}“ ’ *** Harris Kap. 20 BS bedeutet:
Backspace ***
End Select

Und das ist in meinen Augen etwas unschoen. Du sendest genau in dem Moment ein Backspace. Lass mal ein dummer Zufall sein und genau zu dem Zeitpunkt öffnet sich dein Virenproggi! Wo geht der backspace hin?
Der Buchstabe würde in dem Falle nicht gelöscht werden!

Du reagierst doch auf das Ereignis. Dort bekommst du doch den keyascii der eingetragen werden soll! Wenn du den Wert Keyascii aenderst, so aendert sich auch der Eintrag! Ein Bsp

Private Sub Text1\_Keypress (Keyascii as Integer)
Keyascii = Keyascii ' Es wird as Zeichen uebernommen was gedrueckt wurde
Keyascii=65 ' Es wird ein grosses A dargestellt
Keyascii=0 ' Es wird nichts dargestellt :wink:
End Sub

Und genau dem machen wir uns zu nutze!Die Function liefert dir eine Zahl zurueck! Ist die Eingabe erlaubt so bekommst du den Ascii Code zurueck von der Taste die gedrueckt wurde.
Das entspraeche

Keyascii=Keyascii

So nun gibt man ein ungueltiges Zeichen ein, dann bekommst du eine 0 zurueck! Das wiederrum entspricht der Zuweisung

Keyascii =0

In dem Falle, würde kein zeichen dargestellt werden!

Soweit alles klar oder ist noch etwas unklar ?

MfG Alex

Liebe Grüße
Wilhelm

Hallo Alex,

ich freue mich immer wenn Axel antwortet, weil da kann man
immer was lernen, leider ist es so daß ich es noch nie
schaffte mehr als 50% zu verstehen was er denn meint weil mir
das Hintergrundwissen fehlt :frowning:

Puh, na aber so schwer ist das doch net gewesen. Oder ?
Das einzigste ist das mit den Werte oder Refernenztype. Aber
das habe ich dir glaube auch einmal erklaert :wink:

Jepp, das stimmt, nur du übersiehst eines, ich trinke viel Bier und es trifft immer die falschen Gehirnzellen die dabei gelöscht werden, die Gehirnzellen die Informationen an die Frau meines Lebens beinhalten sind letztlich leider unverwüstlich, Zellen die sich deine Infos merken werden dagegen leicht weggespült :frowning: oder :smile: weiß grad nicht.

Ich erklärs dir mal wie für Dumies wie mich.
Klar geht auslagern. Entweder einfach, indem du für jede
vorhandene CB den Code anlegst:
Private Sub cboAbrisskosten_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Call MeinMakro(Keyascii)
End Sub

Warum so umstaendlich?

? abgesehen von Klassenmodulen kenne ich da nichts nichtsoumständliches.

Oder das als Function wie es Axel aufzeigt.

Genau, so hat man eine Function, die functioniert auf „Alle“
Elemente die das KeyPress Ereigniss auslösen :smile:

Mag sein, aber die Funktion muss doch wissen welche CB ausgelöst wurde, woher soll sie das von sich aus wissen daß sie jetzt funtioniern muß?

Oder schwierig, was dann aber in der Handhabung einfach ist.
Du legst eine Klassenmodul für diese CBs an, dann hast du nur
einen Code der für alle KeyPress-Ereignisse aller CBs wirkt.

Das macht doch die Function! Warum willst du da extra ne
Klasse basteln?

s.o. wer/was löst die Funktion aus.

Du schreibst es geht um Vba , immerhin ein Hinweis, aber nicht
ausreichend, Vba haben so locker 30 versciedene Programme,
klar word, excel, access, aber auch corel draw usw, also nicht
unbedingt auf MS beschränkt, und deren Vba unterscheidet sich
teilweise gewaltig.
Nur mal so als Info, als bitte gib an welches Vba du meinst.

Am Beispiel von Excel kann ich dir sagen was ich oben mit
Klassenmodul gemeint habe.
Das Modul „Tabelle1“ ist ein Klassenmodul. Und da gibt es z.B.
das Ereignis „Worksheet_Change“, also ein Zelleninhalt wurde
verändert.
Darauf kann man dann reagieren indem man „target“ auswertet.

Das Ereignis wird doch ausgelöst bei ihm! Ich denke mal er hat
eine Userform. Darauf einfach die Steuerelemente gezogen und
kann nun somit auf die Ereignisse der Elemente reagieren :smile:

Nicht ganz verstanden, sorry :smile:

Genauso ist es wenn du selbst ein Klassenmodul für CBs
schreibst,
dann kannst du analog zu eben auf Keypress" reagieren im Code.

Was verstehst du denn unter einem Klassenmodul?
Unter VB6 waere mir das Fremd.

Soso fremd, was bedeutet denn da in dem Bild daß man Klassenmodule einfügen kann (VB5.0)
http://www.hostarea.de/server-04/April-fae3a56f2f.jpg
Oder gibt es denn Menüpunkt in VB6 nicht mehr?

Unter .NET kann ich mir eine
Klasse erstellen. Dort dann zum Bsp. die Listbox
implementieren und kann dann gewisse Routinen ueberschreiben.
So koennte man zum Bsp. das Verhalten der Elemente Grundlegend
aendern :smile:

Und überhaupt, mal was völlig Off Topic, ich habe jetzt durch eine Zwangsräumung einer Wohnung einer Wohnung eine VB5.0 Eisteiger CD, aber VB interessiert mich nicht, genauer, ich hab da keine Zeit dafür, Excel-Vba und die anderen Vbas von Word Access usw. langen mir erstmal.
Okay, mir gelang es noch nicht eine Exe zu erzeugen die mir „hello world“ auf den Bildschirm zaubert, geschweige denn irgendeinen Code von hier oder aus vb-active zum Laufen zu bringen, aber das sind Peanuts, das kriege ich schon hin.

Das einzige was mich aktuell und in langer Zukunft an VB reizt, ist die Möglichkeit eine DLL zu erzeugen, um damit meinen Vba code darein zu packen und dadurch zu schützen.
Dummerweise kann das VB erst ab 6.0, die ich nicht habe.

Wenn also jemand hier besorgt um seine Orginal Vb6 CD ist, Wohnungseinbrüche nehmen zu *warn*, so kann er mir gerne eine Sicherheitskopie seiner CD übersenden, ich passe darauf auf…:smile:

Und ich habe mit Bill gates darüber gesprochen, das geht okay, ich will ja nur DLLs basteln für mein Vba und nict VB erlernen.

Gruß
Reinhard

bitte kram ganz schnell und schick die Codes. Vielleicht kann
ich tatsächlich noch lernen, was ein Klassenmodul ist und wie
es funktioniert

Hallo Wilhelm,

tja, die Welt ist böse, ich schicke dir nicht mein Codes *gg*

Ich schicke dir was zigfach besseres, schau mal da:

http://www.online-excel.de/excel/grusel_vba.php?f=7

Gruß
Reinhard

Hallo Reinhard,

Jepp, das stimmt, nur du übersiehst eines, ich trinke viel
Bier und es trifft immer die falschen Gehirnzellen die dabei
gelöscht werden, die Gehirnzellen die Informationen an die
Frau meines Lebens beinhalten sind letztlich leider
unverwüstlich, Zellen die sich deine Infos merken werden
dagegen leicht weggespült :frowning: oder :smile: weiß grad nicht.

Naja dann frage halt einfach nochmal nach und ich erklaere es dir solange bis es irgendwann mal haengen geblieben ist :wink:

? abgesehen von Klassenmodulen kenne ich da nichts
nichtsoumständliches.

Reinhard. Ich vermute mal das du das was Grundsaetzliches nicht weisst :frowning: Unter Vb und ergo auch VBA, hast du wenn du eine Form nutzt, sogeannte Steuerelemente ( TextFelder, Schaltflaechen, Listboxen, Comboboxen etc.) Etc. Zur Verfügung. Das alles sind Objecte. Deswegen musst du auch eine Zuweisung alla Set … machen. Diese sind dann übrigens Refernzvariablen :wink: Sprich die Variable beinhaltet nur eine Zahl. Diese wird auf dem Stack abgelegt und zeigt auf den Managed Haep, wo sich dann letztendlich die Daten befinden. Deswegen ist ein aendern via ByVal möglich!

Aber sei’s drum zurueck zum Thema! Objecte wie zum Bsp. Ein Auto, hat Eigenschaften/Methoden und koennen Ereignisse auslösen! Wenn wir das mal auf das Auto ummuenzen. Eigenschaft -> Farbe = Rot, Methode -> Gas geben -> Ereigniss --> Auto wird schneller .

Soweit alles klar ?

Wenn wir das nun einmal auf die Steuerelemente ummuenzen. Diese haben auch Eigenschaften/Methoden und Ereignisse. Wenn du zum Bsp. eine Combobox auf die Form ziehst, so kannst du dann im Quelltext die Combobox auswaehlen und dann ergo auch auf die ereignisse zugreifen. Diese löst das Object selber aus. In einer Klasse waere das der Befehl
RaiseEvent :wink:

Auch haben diese Steuerelement, ich nenn sie mal OCX Eigenschaften. Das sind dann die Sachen die du einstellen kannst. Zum Bsp. die Farbe oder die Höhe etc. Auch haben sie Methoden! Das sind dann die Sachen die du nur im Quelltext aufrufen kannst

Ist nen bissl Laienhaft erklärt. Aber wenn ich auf die uhr schaue *feix* kann man mal darueber hinweg sehen :smile:

So nun zurueck zur Combobox. Du hast eine Combobox. Nennen wir sie mal Combo1. Diese löst das Ereignis KeyPress aus! In dem Ereignis wird die Taste die du gedrueckt hast, als Argument mit uebergeben!

Unter VB schaut das dann so aus

Private Sub Combo1\_KeyPress(KeyAscii As Integer)

End Sub

Unter VBA, sollte es eigentlich auch so ausschauen :smile:
Das gute an einer Combobox ist, das wenn sie nicht schreibgeschuetzt ist, ich eine Taste druecke, dann das Ereignis aufgerufen wird!
Sagen wir mal es wurde das „A“ gedrueckt. Dann bekomme ich als Argument (Keyascii ) die 65 geliefert. Das Ereignis wird aufgerufen bevor das Zeichen dargestellt wird!
Wenn ich das zeichen unveraendert lasse! Dann zeichnet er mir das „A“ in die Combobox! Natuerlich kann ich den Wert auch aendern! Ändere ich ihn zum Bsp. in 66 so schreibt er mir anstatt des „A“ dann das „B“!
Setze ich den Wert Keyascii auf 0, so schreibt er nichts!
Genau das machen wir uns zu nutze.
Die Function die ich gepostet habe, interessiert es nicht, von wo die Daten herkommen. Sie sieht halt nur die Zahl und prüft ob diese zulaessig ist. Ist sie zulaessig so liefert sie sie wieder zurueck. Wenn nicht dann kommt eine 0 zurueck!

Sicher hat die Function ein Mango. Hast du zum Bsp. 5 Comboboxen, weiss die Function nicht woher sie kommt und was für zeichen zulaessig sind. So wie sie jetzt ist, prüft sie sturr nur die zeichen. Egal um welche Combobox es sich handelt. Will man dagegen verschiedene zeichen zulassen, je nach Combobox, so muss man die Function erweitern. Sprich man übergibt entweder die komplette Combobox mit, was aber dann wiederrum nicht flexibel ist, oder man übergibt halt in einem Array die zulaessigen zeichen :smile: Dann bleibt es flexibel :smile:

So nun aber zurueck, zu unsere Combobox. Schauen wir uns das mal genauer an

Private Sub Combo1\_KeyPress(KeyAscii As Integer)
 KeyAscii=DieFunction(KeyAscii)
End Sub

Was machen wir nun hier?
Es wird eine Taste gedrueckt! Das Ereignis ruft sich auf! in dem Ereignis machen wir eine Zuweisung. Wir aendern einfach Keyascii!
Den Wert dafür bezieht er sich aus der Function, die wir geschrieben haben (ich habse ma nicht gepostet -> zu faul *grins*)
Sagen wir einfach mal das Zeichen „A“ ist nicht Zulaessig wogegen aber „B“ zulaessig ist.
Wir druecken nun das „A“, die Function wird aufgerufen und wir bekommen eine 0 zurueck. Damit weissen wir KeyAscii den Wert 0 zu!
Der Wert 0 besagt aber das kein Zeichen dargestellt werden soll. Wie auch. Hast du mal versucht (chr(0) darzustellen ? Weil mehr macht die Combobox auch nicht *zwinker*
Wir schreiben dann aber nun das „B“ DieFunction sagt sich… AH ist zulaessig und gibt uns die 66 zurueck. Somit behaelt Keyascii den Wert 66. Die Combobox macht dann sturr Chr(66) und zeigt somit das B an :smile:

Hast du das nun verstanden, oder ist noch etwas unklar ?

Mag sein, aber die Funktion muss doch wissen welche CB
ausgelöst wurde, woher soll sie das von sich aus wissen daß
sie jetzt funtioniern muß?

Nein muss sie nicht wissen :wink: Siehe ein Stueck weiter oben :smile:

Nicht ganz verstanden, sorry :smile:

Auch dazu habe ich weiter oben etwas geschrieben :wink:

Soso fremd, was bedeutet denn da in dem Bild daß man
Klassenmodule einfügen kann (VB5.0)
http://www.hostarea.de/server-04/April-fae3a56f2f.jpg
Oder gibt es denn Menüpunkt in VB6 nicht mehr?

Achso, das meinst du :smile: Da stand ich ein wenig auf der Leitung :s
Natuerlich geht das. In der Version 5 und 6. Kein Thema.
Zur zeit habe ich ja mal wieder die VB5 Enterprice Edition drauf :smile:

Und überhaupt, mal was völlig Off Topic, ich habe jetzt durch
eine Zwangsräumung einer Wohnung einer Wohnung eine VB5.0
Eisteiger CD, aber VB interessiert mich nicht, genauer, ich
hab da keine Zeit dafür, Excel-Vba und die anderen Vbas von
Word Access usw. langen mir erstmal.
Okay, mir gelang es noch nicht eine Exe zu erzeugen die mir
„hello world“ auf den Bildschirm zaubert, geschweige denn
irgendeinen Code von hier oder aus vb-active zum Laufen zu
bringen, aber das sind Peanuts, das kriege ich schon hin.

Ach na das ist ganz einfach. Das kannst du alles via Drag and Drop machen *feix* Ein Label drauf und in der Eigenschaft „Caption“ welches uebrigens eine Standard Eigenschaft ist, einfach "Hello World " schreiben :smile: Das VB zu starten, dauert bald laenger, als das zu schreiben *grins*

Das einzige was mich aktuell und in langer Zukunft an VB
reizt, ist die Möglichkeit eine DLL zu erzeugen, um damit
meinen Vba code darein zu packen und dadurch zu schützen.
Dummerweise kann das VB erst ab 6.0, die ich nicht habe.

Da liegst du falsch! In der Version 5 Enterprice Edition geht es definitiv auch. hab da auch schon einige DLL 's entworfen :wink:
Wie es mit der Standard Edition ist, weiss ich net. Die habe ich nicht!

MfG Alex

Hi, nahe der Verzweiflung:

Im Ordner Modul1 habe ich die Funktion

Public Function Checkeingabe(vRet As MSForms.ReturnInteger) As MSForms.ReturnInteger
Select Case vRet
Case vbKeyBack, 86, 118, 75, 107, 77, 109, 71, 103
Checkeingabe = vRet
Case Else
MsgBox „Nur:“„Verkäufer“","„Käufer“", „„Mdt““" _
& "(z.B. für Überlasser) und „„Ggn““ (z.B. für "„Übernehmer“"möglich! ", vbExclamation
Checkeingabe = 0
End Select
End Function

geschrieben. Auf der frm

Private Sub cbo1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = Checkeingabe(KeyAscii)
End Sub

Wenn ich ein nicht zugelassenes Zeichen eingebe, erscheint in der Funktion bei der Zeile Checkeingabe = 0 die Fehlermeldung: „Objektvariable oder With-Blockvariable nicht festgelegt.“ Was, um Himmels willen, mach ich denn jetzt noch falsch?
Liebe Grüße
Wilhelm

Hallo Wilhelm,

passiert das nur bei einer Fehleingabe?
Was ist wenn du ein gültiges Zeichen angibst?
Unter VB funktioniert das Tadellos!
Scheinbar passt da was nicht an dem RueckgabeTyp!
Ändere das MSForms.ReturnInteger in Integer!

MfG Alex