Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Optionbuttons in Userform programmieren

119 views
Skip to first unread message

Martina Möhrke

unread,
Jun 17, 2009, 3:55:03 AM6/17/09
to
Hallo NG,
ich arbeite mit Excel 2003/SP3 und möchte in einer Userform
Optionbuttons integrieren. Leider habe ich dies noch nicht gemacht, so
dass ich auf Eure Hilfe hoffe.

In meiner Userform werden 11 Hotels aufgeführt, die jeweils empfohlen
oder nicht empfohlen werden sollen. Für jedes Hotel gibt es demnach 2
Optionbuttons - "Yes" und "No".

Der Anwender sollte nun seine Entscheidung über die Optionsbuttons
treffen. Mit dem Commandbutton 'cmdok' sollen dann auf der
Registerkarte 'results' die getroffenen Entscheidungen bspw. für das
1. Hotel in Zelle C5 (Yes) oder E5 (No) gezählt werden.

Empfiehlt der nächste Kollege, der diese Datei aufruft, ebenfalls das
1. Hotel, müsste in Zelle C5 ein weiterer 'Klick' addiert werden.
Dieses System möchte ich dann für alle 11 Hotels mit den entsprechenen
Zellen unter 'results' anwenden.

Ferner gibt es einen Commandbutton 'cmdclear', über den die getroffene
Auswahl wieder gelöscht werden kann.

Für Euch Experten ist dies sicherlich eine einfache Frage, aber ich
habe leider nicht wirklich Informationen bislang gefunden, die mir bei
der Lösung meines Problems weitergeholfen haben.

Ein Highlight meiner Userform wäre sicherlich noch, dass ich ein
mehrmaliges Abstimmen der gleichen Person verhindern kann - aber das
kommt dann erst im nächsten Step.

Es wäre prima, wenn Ihr Ideen für mich habt. Vielen Dank im Voraus.

Gruß
Martina

Andreas Killer

unread,
Jun 17, 2009, 6:33:29 AM6/17/09
to
On 17 Jun., 09:55, Martina Möhrke <moeh...@online.de> wrote:

> In meiner Userform werden 11 Hotels aufgeführt, die jeweils empfohlen
> oder nicht empfohlen werden sollen. Für jedes Hotel gibt es demnach 2
> Optionbuttons - "Yes" und "No".

Dann brauchst Du 22 Optionbuttons (Yes / No für jedes Hotel) und
gruppieren musst Du sie auch alle noch, viel zu aufwendig.

Ich würde das mit einer Checkbox machen, ist ein Haken drin, dann ist
es empfohlen oder eben nicht.

Das Zählen ist aber dennoch identisch, Beispiel:

#Const UseCheckBox = 1

Private Sub CommandButton1_Click()
#If UseCheckBox Then
If CheckBox1 Then
#Else
If OptionButton1 Then
#End If
Range("C5") = Range("C5") + 1
Else
Range("E5") = Range("E5") + 1
End If
End Sub

> Der Anwender sollte nun seine Entscheidung über die Optionsbuttons
> treffen. Mit dem Commandbutton 'cmdok' sollen dann auf der
> Registerkarte 'results' die getroffenen Entscheidungen bspw. für das
> 1. Hotel in Zelle C5 (Yes) oder E5 (No) gezählt werden.

Also dann darf das Zählen erst dann erfolgen wenn CmdOk geklickt wird
und (wichtig!) danach muss das vermerkt und gespeichert werden, sonst
kann jeder mehrfach auf den CmdOk draufklicken.

Nun muss ich mal vorgreifen: Das Rückgängigmachen eine einmal
getroffenen Entscheidung (nach CmdOk) ist bei Deiner Zählweise
schlecht möglich, da der User ja ggf. die Empfehlungen ändern kann und
dann CmdClear klickt.

> Empfiehlt der nächste Kollege, der diese Datei aufruft, ebenfalls das
> 1. Hotel, müsste in Zelle C5 ein weiterer 'Klick' addiert werden.
> Dieses System möchte ich dann für alle 11 Hotels mit den entsprechenen
> Zellen unter 'results' anwenden.
>
> Ferner gibt es einen Commandbutton 'cmdclear', über den die getroffene
> Auswahl wieder gelöscht werden kann.

...


> Ein Highlight meiner Userform wäre sicherlich noch, dass ich ein
> mehrmaliges Abstimmen der gleichen Person verhindern kann - aber das
> kommt dann erst im nächsten Step.

Mein Vorschlag wäre das alles in einem Rutsch zu machen, aber leicht
abgewandelt:

In Deiner Auswertetabelle führst Du in Spalte A alle User, entweder
holst Du Dir den Namen über

Application.UserName / der Name in Excel
Environ("Username") / der Name aus der Windowsanmeldung
oder fragst ihn via Inputbox ab.

Wie auch immer, öffnet ein neuer User die Mappe, dann wird er in der
Spalte A eingetragen.
Rechts neben dem Namen speicherst Du seine Empfehlungen
Und die Auswertung machst Du zum Schluß mit einer Formel =SUMME
(B2:B5000) in Zeile 1

