Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Select Case

Select Case
30.11.2006 12:41:32
Josef
Hallo!
KIst es bitte mit Select Case möglich unten stehenden Code zu verkleinern?
Wie würde hier bitte eine Ansatzlösung lauten?
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wks = Workbooks("Gesundheitswesen Wien.xla").Worksheets("Daten")
Set wks1 = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Schalter")
If IsDate(TextBox5) Then
If wks1.Cells(2, 4) = Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel2.Caption = wks.Cells(6, 42) Then
TextBox6.Text = wks.Cells(6, 43)
End If
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel3.Caption = wks.Cells(7, 42) Then
TextBox11.Text = wks.Cells(7, 43)
End If
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel4.Caption = wks.Cells(8, 42) Then
TextBox16.Text = wks.Cells(8, 43)
End If
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel5.Caption = wks.Cells(10, 42) Then
TextBox21.Text = wks.Cells(10, 43)
End If
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel6.Caption = wks.Cells(11, 42) Then
TextBox26.Text = wks.Cells(11, 43)
End If
Danke
Josef

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select Case
ingUR
Nein, Josef,
das ist nicht möglich, den die SELECT-CASE-Anweisung dient als Auswahlfunktion, ähnlich der Zellenfunktion AUSWAHL(...), aus der je nach zuvor festgelegtem Referenzwert das entsprechende Element in dem AUSWAHL / SELECT-CASE-Block angewählt wird.
Vor der weiteren Erläuterung möchte ich Deine inneren Abfrageblöcke estwas umschreiben. Allen Absfragen ist gemien, dass sie eine Bedingung mit dem Wahrheitswert der Bedingung TextBox3.Text = .Cells(1, 43) durch AND verknüpfen. Damit gilt das Ergebnis dieser Bedingung dafür, ob überhaubt eine Aktion stattfindet oder nicht. Damit kann sie als eigenständige IF-Klammer genutzt werden.
Zudem kann mit dem Einsatz der WITH-Klammerung das Ausschreiben des Objekts wsk unterbleiben, es wird durch den vorgestelltem Punkt in diesem so deklarierten WITH-Block referenziert.
Die Anweisung If wks1.Cells(2, 4) = Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then kann ich mit meinem Wissen nicht entschlüsseln. ICh lasse sie also, mit einem Kommentar versehen, unverändert stehen, sie Du sie geschreiben hast.
If IsDate(TextBox5) Then
If wsk1.Cells(2, 4) = Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then 'SAS SOLL FUNKTIONIEREN?
If TextBox3.Text = .Cells(1, 43) then
with wsk
if schaltLabel2.Caption = .Cells(6, 42) Then
TextBox6.Text = .Cells(6, 43)
elseIf schaltLabel3.Caption = .Cells(7, 42) Then
TextBox11.Text = .Cells(7, 43)
elseif schaltLabel4.Caption = .Cells(8, 42) Then
TextBox16.Text = .Cells(8, 43)
elseif schaltLabel5.Caption = .Cells(10, 42) Then
TextBox21.Text = wks.Cells(10, 43)
elseif schaltLabel6.Caption = .Cells(11, 42) Then
TextBox26.Text = .Cells(11, 43)
End If
end if
end with
end if
end if
end if

