Hallo Guido
Am 18 Dec 2006 15:10:09 -0800 schrieb Guido Hesterberg:
snip
Post by Guido HesterbergZunächst mal ein kleiner Tip zu Variablen: Schreib immer ein Präfix
davor und schreib am besten in jedes Modul am Anfang ein Option
Explicit. So erzwingst Du, daß jede Variable explizit definiert werden
muß. Mag mühsam erscheinen, aber erspart einem bei größeren
Projekten (und Deine Projekte WERDEN größer mit der Zeit) ein
intSteuersatz
Option Explicit gehört bei mir zum kleinen 1 x 1 und ist in jedem Modul
oder auch auf den Codeseiten jeder Anwendung.
Die Sache mit dem Präfix hat sicherlich so wie Du sagst eine Bedeutung, da
ich die Variablen aber meist mit einem selbsterklärenden deutschen Text
versehe, bin ich noch nie damit in Schwierigkeiten geraten.
Ich habe viele Jahre mit Excel 5 und Excel 95 gearbeitet und da konnte man
ja VBA auf gut Deutsch programmieren und dann gewöhnt man sich so bestimmte
Arbeitsmuster an.
Im Falle StS ist das auch der Kopf der Tabellenbeschriftung in der Zeile 4,
denn bei mir fangen fast alle Datentabellen erst mit der Zeile 5 an, daß
ist auch so eine Gewohnheit, die sich bei mir bewährt hat.
Post by Guido HesterbergIch arbeite aber mit Deinen Variablen weiter.
Wichtig ist: Dimensioniere im Hauptmodul StS als Public, damit sie auch
innerhalb der Userform verfügbar ist. Das entspricht meiner
Deklaration von
Public strListboxinhalt As String
Mit öffentlichen Variablen bin ich mal vor vielen Jahren auf den Bauch
gefallen und habe danach nie mehr öffentliche Variablen benutzt.
Mir war und ist klar, daß es damit funktioniert weil diese als öffentlich
deklarierte Variable halt jeder Anwendung zur Verfügung steht.
Post by Guido HesterbergErsetze das durch
Public intSts As Integer
[...] bei der zwar
alles funtioniert, bei der man sich aber leicht vertippen kann wenn man
z.B. statt 0,07 für 7% die 7 eingibt und dann 700% bekommt.
Da ist eine Listbox eine gute Wahl.
Und es funktioniert ja auch einwandfrei.
Post by Guido HesterbergSteuersatzForm.Show vbModal
Gut. vbModal kannst Du allerdings weglassen, das ist der Standardwert,
wenn nichts angegeben ist.
Ich dachte, damit mache ich nichts falsch und die Box bleibt so lange auf
dem Bildschirm bis ich mich mit einem Klick auf dem Button abmelde und zwar
unabhängig von den sonstigen Einstellung in der Abteilung Eigenschaften.
Post by Guido HesterbergPrivate Sub Userform_Initialize()
Combobox1.List = Array("0%, "7%,16%, 19%")
End Sub
Richtig. Hab gesehen, daß Du das in einem früheren Posting schon
erfahren hast, deswegen hab ich nicht geschrieben, wie man eine Listbox
betankt. :-)
Dein Audruck betankt, gefällt mir sehr gut, das ist auch so ein
"selbsterklärender" Ausdruck.
Nun ja Melanie Breden war so freundlich mir zu erklären wie man das mach.
Dabei hätte ich nicht einmal fragen müssen, denn ich habe hier einen ganzen
Stall voll Bücher namhafter Autoren und auch das Buch "Codebook" von Monika
Weber und Melanie Breden und das ist der Vorgang auch genau beschrieben.
Manchmal erhält man halt in der NG schneller Information als die Fundstelle
in den Büchern.
Post by Guido HesterbergDas Ergebnis dieser Auswahl übergebe ich mit dem ChangeEreignis
Private Sub Combobox1_Change()
Steuersatzbox.Value = Combobox1.value
End Sub
Laß die Textbox und auch das Change-Ereignis weg. Wenn man einen Wert
aus einer Listbox auswählt, erscheint der doch als einziger in der
obersten Zeile der Listbox, und man kann ihn lang genug betrachten. :-)
Ja das ist richtig, tut aber auch nicht weh.
Post by Guido HesterbergNun möchte ich diese Userform namens SteuerSatzForm eigentlich verlassen
und den Inhalt der Textbox an die Variable STS im Code genauso übergeben
wie ich das mit einer Inputbox wie bereits oben beschrieben tun würde aber
irgenwie gelingt mir das nicht.
Und genau das kannst Du mit dem OK-Button aus meinem Vorschlag
bewirken. Du hast ihn auch, nur daß er bei Dir SteuerSatzOK heißt
(ich schlage cmdOK vor).
Ich habe einen Button auf die Userform plaziert, dieser Button heißt
Private Sub SteuersatzOK_Click()
Activesheet.Range("J" & Activecell.Row).Value = SteuersatzBoX.Value
Unload SteuerSatzForm
End
Private Sub SteuersatzOK_Click()
' In Deiner Listbox stehen Strings, daher wird Val() benutzt,
' um daraus einen Integer-Wert zu machen. Achtung, aus "7%"
' wird 7! Eventuell durch 100 teilen, je nachdem, welchen Wert Du
willst.
StS = Val(SteuersatzBox.Value)
Unload Me ' ist dasselbe wie SteuersatzForm
End
Weil ich also im Moment nicht in der Lage bin, den Inhalt der
SteuersatzBox an die Variable StS zu übergeben, schreibe ich einfach den
Prozentsatz direkt in die Zelle "J" der aktuellen Zeile.
Jetzt hast Du den Inhalt von SteuersatzBox in der Variable StS. Der
Trick ist nur, sie als Public zu deklarieren und ihr beim Klicken auf
OK den Wert zuzuweisen.
Jetzt müßte eigentlich alles klappen, oder?
Ich würde übrigens trotzdem im Initialize-Ereignis blnAbbruch = True
setzen.
Das verstehe ich nicht: was heißt blnAbbruch = True setzen ?
Post by Guido HesterbergAuch wenn Du keinen Abbrechen-Button hast, kann der Benutzer
auf das Kreuzchen oben rechts im Dialogfeld klicken und so einen
Abbruch hervorrufen. Dann würde Dein Code mit einer nithc zugewiesenen
StS weiterarbeiten, was vielleicht unerwünschte Nebenwirkungen hätte.
Ich habe einerseits einen Button abbrechen eingebaut, nur weil ich das
nicht für wichtig hielt nicht geschrieben.
Post by Guido HesterbergWenn Du blnAbbruch hinzufügst, kann Dir das nicht passieren. Dann
kannst Du das abfragen und den Benutzer darauf hinweisen. Du kannst
auch einen Abbruch mit dem QueryClose-Ereignis der Userform ganz
unterbinden. Siehe dazu die Onlinehilfe.
Im nachfolgenden Code habe ich einen Abbruch für den Fall eingebaut, daß
StS als "" oder ohne Wert zurück geliefert wird, das ist bei meiner etwas
pedantischen Arbeitsweise so.
Das QueryClose-Ereignis kenn eich bisher noch nicht, kannst Du mir das
bitte nochmal genauer erklären ?
Nun zum Schluß, vielen Dank für Deine ausführlichen Ausführungen und die
Mühe die Du Dir gemacht hast, es war schon einiges dabei was ich mir für
weitere Projekte zu nutze machen werde.
Viele Grüße und frohe Weihnachten wünscht Dir und Deiner Familie
Robert