Dadurch kann jeder User auch noch später seine Meinung revidieren,
denn Du brauchst nur bei vorhandenem User seine Auswahl überschreiben
und kannst sie ihm sogar in die Userform laden.

Andreas.

Martina Möhrke

unread,
Jun 17, 2009, 7:20:38 AM6/17/09
to
On 17 Jun., 12:33, Andreas Killer <andreas.kil...@gmx.net> wrote:
> On 17 Jun., 09:55, Martina Möhrke <moeh...@online.de> wrote:
>
> > In meiner Userform werden 11 Hotels aufgeführt, die jeweils empfohlen
> > oder nicht empfohlen werden sollen. Für jedes Hotel gibt es demnach 2
> > Optionbuttons - "Yes" und "No".
>
> Dann  brauchst Du 22 Optionbuttons (Yes / No für jedes Hotel) und
> gruppieren musst Du sie auch alle noch, viel zu aufwendig.
>
> Ich würde das mit einer Checkbox machen, ist ein Haken drin, dann ist
> es empfohlen oder eben nicht.
>
> Das Zählen ist aber dennoch identisch, Beispiel:
>
> #Const UseCheckBox = 1
>
> Private Sub CommandButton1_Click()
> #If UseCheckBox Then
>   If CheckBox1 Then
> #Else
>   If OptionButton1 Then
> #End If
>     Range("C5") = Range("C5") + 1
>   Else
>     Range("E5") = Range("E5") + 1
>   End If
> End Sub

Danke für den Tipp. Ich möchte es ja nicht umständlicher machen als
unbedingt nötig.

Bitte erkläre mir Dein Zeichen "#" - irgendwie stehe ich gerade auf
der Leitung. Nehme ich jetzt nur eine Checkbox pro Hotel, so dass ein
Häkchen in dieser Box als Empfehlung zu verstehen ist und in meinen
Auswertungen unter "yes" gezählt wird? Erfolgt kein Häkchen wird es
unter "Nein" gezählt?!

Das werde ich mal ausprobieren.

> Wie auch immer, öffnet ein neuer User die Mappe, dann wird er in der
> Spalte A eingetragen.
> Rechts neben dem Namen speicherst Du seine Empfehlungen
> Und die Auswertung machst Du zum Schluß mit einer Formel =SUMME
> (B2:B5000) in Zeile 1
>
> Dadurch kann jeder User auch noch später seine Meinung revidieren,
> denn Du brauchst nur bei vorhandenem User seine Auswahl überschreiben
> und kannst sie ihm sogar in die Userform laden.
>
> Andreas.

Andreas, vielen Dank, dass Du mir so viele Infos geschrieben hast.
Jetzt muss ich das Ganze nur noch in die Tat umsetzen. Mal schauen, ob
es mir gelingt. Bitte antworte mir noch auf meine Frage, die ich in
Deiner Antwort eingefügt habe.

Vielen Dank!

Gruß
Martina

Andreas Killer

unread,
Jun 17, 2009, 1:25:07 PM6/17/09
to
Martina M锟絟rke schrieb:

> Bitte erkl锟絩e mir Dein Zeichen "#" - irgendwie stehe ich gerade auf


> der Leitung. Nehme ich jetzt nur eine Checkbox pro Hotel, so dass ein

> H锟絢chen in dieser Box als Empfehlung zu verstehen ist und in meinen
> Auswertungen unter "yes" gez锟絟lt wird? Erfolgt kein H锟絢chen wird es
> unter "Nein" gez锟絟lt?!
Also das mit dem #, hmm, entschuldige, hab ich Dich etwas in die Irre
gef锟絟rt, keine Absicht.

Die "#..."-Befehle sind f锟絩 bedingte Kompilierung und brauchen tust Du
sie nicht. Lies Dir mal die VBA-Hilfe zu #if durch, da ist ein
sinniges Beispiel drin.

Zur锟絚k zu der Auswertung, also die Checkboxen musst Du schon selber
abfragen und dann die Werte in die Zellen reinschreiben. Normalerweise
m锟絪stest Du dann "if Checkbox1 then" den Haken fragen und das bei
jeder Checkbox, d.h. im Prinzip 11mal der gleiche K锟絪e.

Es gibt da aber einen kleinen Trick, f锟絩 den muss aber der Name (nicht
die Caption) jeder Checkbox mit Hotel anfangen und dahinter die Nummer
haben, also Hotel1, Hotel2, usw., dann k锟絥nte die Click-Routine Deines
CmdOk so aussehen:

--- schnipp ---
Option Compare Text

Private Sub CmdOK_Click()
Dim Cb As Control
Dim Nr As Integer
'Alle Button, Boxen, etc. durchlaufen
For Each Cb In Me.Controls
'Ist es eine Checkbox?
If TypeOf Cb Is MSForms.CheckBox Then
'Beginnt der Name mit Hotel?
If Left(Cb.Name, 5) = "Hotel" Then
'Ja, dann ist alles hinter Hotel eine Nummer
Nr = Mid(Cb.Name, 6)
'In Y muss die Zeilennummer des Users
Y = 2
'Ergebnis ab Spalte B eintragen (In Spalte A steht der User)
With Sheets("Auswertung")
If Cb Then
'Haken gesetzt
.Cells(Y, Nr + 1) = 1
Else
'Haken nicht gesetzt
.Cells(Y, Nr + 1) = 0
End If
End With
End If
End If
Next
'Fertig, Userform zu
Unload Me
End Sub
--- schnapp ---