Eine SELECT-CASE-Anweisung kann sich nun nur auf einen Beobalchtungswert beziehen, beispielsweise:
SELECT CASE schaltLabel0.Caption
case .Cells(6, 42): TextBox6.Text = .Cells(6, 43)
case .Cells(7, 42): TextBox11.Text = .Cells(7, 43)
case .Cells(8, 42): TextBox16.Text = .Cells(8, 43)
case .Cells(10, 42): TextBox21.Text = .Cells(10, 43)
case .Cells(11, 42): TextBox26.Text = .Cells(11, 43)
end select
Vielleicht wird hier auch ersichtlich, dass die SELECT-CASE-Anweisung in deinem Verzweigungsfall nicht eingesetzt werden kann, da Deine Referenzgröße schaltLabel0.Caption im IF-Verzeigungsbaum veränderlich ist.
Gruß,
Uwe
Anzeige
AW: Select Case
30.11.2006 13:40:55
Harald
Hi Josef,
Select Case würde es unnötig komplizieren (2 Fallabfragen).
Zweite Möglichkeit wäre eine Schleife. In diesem Fall auch nicht unkompliziert und
nach 2 Wochen für dich wohl nicht mehr nachvollziehbar (nicht bös gemeint)
Ein paar End If könnte man wegrationalisieren.
Alles in eine Zeile, dann kann das End If weg. Bsp.:
If TextBox3.Text = wks.Cells(1, 43) And schaltLabel2.Caption = wks.Cells(6, 42) Then TextBox6.Text = wks.Cells(6, 43)
Was mir völlig unklar ist...
If wks1.Cells(2, 4) = Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then
Zumal 2 Or 3 auch bei anderen Tagen weiterschaltet.
Ich lass die Frage offen.
Mag sein, dass andere mehr darin sehen als ich ;-))
Gruss Harald
Anzeige
AW: too late ;-) owT
30.11.2006 13:42:01
Harald
Gruss Harald
AW: Select Case
30.11.2006 13:44:20
UweD
Hallo
Schick bitte erst mal den kompl. Code oder noch besser eine Musterdatei.
Es wird sicherlich zeitaufwendig, die Textboxen etc. erst nachzubilden um dann zu testen.
1) In dem angegebenen Code fehlen schon 2x End IF
2) Außerdem dürfte das hier nicht klappen.
If wks1.Cells(2, 4) = Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then
- 2x Gleichheitszeichnen geht nicht
- angenommen es soll so heißen
if Day(TextBox5) = 2 Or 3 And Month(TextBox5) = 1 Then
ginge das auch nicht. wenn dann schon so..
if Day(TextBox5) = 2 Or Day(TextBox5)=3 And Month(TextBox5) = 1 Then
dann ist nicht klar, wie die Undverknüpfung sein soll. Hier fehlen Klammern
so.. if (Day(TextBox5) = 2 Or Day(TextBox5)=3) And Month(TextBox5) = 1 Then
oder if Day(TextBox5) = 2 Or (Day(TextBox5)=3 And Month(TextBox5) = 1) Then
unabhängig davon dürfte der Rest mit Case select ~ so aussehen.
ungetestet