> Vielen Dank!
Gern geschehen.

Andreas.

Martina Möhrke

unread,
Jun 18, 2009, 8:26:07 AM6/18/09
to
On 17 Jun., 19:25, Andreas Killer <andreas.kil...@gmx.net> wrote:
> Martina Möhrke schrieb:
>
> > Bitte erkläre mir Dein Zeichen "#" - irgendwie stehe ich gerade auf

> > der Leitung. Nehme ich jetzt nur eine Checkbox pro Hotel, so dass ein
> > Häkchen in dieser Box als Empfehlung zu verstehen ist und in meinen
> > Auswertungen unter "yes" gezählt wird? Erfolgt kein Häkchen wird es
> > unter "Nein" gezählt?!
>
> Also das mit dem #, hmm, entschuldige, hab ich Dich etwas in die Irre
> geführt, keine Absicht.
>
> Die "#..."-Befehle sind für bedingte Kompilierung und brauchen tust Du

> sie nicht. Lies Dir mal die VBA-Hilfe zu #if durch, da ist ein
> sinniges Beispiel drin.
>
> Zurück zu der Auswertung, also die Checkboxen musst Du schon selber

> abfragen und dann die Werte in die Zellen reinschreiben. Normalerweise
>   müsstest Du dann "if Checkbox1 then" den Haken fragen und das bei
> jeder Checkbox, d.h. im Prinzip 11mal der gleiche Käse.
>
> Es gibt da aber einen kleinen Trick, für den muss aber der Name (nicht

> die Caption) jeder Checkbox mit Hotel anfangen und dahinter die Nummer
> haben, also Hotel1, Hotel2, usw., dann könnte die Click-Routine Deines

Hallo Andreas,

prima, vielen Dank für Deine Idee. Diesen Code werde ich mir auf jeden
Fall merken - Einsatz ist immer wieder möglich.

Ich habe gestern selbst noch ein wenig "gebastelt" und letztlich mit
zwei Kontrollkästchen gearbeitet und natürlich viel Schreibarbeit
gehabt. Ich habe die Kästchen jetzt so programmiert, dass bei Anhaken
des "Yes-Kästchens" das "No-Kästchen" inaktiv gestellt ist.

Private Sub chkCPLCCyes_Click()
If chkCPLCCyes.Value = True Then chkCPLCCno.Enabled = False
If chkCPLCCyes.Value = False Then chkCPLCCno.Enabled = True
End Sub

Und es funktioniert sogar :-)

Mit nachstehenden Eintragungen übernehme ich die Ergebnisse dann in
mein Ergebnis-Sheet:

If chkCPLCCyes Then
sheets("results").Select


Range("C5") = Range("C5") + 1

End If

If chkCPLCCno Then
sheets("results").Select


Range("E5") = Range("E5") + 1
End If

Auch das funktioniert :-)

Auch das Auslesen der User in meine Tabelle "user" klappt.

Mit fehlt jetzt nur noch eine Sache:
Gibt es eine Möglichkeit die Ergebnisse in mein Sheet "results" und
die User in mein Sheet "user" zu übernehmen, auch wenn diese Sheets
für die User nicht sichtbar sind? Und wenn ja, wie geht dies?
Wenn Du dafür auch noch einen Tipp hättest, wäre das super. Ich werde
weiterhin auch selbst lesen und ausprobieren und hoffe, dass ich meine
Userform dann diese Woche abschließen und den Usern zur Verfügung
stellen kann.

Herzlichen Dank!

Gruß
Martina

Andreas Killer

unread,
Jun 18, 2009, 9:58:21 AM6/18/09
to
Martina M�hrke schrieb:

> Ich habe gestern selbst noch ein wenig "gebastelt" und letztlich mit

> zwei Kontrollk�stchen gearbeitet und nat�rlich viel Schreibarbeit
> gehabt. Ich habe die K�stchen jetzt so programmiert, dass bei Anhaken
> des "Yes-K�stchens" das "No-K�stchen" inaktiv gestellt ist.
Hmm? Wieso 2 K�stchen, du brauchst doch nur eins!?! Ist der Haken
drin, dann ist das Hotel empfohlen. Ist er nicht drin, dann nicht.
Oder hab ich Dich da missverstanden?

> Private Sub chkCPLCCyes_Click()
> If chkCPLCCyes.Value = True Then chkCPLCCno.Enabled = False
> If chkCPLCCyes.Value = False Then chkCPLCCno.Enabled = True
> End Sub

Das geht einfacher:

Private Sub chkCPLCCyes_Click()
chkCPLCCno.Enabled = not chkCPLCCyes.Value
End Sub

BTW, das .Value am Ende brauchst Du nicht unbedingt, das ist die
Default-Eigenschaft.

> Und es funktioniert sogar :-)

Sch�n, damit deaktiverst Du aber das "No"-K�stchen, wozu?

Wenn Du ein Hin-/Her-Schalten der H�cken in den Checkboxen machen
m�chtest, dann geht das so:

Private Sub chkCPLCCyes_Click()
chkCPLCCno = not chkCPLCCyes
End Sub

Private Sub chkCPLCCno_Click()
chkCPLCCyes = not chkCPLCCno
End Sub

Macht aber auch keinen Sinn, dann k�nntest Du ja auch gleich 2
Optionbuttons machen.

> Mit nachstehenden Eintragungen �bernehme ich die Ergebnisse dann in


> mein Ergebnis-Sheet:
>
> If chkCPLCCyes Then
> sheets("results").Select
> Range("C5") = Range("C5") + 1
> End If
>
> If chkCPLCCno Then
> sheets("results").Select
> Range("E5") = Range("E5") + 1
> End If
>
> Auch das funktioniert :-)

BTW, bitte nie nicht mit Select arbeiten, es sei denn es ist
unumg�glich, das provoziert oft Fehler!

Wenn den obigen Part so programmierst:

With Sheets("results")
If chkCPLCCyes Then
.Range("C5") = .Range("C5") + 1
Else
.Range("E5") = .Range("E5") + 1
End If
End With

dann ist es wurscht welches Blatt gerade angezeigt wird.

Aaaaaber bedenke bitte: Ruft der User Deine Userform ein 2tes Mal auf
und klickst auf Ok, dann wird das Ergebnis wiederum um 1 erh�ht und
das ist falsch!

> Auch das Auslesen der User in meine Tabelle "user" klappt.
>
> Mit fehlt jetzt nur noch eine Sache:

> Gibt es eine M�glichkeit die Ergebnisse in mein Sheet "results" und
> die User in mein Sheet "user" zu �bernehmen, auch wenn diese Sheets
> f�r die User nicht sichtbar sind? Und wenn ja, wie geht dies?
Zu �bernehmen? Wohin?

Indem Du das Sheet nicht mit Select holst, sondern direkt
referenzierst ala
S = Sheets("user").Range("A1")
oder wie im obigen Beispiel mit der With-Anweisung.

Beim Arbeiten mit With-Anweisungen beachte den . vor dem Range!

Andreas.

Martina Möhrke

unread,
Jun 19, 2009, 4:14:51 AM6/19/09
to
On 18 Jun., 15:58, Andreas Killer <andreas.kil...@gmx.net> wrote:
> Martina Möhrke schrieb:

>
> > Ich habe gestern selbst noch ein wenig "gebastelt" und letztlich mit
> > zwei Kontrollkästchen gearbeitet und natürlich viel Schreibarbeit
> > gehabt. Ich habe die Kästchen jetzt so programmiert, dass bei Anhaken
> > des "Yes-Kästchens" das "No-Kästchen" inaktiv gestellt ist.
>
> Hmm? Wieso 2 Kästchen, du brauchst doch nur eins!?! Ist der Haken

> drin, dann ist das Hotel empfohlen. Ist er nicht drin, dann nicht.
> Oder hab ich Dich da missverstanden?
>
> > Private Sub chkCPLCCyes_Click()
> > If chkCPLCCyes.Value = True Then chkCPLCCno.Enabled = False
> > If chkCPLCCyes.Value = False Then chkCPLCCno.Enabled = True
> > End Sub
>
> Das geht einfacher:
>
> Private Sub chkCPLCCyes_Click()
>    chkCPLCCno.Enabled = not chkCPLCCyes.Value
> End Sub
>
> BTW, das .Value am Ende brauchst Du nicht unbedingt, das ist die
> Default-Eigenschaft.
>
> > Und es funktioniert sogar :-)
>
> Schön, damit deaktiverst Du aber das "No"-Kästchen, wozu?
>
> Wenn Du ein Hin-/Her-Schalten der Häcken in den Checkboxen machen
> möchtest, dann geht das so:

>
> Private Sub chkCPLCCyes_Click()
>    chkCPLCCno = not chkCPLCCyes
> End Sub
>
> Private Sub chkCPLCCno_Click()
>    chkCPLCCyes = not chkCPLCCno
> End Sub
>
> Macht aber auch keinen Sinn, dann könntest Du ja auch gleich 2
> Optionbuttons machen.
>
> > Mit nachstehenden Eintragungen übernehme ich die Ergebnisse dann in

> > mein Ergebnis-Sheet:
>
> > If chkCPLCCyes Then
> >     sheets("results").Select
> >     Range("C5") = Range("C5") + 1
> > End If
>
> > If chkCPLCCno Then
> >     sheets("results").Select
> >     Range("E5") = Range("E5") + 1
> > End If
>
> > Auch das funktioniert :-)
>
> BTW, bitte nie nicht mit Select arbeiten, es sei denn es ist
> unumgäglich, das provoziert oft Fehler!

>
> Wenn den obigen Part so programmierst:
>
>    With Sheets("results")
>      If chkCPLCCyes Then
>        .Range("C5") = .Range("C5") + 1
>      Else
>        .Range("E5") = .Range("E5") + 1
>      End If
>    End With
>
> dann ist es wurscht welches Blatt gerade angezeigt wird.
>
> Aaaaaber bedenke bitte: Ruft der User Deine Userform ein 2tes Mal auf
> und klickst auf Ok, dann wird das Ergebnis wiederum um 1 erhöht und

> das ist falsch!
>
> > Auch das Auslesen der User in meine Tabelle "user" klappt.
>
> > Mit fehlt jetzt nur noch eine Sache:
> > Gibt es eine Möglichkeit die Ergebnisse in mein Sheet "results" und
> > die User in mein Sheet "user" zu übernehmen, auch wenn diese Sheets
> > für die User nicht sichtbar sind? Und wenn ja, wie geht dies?
>
> Zu übernehmen? Wohin?

>
> Indem Du das Sheet nicht mit Select holst, sondern direkt
> referenzierst ala
>    S = Sheets("user").Range("A1")
> oder wie im obigen Beispiel mit der With-Anweisung.
>
> Beim Arbeiten mit With-Anweisungen beachte den . vor dem Range!
>
> Andreas.


Hallo Andreas,

vielen Dank, dass Du immer so ausführlich antwortest.

> Das geht einfacher:
>
> Private Sub chkCPLCCyes_Click()
> chkCPLCCno.Enabled = not chkCPLCCyes.Value
> End Sub

Super, Deine Version habe ich direkt in meine Userform übernommen.


> Wenn Du ein Hin-/Her-Schalten der Häcken in den Checkboxen machen
> möchtest, dann geht das so:


>
> Private Sub chkCPLCCyes_Click()
> chkCPLCCno = not chkCPLCCyes
> End Sub
>
> Private Sub chkCPLCCno_Click()
> chkCPLCCyes = not chkCPLCCno
> End Sub

Andreas, wenn ich das so programmiere, dann wechselt das Häkchen auf
jeden Fall von "yes" zu "no". Wenn allerdings ein User gar kein
Häkchen setzen möchte, da er das Hotel nicht kennt, hat er damit keine
Möglichkeit. Die obige vereinfachte Version von Dir ist super.

Deine With-Anweisung für die Auswahl des sheets "results" ist prima
und habe ich gleich eingepflegt.


> Aaaaaber bedenke bitte: Ruft der User Deine Userform ein 2tes Mal auf

> und klickst auf Ok, dann wird das Ergebnis wiederum um 1 erhöht und
> das ist falsch!

Ja, das ist noch mein Problem. Daher wollte ich die Abfrage der User
einpflegen. Leider weiß ich noch nicht genau, wie das machen kann.
Also sobald ein User seine Empfehlung abgeben hat, wird er in einer
Liste "User" geführt. Will er dann erneut das Hotel X empfehlen, muss
dies verhindert werden.

> Zu übernehmen? Wohin?

Ich wollte die sheets "results" und "user" gerne verstecken, so dass
der User bei Abgabe seiner Empfehlungen die Ergebnisse nicht sehen.
Wenn ich diese aber verstecke, dann findet das Programm diese aber
nicht. Sollte ich diese Sheets in einem separaten Dokument
abspeichern? Im gleichen Ordner oder geht ein anderer?

Sorry, meine Userform wird - glaube ich - doch ziemlich komplex. Aber
dadurch lerne ich eine Menge dazu und hoffe, dies auch gut umsetzen zu
können.

Gruß
Martina

Andreas Killer

unread,
Jun 19, 2009, 10:02:32 AM6/19/09
to
Martina M�hrke schrieb:

>> Aaaaaber bedenke bitte: Ruft der User Deine Userform ein 2tes Mal auf

>> und klickst auf Ok, dann wird das Ergebnis wiederum um 1 erh�ht und


>> das ist falsch!
> Ja, das ist noch mein Problem. Daher wollte ich die Abfrage der User

> einpflegen. Leider wei� ich noch nicht genau, wie das machen kann.


> Also sobald ein User seine Empfehlung abgeben hat, wird er in einer

> Liste "User" gef�hrt. Will er dann erneut das Hotel X empfehlen, muss
> dies verhindert werden.
Nun ja, ist eigentlich recht einfach. Irgendwo wird die Userform ja
gestartet und genau davor musst Du nur abfragen ob der User schon in
der Liste ist. Wenn ja, dann startest Du die Userform nicht und gibst
statt dessen eine Fehlermeldung mit MsgBox aus. Ich w�rd das z.B. so
in dieser Art und Weise pr�fen:

Function UserExists(UserName As String) As Boolean
Dim C As Range
Set C = Sheets("User").Range("A:A") _
.Find(UserName, LookIn:=xlValues, LookAt:=xlWhole)
UserExists = Not (C Is Nothing)
End Function

Aber ich's sag trotzdem nochmals: Wenn Du die Ergebnisse nicht global
z�hlst sondern f�r jeden User separat (in der Tabelle User)
speicherst, dann gibt es das Problem nicht. .-)

> Ich wollte die sheets "results" und "user" gerne verstecken, so dass
> der User bei Abgabe seiner Empfehlungen die Ergebnisse nicht sehen.
> Wenn ich diese aber verstecke, dann findet das Programm diese aber
> nicht. Sollte ich diese Sheets in einem separaten Dokument

Hmm? N�, da irrst Du, das geht. Mach mal eine neue Mappe und dann
f�hrst Du diese 3 Makros nacheinander aus und kuckst Dir das Resultat
zwischendurch an.

Sub Tabelle_Verstecken()
Sheets("Tabelle2").Visible = xlSheetVeryHidden
End Sub

Sub Test()
Sheets("Tabelle2").Range("A1") = "Juhu"
End Sub

Sub Tabelle_Zeigen()
Sheets("Tabelle2").Visible = xlSheetVisible
End Sub

Andreas.

Eberhard Funke

unread,
Jun 19, 2009, 11:02:19 AM6/19/09
to
Am Fri, 19 Jun 2009 16:02:32 +0200 schrieb Andreas Killer:

> Function UserExists(UserName As String) As Boolean
> Dim C As Range
> Set C = Sheets("User").Range("A:A") _
> .Find(UserName, LookIn:=xlValues, LookAt:=xlWhole)
> UserExists = Not (C Is Nothing)
> End Function

Just in case:
Ein Bug in XL2000 f�hrt bei Function & Find zu Fehler.
Ich wei� nicht, ob der bei XL2003 behoben ist.

--
Mit freundlichen Gr�ssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de

Andreas Killer

unread,
Jun 20, 2009, 3:42:49 AM6/20/09
to
Eberhard Funke schrieb:

>> Function UserExists(UserName As String) As Boolean
>> Dim C As Range
>> Set C = Sheets("User").Range("A:A") _
>> .Find(UserName, LookIn:=xlValues, LookAt:=xlWhole)
>> UserExists = Not (C Is Nothing)
>> End Function
>
> Just in case:
> Ein Bug in XL2000 f�hrt bei Function & Find zu Fehler.
> Ich wei� nicht, ob der bei XL2003 behoben ist.

Du meinst wenn man Find in einer Function benutzt und diese dann im
Tabellenblatt aufruft?

Dieses Problem tritt IMHO bei allen Excelversionen auf, weil... wei�
nicht mehr genau, hatte irgendwas mit der Ver�nderung der Oberfl�che
zu tun. Der eigentliche Bug ist ja das da keine Fehlermeldung kommt.

Ist hier alles kein Thema, Martina programmiert ja eine Userform.

Andreas.

Eberhard Funke

unread,
Jun 20, 2009, 6:27:41 AM6/20/09
to
Am Sat, 20 Jun 2009 09:42:49 +0200 schrieb Andreas Killer:

>> Ein Bug in XL2000 f�hrt bei Function & Find zu Fehler.
>> Ich wei� nicht, ob der bei XL2003 behoben ist.
> Du meinst wenn man Find in einer Function benutzt und diese dann im
> Tabellenblatt aufruft?
>

> Ist hier alles kein Thema, Martina programmiert ja eine Userform.


Danke Andreas,

ich hatte bisher angenommen, dass dieser Fehler generell auftritt und nicht
nur im Tabellenblatt. Gut zu wissen :-)

Martina Möhrke

unread,
Jun 22, 2009, 5:23:15 AM6/22/09
to
On 19 Jun., 16:02, Andreas Killer <andreas.kil...@gmx.net> wrote:
> Martina Möhrke schrieb:

>
> >> Aaaaaber bedenke bitte: Ruft der User Deine Userform ein 2tes Mal auf
> >> und klickst auf Ok, dann wird das Ergebnis wiederum um 1 erhöht und

> >> das ist falsch!
> > Ja, das ist noch mein Problem. Daher wollte ich die Abfrage der User
> > einpflegen. Leider weiß ich noch nicht genau, wie das machen kann.

> > Also sobald ein User seine Empfehlung abgeben hat, wird er in einer
> > Liste "User" geführt. Will er dann erneut das Hotel X empfehlen, muss

> > dies verhindert werden.
>
> Nun ja, ist eigentlich recht einfach. Irgendwo wird die Userform ja
> gestartet und genau davor musst Du nur abfragen ob der User schon in
> der Liste ist. Wenn ja, dann startest Du die Userform nicht und gibst
> statt dessen eine Fehlermeldung mit MsgBox aus. Ich würd das z.B. so
> in dieser Art und Weise prüfen:

>
> Function UserExists(UserName As String) As Boolean
>    Dim C As Range
>    Set C = Sheets("User").Range("A:A") _
>      .Find(UserName, LookIn:=xlValues, LookAt:=xlWhole)
>    UserExists = Not (C Is Nothing)
> End Function
>
> Aber ich's sag trotzdem nochmals: Wenn Du die Ergebnisse nicht global
> zählst sondern für jeden User separat (in der Tabelle User)

> speicherst, dann gibt es das Problem nicht. .-)
>
> > Ich wollte die sheets "results" und "user" gerne verstecken, so dass
> > der User bei Abgabe seiner Empfehlungen die Ergebnisse nicht sehen.
> > Wenn ich diese aber verstecke, dann findet das Programm diese aber
> > nicht. Sollte ich diese Sheets in einem separaten Dokument
>
> Hmm? Nö, da irrst Du, das geht. Mach mal eine neue Mappe und dann
> führst Du diese 3 Makros nacheinander aus und kuckst Dir das Resultat

> zwischendurch an.
>
> Sub Tabelle_Verstecken()
>    Sheets("Tabelle2").Visible = xlSheetVeryHidden
> End Sub
>
> Sub Test()
>    Sheets("Tabelle2").Range("A1") = "Juhu"
> End Sub
>
> Sub Tabelle_Zeigen()
>    Sheets("Tabelle2").Visible = xlSheetVisible
> End Sub
>
> Andreas.


Hallo Andreas,

noch einmal zu meiner User-Abfrage:

Ich glaube, ich habe mich unglücklich ausgedrückt oder aber ich
verstehe Deine Ausführungen nicht. Ursprünglich wollte ich die User
auflisten, die eine Empfehlung abgegeben haben und eine erneute Abgabe
verhindern; damit würde ich wohl global zählen.

Aber Deine Idee ist - wenn ist es richtig verstanden habe - dass in
der Spalte A des sheets "user" die User und ab Spalte B die Hotels
stehen.

Somit wird dann die getroffene Empfehlung des einzelnen Users in diese
Übersicht eingetragen.

> Nun ja, ist eigentlich recht einfach. Irgendwo wird die Userform ja
> gestartet und genau davor musst Du nur abfragen ob der User schon in
> der Liste ist. Wenn ja, dann startest Du die Userform nicht und gibst

> statt dessen eine Fehlermeldung mit MsgBox aus. Ich würd das z.B. so
> in dieser Art und Weise prüfen:
>

Mit nachstehender Funktion überprüfe ich, ob der User bereits auf
diesem Sheet eingetragen ist.

> Function UserExists(UserName As String) As Boolean
> Dim C As Range
> Set C = Sheets("User").Range("A:A") _
> .Find(UserName, LookIn:=xlValues, LookAt:=xlWhole)
> UserExists = Not (C Is Nothing)
> End Function
>
> Aber ich's sag trotzdem nochmals: Wenn Du die Ergebnisse nicht global

> zählst sondern für jeden User separat (in der Tabelle User)


> speicherst, dann gibt es das Problem nicht. .-)

Wird der nächste User, der die Datei öffnet gleich in die nächste
freie Zeile eingetragen? Ich möchte nicht alle möglichen User (an die
100), die eine Empfehlung aussprechen können, bereits vorher in diese
Liste eintragen. Diese Eintragung sollte erfolgen, wenn der User die
Datei öffnet.

Die Abfrage habe ich über

Public Sub Workbook_Open()
Dim WshNetwork
Dim strUserName
Dim strLogFile
Dim objLogFile
Dim objFileSystem
Dim Fehler
Dim Range
Dim sheets

Set objFileSystem = CreateObject("Scripting.FileSystemObject")

' Name des Benutzers ermitteln
Set WshNetwork = CreateObject("WScript.Network")
strUserName = WshNetwork.UserName
ActiveWorkbook.sheets("user").Cells(3, 1).Value = strUserName
MsgBox "Angemeldeter User: " & vbCrLf & vbCrLf & strUserName,
vbInformation

End Sub

bereits vorgenommen. Aus dieser Abfrage heraus, sollte der User dann
in das sheet "user" in Spalte A nächste freie Zeile übernommen werden.


Mit Deinem Code

'Beginnt der Name mit Hotel?
If Left(Cb.Name, 5) = "Hotel" Then

muss meine Checkbox aber immer mit 'Hotel' beginnen oder?

Das waren wieder viele Fragen. Hoffentlich hast Du nochmals so gute
Ideen.

Danke!!

Gruß
Martina

Eberhard Funke

unread,
Jun 22, 2009, 11:55:15 AM6/22/09
to
Am Wed, 17 Jun 2009 00:55:03 -0700 (PDT) schrieb Martina M�hrke:

Hallo Martina,

hier:

http://rapidshare.com/files/247405359/Martina.xls.html

findest Du eine alternative L�sung zu Deinem Problem. Ist zwar nicht so
schnieke wir ein Userform, aber vielleicht kommst Du damit eher klar.

Andreas Killer

unread,
Jun 22, 2009, 12:27:01 PM6/22/09
to
Martina M�hrke schrieb:

> Ich glaube, ich habe mich ungl�cklich ausgedr�ckt oder aber ich
> verstehe Deine Ausf�hrungen nicht. Urspr�nglich wollte ich die User
...


> Das waren wieder viele Fragen. Hoffentlich hast Du nochmals so gute
> Ideen.

Klar, hab ich und so langsam kommt der Groschen bei Dir ja auch ins
rollen. ;-)))

Ausnahmsweise mache ich Dir mal ein Beispielfile welches:

a.) Den User automatisch in eine Liste eintr�gt
b.) Sein Voting abspeichert
c.) Sein Voting auch wieder in die Userform l�dt
d.) Eine Auswertung aller abgegebenen Stimmen macht.
e.) Eine dynamische Anzahl Hotels bis max. 255 St�ck verwalten kann

Klingt irrsinnig aufwendig, ist aber eigentlich recht einfach:

http://rapidshare.com/files/247412973/Hotelbewertung.xls.html

Andreas.

Martina Möhrke

unread,
Jun 23, 2009, 5:01:50 AM6/23/09
to
On 22 Jun., 18:27, Andreas Killer <andreas.kil...@gmx.net> wrote:
> Martina Möhrke schrieb:
>
> > Ich glaube, ich habe mich unglücklich ausgedrückt oder aber ich
> > verstehe Deine Ausführungen nicht. Ursprünglich wollte ich die User

> ...
> > Das waren wieder viele Fragen. Hoffentlich hast Du nochmals so gute
> > Ideen.
>
> Klar, hab ich und so langsam kommt der Groschen bei Dir ja auch ins
> rollen. ;-)))
>
> Ausnahmsweise mache ich Dir mal ein Beispielfile welches:
>
> a.) Den User automatisch in eine Liste einträgt
> b.) Sein Voting abspeichert
> c.) Sein Voting auch wieder in die Userform lädt

> d.) Eine Auswertung aller abgegebenen Stimmen macht.
> e.) Eine dynamische Anzahl Hotels bis max. 255 Stück verwalten kann

>
> Klingt irrsinnig aufwendig, ist aber eigentlich recht einfach:
>
> http://rapidshare.com/files/247412973/Hotelbewertung.xls.html
>
> Andreas.

Hallo Eberhard, hallo Andreas,

> Klar, hab ich und so langsam kommt der Groschen bei Dir ja auch ins
> rollen. ;-)))

Ja, ich bin halt noch nicht so vertraut mit der Programmierung und so
"kämpfe" ich mich durch Bücher und Foren, um Antworten auf meine
Fragen zu finden ;-) Aber ich bin immer wieder begeistert, welch
freundliche und ausführliche Antworten ich über die NG bekomme - und
alles wird so geduldig ertragen - KOMPLIMENT!

Super, vielen Dank für Eure Links.
Leider kenne ich diese Seite nicht und weiß nicht, wie ich Euren Link
jetzt - ohne Gebühren - öffne bzw. downloade.

Gruß
Martina

Andreas Killer

unread,
Jun 23, 2009, 6:09:22 AM6/23/09
to
On 23 Jun., 11:01, Martina Möhrke <moeh...@online.de> wrote:

> Leider kenne ich diese Seite nicht und weiß nicht, wie ich Euren Link
> jetzt - ohne Gebühren - öffne bzw. downloade.

Na, jetzt stellst Du unsere Geduld aber so langsam auf die Probe. ;-)

1. Auf den Link klicken
2. Auf den Button "Free-User" klicken
3. Einen Moment warten
4. Auf die runde blaue Grafik "mit weißem Pfeil nach unten zeigend und
Schrift Download" klicken.

Ab hier kriegst Du's (hoffentlich) alleine hin, wenn nicht, kleiner
Tip: Es gibt auch Programmierer die man engagieren kann. .-)

Andreas.

Martina Möhrke

unread,
Jun 23, 2009, 6:35:33 AM6/23/09
to

Hallo Andreas,

> Na, jetzt stellst Du unsere Geduld aber so langsam auf die Probe. ;-)

dies lag aber dieses Mal nicht an mir. "Free-user" hatte ich
angeklickt und bekam die Meldung, dass die Sitzung für den Free-user
bereits abgelaufen sei. Dies habe ich mehrmals probiert und immer die
gleiche Antwort bekommen. Es wäre ja auch möglich gewesen, dass ich in
der Firma dies nicht öffnen darf - also dies mal die Technik, nicht
die Person.

Ansonsten ist mir das Prozedere wahrlich bestens bekannt - nicht dass
Du glaubst ich wäre "blond" (bin ich übrigens nicht) ;-).

Ich werde mir Eure Links jetzt anschauen und bin davon überzeugt, dass
Eure Ideen mir jetzt die Lösung bringen. Nochmals vielen, vielen Dank
für Eure Geduld mit meinen nervenden Fragen.

Gruß
Martina

Eberhard Funke

unread,
Jun 23, 2009, 2:49:18 PM6/23/09
to
Am Tue, 23 Jun 2009 03:35:33 -0700 (PDT) schrieb Martina M�hrke:


>> Na, jetzt stellst Du unsere Geduld aber so langsam auf die Probe. ;-)

> .... Nochmals vielen, vielen Dank
> f�r Eure Geduld mit meinen nervenden Fragen.


Hallo Martina,

da mach' Dir mal keine Sorgen.
Du hast hoffentlich das ";-)" = "scherzhaft gemeint" hinter dem obigem Satz
von Andreas bemerkt.

0 new messages