Select Case Textbox3.Text
Case wks.Cells(1, 43)
If schaltLabel2.Caption = wks.Cells(6, 42) Then
TextBox6.Text = wks.Cells(6, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel3.Caption = wks.Cells(7, 42) Then
TextBox11.Text = wks.Cells(7, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel4.Caption = wks.Cells(8, 42) Then
TextBox16.Text = wks.Cells(8, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel5.Caption = wks.Cells(10, 42) Then
TextBox21.Text = wks.Cells(10, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel6.Caption = wks.Cells(11, 42) Then
TextBox26.Text = wks.Cells(11, 43)
End If
End Select

Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Select Case
30.11.2006 14:44:43
Josef
Hallo Uwe!
Danke für Deine Antwort!
Nachdem ich laut Deinen Anweisungen folgenden Code fertiggestellt hatte wollte ich diesen ausführen. Es werden jedoch keine Einträge in die Textboxen gemacht. Habe ich hier noch was falsch gemacht?
Der Vorgang sollte folgender sein:
Wenn der Wert im Tabellenblatt "Schalter" in der Zelle D2 ein Datum ist und der erste Tag entweder der2. oder der 3 Tag sowie der Monat Jänner ist und wenn der Wert im Arbeitsblatt"Daten" in der Zelle AQ1 ident ist mit dem Eintrag in der TextBox5 und die Caption im schaltLabel ident ist mit dem Wert im Arbeitsblatt "Daten" dann soll der richtige Wert in die richtige TextBox geschrieben werden.

Private Sub CommandButton5_Click()
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wks = Workbooks("Gesundheitswesen Wien.xla").Worksheets("Daten")
Set wks1 = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Schalter")
If IsDate(TextBox5) Then
If wks1.Cells(2, 4) = Day(TextBox5) = 2 Or (Day(TextBox5) = 3 And Month(TextBox5) = 1) Then
Select Case TextBox3.Text
Case wks.Cells(1, 43)
If schaltLabel2.Caption = wks.Cells(6, 42) Then
TextBox6.Text = wks.Cells(6, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel3.Caption = wks.Cells(7, 42) Then
TextBox11.Text = wks.Cells(7, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel4.Caption = wks.Cells(8, 42) Then
TextBox16.Text = wks.Cells(8, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel5.Caption = wks.Cells(10, 42) Then
TextBox21.Text = wks.Cells(10, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel6.Caption = wks.Cells(11, 42) Then
TextBox26.Text = wks.Cells(11, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel7.Caption = wks.Cells(17, 42) Then
TextBox31.Text = wks.Cells(17, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel8.Caption = wks.Cells(21, 42) Then
TextBox36.Text = wks.Cells(21, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel9.Caption = wks.Cells(5, 42) Then
TextBox41.Text = wks.Cells(5, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel10.Caption = wks.Cells(15, 42) Then
TextBox46.Text = wks.Cells(15, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel11.Caption = wks.Cells(9, 42) Then
TextBox51.Text = wks.Cells(9, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel12.Caption = wks.Cells(12, 42) Then
TextBox56.Text = wks.Cells(12, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel13.Caption = wks.Cells(13, 42) Then
TextBox61.Text = wks.Cells(13, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel14.Caption = wks.Cells(16, 42) Then
TextBox66.Text = wks.Cells(16, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel15.Caption = wks.Cells(14, 42) Then
TextBox71.Text = wks.Cells(14, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel16.Caption = wks.Cells(18, 42) Then
TextBox76.Text = wks.Cells(18, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel17.Caption = wks.Cells(22, 42) Then
TextBox81.Text = wks.Cells(22, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel18.Caption = wks.Cells(20, 42) Then
TextBox86.Text = wks.Cells(20, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel19.Caption = wks.Cells(19, 42) Then
TextBox90.Text = wks.Cells(19, 43)
End If
Case wks.Cells(1, 43)
If schaltLabel20.Caption = wks.Cells(2, 42) Then
TextBox94.Text = wks.Cells(2, 43)
End If
End Select
End If
End If
End Sub

Danke
Josef
Anzeige
AW: Select Case
30.11.2006 15:09:30
UweD
Hallo
anhand der Textdefinition...
so?

Private Sub CommandButton5_Click()
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wks = Workbooks("Gesundheitswesen Wien.xla").Worksheets("Daten")
Set wks1 = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Schalter")
If IsDate(wks1.Cells(2, 4)) And (Day(TextBox5) = 2 Or Day(TextBox5) = 3) _
And Month(TextBox5) = 1 And wks.Cells(1, 43) = TextBox5.Text Then
If schaltLabel2.Caption = wks.Cells(6, 42) Then TextBox6.Text = wks.Cells(6, 43)
If schaltLabel3.Caption = wks.Cells(7, 42) Then TextBox11.Text = wks.Cells(7, 43)
If schaltLabel4.Caption = wks.Cells(8, 42) Then TextBox16.Text = wks.Cells(8, 43)
If schaltLabel5.Caption = wks.Cells(10, 42) Then TextBox21.Text = wks.Cells(10, 43)
If schaltLabel6.Caption = wks.Cells(11, 42) Then TextBox26.Text = wks.Cells(11, 43)
If schaltLabel7.Caption = wks.Cells(17, 42) Then TextBox31.Text = wks.Cells(17, 43)
If schaltLabel8.Caption = wks.Cells(21, 42) Then TextBox36.Text = wks.Cells(21, 43)
' usw.
End If
End Sub

Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Select Case
01.12.2006 06:56:48
Josef
Hallo UweD!
Guten Morgen!
Habe jetzt Deinen Lösungsvorschlag verarbeitet und den code noch ein bischen abgespeckt.
Die Berechnungen erfolgen jetzt.
Jedoch werden die Werte in die einzelnen TextBoxen erst nach einem weiteren Klick auf den CommandButton durchgeführt.Ist es nicht möglich bei einem einmaligen Klick auf den CB sämtliche Einträge auf einmal in die TB zu bekommen?
Josef

Private Sub CommandButton6_Click()
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wks = Workbooks("Gesundheitswesen Wien.xla").Worksheets("Daten")
Set wks1 = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Schalter")
If IsDate(wks1.Cells(2, 5)) And (Day(wks1.Cells(2, 5)) = 2 Or Day(wks1.Cells(2, 5)) = 3) _
And Month(wks1.Cells(2, 5)) = 1 And wks.Cells(1, 43) = TextBox3.Text Then
TextBox6.Text = wks.Cells(6, 43)
TextBox11.Text = wks.Cells(7, 43)
TextBox16.Text = wks.Cells(8, 43)
TextBox21.Text = wks.Cells(10, 43)
TextBox26.Text = wks.Cells(11, 43)
TextBox31.Text = wks.Cells(17, 43)
TextBox36.Text = wks.Cells(21, 43)
TextBox41.Text = wks.Cells(5, 43)
TextBox46.Text = wks.Cells(15, 43)
TextBox51.Text = wks.Cells(9, 43)
TextBox56.Text = wks.Cells(12, 43)
TextBox61.Text = wks.Cells(13, 43)
TextBox66.Text = wks.Cells(16, 43)
TextBox71.Text = wks.Cells(14, 43)
TextBox76.Text = wks.Cells(18, 43)
TextBox81.Text = wks.Cells(22, 43)
TextBox86.Text = wks.Cells(20, 43)
TextBox90.Text = wks.Cells(19, 43)
TextBox94.Text = wks.Cells(2, 43)
End If
End Sub

Anzeige
AW: Select Case
01.12.2006 08:14:47
UweD
Hallo nochmal
Lade doch mal eineMusterdaei hoch.
Zum Testen möchte ich ungern erst alle Textboxen erstellen..
Gruß UweD
(Rückmeldung wäre schön)
AW: Select Case
01.12.2006 09:10:42
Josef
Hallo UweD!
In der abgespeckten Version werden die Daten komplett mit einem CommandButton Klick in TB geschrieben
https://www.herber.de/bbs/user/38665.xls
Kann man den nachfolgenden Code nicht gleich am Anfang des UF Moduls
einsetzen? (Als Declare oder Const?) da kenne ich mich noch nicht aus.
Dim wks As Worksheet
Dim wks1 As Worksheet
Set wks = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Daten")
Set wks1 = Workbooks("Gesundheitswesen Wien.xls").Worksheets("Schalter")
If (Day(wks1.Cells(2, 5)) = 2 Or Day(wks1.Cells(2, 5)) = 3) _
And Month(wks1.Cells(2, 5)) = 1 And wks.Cells(1, 43) = TextBox3.Text Then
Josef
Anzeige
AW: Select Case
01.12.2006 09:43:25
UweD
Hallo
Wenn es in der abgespeckten Version klappt, in der "Vollversion" nicht, dann wird die Ursache ja in dem rausgenommenen Teil zu suchen sein.
Geh doch mal in den VB-Editor und starte den Vollversion-Code über F8 (Schrittmodus)
dann kannst du doch sehen, welche Schritte durchlaufen werden.
Das vergleichen mit der Abgespeckten Version.
dann dürftest du die Unterschiede finden.
Gruß UweD
(Rückmeldung wäre schön)
AW: Select Case
30.11.2006 14:53:12
ingUR
Hallo, Uwe,
in Deinem SELECT-Block verstehe ich auf anhieb nicht, an welcher Stelle eine Auswahl statt findet; es wird doch jedes CASE angewählt und erst die IF-Abfrage selektiert die Zuweisung.
In jedem Fall wird jede IF-Abrage hinter einem CASE (sind ja immer nur ein und dasselbe Eingangskriterium) erst einmal ausgeführt, um dann die nächsten CASE-Entscheidung umzusetzen, da ja alle den selben Vergleich zum Referenzwert durchführen und somit auf immer auf die nächste IF-Abfrage führen.
Gruß,
Uwe
P.S.
Kann es sein, dass Du der UweD bist, der sich einst mit Elliott-Wave-Relationen beschäftigt hat? Wenn, nein, dann liegt eine Gleichheit der Initialen vor.
Gruß!
Anzeige
AW: Select Case
30.11.2006 15:12:51
UweD
Hallo
zu1 ) das mit dem Case.. hab ich auch gemerkt.. Ist Unsinn und man braucht kein Selectcase. Siehe die andere Antwort.
zu 2) scheint ein Doppelgänger (gleicher nickname) zu sein.
Gruß UweD
AW: Danke, @UweD, für Deine Antworten (owT)
01.12.2006 19:44:43
ingUR
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige