Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1924to1928
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
Inhaltsverzeichnis

Select Case Problem!

Select Case Problem!
21.03.2023 14:34:58
Hans

Hallo,
ich habe ein Problem mit meiner Select Case Anweisung und ich bin in VBA ein Leihe.

Mein Problem ist Das die Case-Anweisung Pf immer nur den ersten Fall Case Is = 0 prüft und nicht in den zweiten Fall Case Is =1 springt wenn Pf = 1

Ich verstehe meinen Fehler nicht warum das so ist. Kann mir bitte sagen was ich falsch mache, ich dachte ich hätte die Case-Anweisung verstanden.

Vielen Dank im Voraus

unten der Code:

Sub Passfeld()


    ActiveSheet.Protect Password:="STH", Contents:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFiltering _
        :=True, AllowUsingPivotTables:=True, userinterfaceonly:=True

Dim LichMaßIST As Range                                 'lichtes Maß IST Innenkante zu Innenkante Steg
Dim SoUnGeli As Range                                   'Sockel unten geliefert
Dim SoObGeli As Range                                   'Sockel oben geliefert
Dim SoUnAbr As Range                                    'Sockel unten Abruf
Dim SoObAbr As Range                                    'Sockel oben Abruf
Dim PfSoUnAbr As Range                                  'Passfeld Sockel unten Abruf
Dim PfSoObAbr As Range                                  'Passfeld Sockel oben Abruf
Dim DelLichMaßPfo As Range                              'Delta lichtes Maß Pfosten
Dim Pf As Range                                                'Passfeld

Dim SoUnEin As Range                                    'Sockel unten eingebaut
Dim SoObEin As Range                                    'Sockel oben eingebaut
Dim SoProFel As Range                                    'Sockel pro Feld

Dim zeile As Integer
Dim SchleiStawrt As Integer
Dim SchleiEnwrt As Integer
Dim LetzteZeile As Integer

Dim i As Integer


zeile = 18
LetzteZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row

SchleiStawrt = (zeile * 0) + 18
SchleiEnwrt = LetzteZeile

For i = SchleiStawrt To SchleiEnwrt

Set LichMaßIST = Worksheets("LÜ").Cells(i, 32)      'Objetvariablenverweis lichtes Maß IST Innenkante zu Innenkante Steg
Set SoUnGeli = Worksheets("LÜ").Cells(i, 35)        'Objetvariablenverweis Sockel unten geliefert
Set SoObGeli = Worksheets("LÜ").Cells(i, 36)        'Objetvariablenverweis Sockel oben geliefert
Set SoUnAbr = Worksheets("LÜ").Cells(i, 33)         'Objetvariablenverweis Sockel unten Abruf
Set SoObAbr = Worksheets("LÜ").Cells(i, 34)         'Objetvariablenverweis Sockel oben Abruf
Set PfSoUnAbr = Worksheets("LÜ").Cells(i, 40)       'Objetvariablenverweis Passfeld Sockel unten Abruf
Set PfSoObAbr = Worksheets("LÜ").Cells(i, 41)       'Objetvariablenverweis Passfeld Sockel oben Abruf
Set DelLichMaßPfo = Worksheets("LÜ").Cells(i, 131)  'Objetvariablenverweis Delta lichtes Maß Pfosten
Set Pf = Worksheets("LÜ").Cells(i, 102)                       'Objetvariablenverweis Passfeld
Set SoUnEin = Worksheets("LÜ").Cells(i, 42)         'Objetvariablenverweis Sockel unten eingebaut
Set SoObEin = Worksheets("LÜ").Cells(i, 43)         'Objetvariablenverweis Sockel oben eingebaut
Set SoProFel = Worksheets("LÜ").Cells(i, 94)        'Objetvariablenverweis Planungsangabe Sockel pro Feld

Select Case Pf


Case Is = 0 Erster Fall

Select Case SoProFel
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is = 0

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is = 1
Select Case DelLichMaßPfo
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is 0.019

SoUnAbr.Locked = False
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > -0.041

SoUnAbr.Locked = False
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > 0.019

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = True
Case Is -0.041

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = True
End Select
Case Is = 2
Select Case DelLichMaßPfo
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is 0.019

SoUnAbr.Locked = False
SoObAbr.Locked = False
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > -0.041

SoUnAbr.Locked = False
SoObAbr.Locked = False
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > 0.019

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = False
Case Is -0.041

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = False

Case Is = 1 zweiter Fall

Select Case SoProFel
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is = 0

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is = 1
Select Case DelLichMaßPfo
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > 0

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = True
End Select

Case Is = 2
Select Case DelLichMaßPfo
Case ""

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = True
PfSoObAbr.Locked = True
Case Is > 0

SoUnAbr.Locked = True
SoObAbr.Locked = True
PfSoUnAbr.Locked = False
PfSoObAbr.Locked = False
End Select
End Select
End Select
End Select
End Select
Next
End Sub


16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Select Case Problem!
21.03.2023 14:56:50
Rudi Maintaire
Hallo,
Ändere mal
Dim Pf As Range
auf
Dim Pf As Integer

Gruß
Rudi


AW: Select Case Problem!
21.03.2023 23:15:50
Hans
Hallo danke für deine Nachricht.

Wenn ich das ändere kommt die Meldung kein Objekt.

Kann es sein das ich einen Schritt vergessen habe?
Danke für deine Hilfe.


AW: Select Case Problem!
21.03.2023 15:00:01
Peter Trawinski
Du hast Pf als range dimensioniert, weist der Variablen aber den Inhalt einer Zelle zu!
Da du dann in der Case Zeile mit einer Zahl vergleichst, solltest du Pf vielleicht als long dimensionieren!


AW: Select Case Problem!
21.03.2023 23:11:00
Hans
Hmm hast du eine Idee wie man diese Schnittstelle besser gestalten kann?
Ich probiere das mit Long aus und melde mich nochmal, danke für deine Hilfe.


Anzeige
AW: Select Case Problem!
21.03.2023 15:16:24
GerdL
Hallo Hans,

Im SelectCase - Konstrukt werden die "Case" von oben nach unten abgearbeitet u. nach dem ersten Treffer dessen Case abgearbeitet
u. dann immer die Anweisung verlassen.
Ich habe etwas drinrumgespielt.

Gruß Gerd
Select Case Pf '1

    Case Is = 0  '1.1                                                           ' Erster Fall
    
                Select Case SoProFel
                    Case ""
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = True
                        PfSoObAbr.Locked = True
                    Case Is = 0
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = True
                        PfSoObAbr.Locked = True
                    Case Is = 1
                        Select Case DelLichMaßPfo
                            Case ""
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is  0.019
                                
                                SoUnAbr.Locked = False
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is > -0.041
                                
                                SoUnAbr.Locked = False
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is > 0.019
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = False
                                PfSoObAbr.Locked = True
                            Case Is  -0.041
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = False
                                PfSoObAbr.Locked = True
                            End Select 'DelLichMaßPfo
                    Case Is = 2
                        Select Case DelLichMaßPfo
                            Case ""
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is  0.019
                                
                                SoUnAbr.Locked = False
                                SoObAbr.Locked = False
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is > -0.041
                                
                                SoUnAbr.Locked = False
                                SoObAbr.Locked = False
                                PfSoUnAbr.Locked = True
                                PfSoObAbr.Locked = True
                            Case Is > 0.019
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = False
                                PfSoObAbr.Locked = False
                            Case Is  -0.041
                                
                                SoUnAbr.Locked = True
                                SoObAbr.Locked = True
                                PfSoUnAbr.Locked = False
                                PfSoObAbr.Locked = False
                         End Select ' DelLichMaßPfo fehlte
                            
    Case Is = 1   '1.2                                                             ' zweiter Fall
    
        Select Case SoProFel
            Case ""
                
                SoUnAbr.Locked = True
                SoObAbr.Locked = True
                PfSoUnAbr.Locked = True
                PfSoObAbr.Locked = True
            Case Is = 0
                
                SoUnAbr.Locked = True
                SoObAbr.Locked = True
                PfSoUnAbr.Locked = True
                PfSoObAbr.Locked = True
            Case Is = 1
                Select Case DelLichMaßPfo
                    Case ""
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = True
                        PfSoObAbr.Locked = True
                    Case Is > 0
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = False
                        PfSoObAbr.Locked = True
                    End Select ' DelLichMapPfo
    
            Case Is = 2
                Select Case DelLichMaßPfo
                    Case ""
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = True
                        PfSoObAbr.Locked = True
                    Case Is > 0
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = False
                        PfSoObAbr.Locked = False
                 End Select 'DelLichMaßPfo
         'End Select 'zuviel
  
  'End Select 'zviel
        End Select '1.2 SoProFel
End Select '1


Anzeige
AW: Select Case Problem!
21.03.2023 23:05:19
Hans
Ich habe das Mal um gesetzt aber leider ist das Problem immer noch da er schafft es nicht in den zweiten Fall


AW: Select Case Problem!
21.03.2023 23:07:42
Hans
Könnte es mit den variablen zu tun habe ?

Ich deklariere die Variablen als Datentyp range
Könnte das damit zu tun haben?


AW: Select Case Problem!
21.03.2023 15:19:52
onur
Es wundert mich, dass der Code überhaupt fehlerfrei läuft.
Wie bei IF-End If , For-Next-"Schleifen" muss bei Schachtelungen JEDE innere Schleife mit End (oder Next) absgeschlossen sein, bevor du mit der Äusseren weitermachst.
If x>0 Then
   If x>10 Then   'Innere Beginn
      If x>20 Then   '2.Innere Beginn
         ...
      End If   '2.Innere abgeschlossen - DANN erst weiter
   End If '   Innere abgeschlossen - DANN erst weiter
Else
   ...
End If
Was du machst, führt zu Chaos.


Anzeige
AW: Select Case Problem!
21.03.2023 23:02:49
Hans
Hättest du eine Idee wie man es besser machen könnte?
Der Code "geht" er schafft es nur nicht zum nächsten Fall.
Habe ich vielleicht einen Fehler mit den variablen, wie ich es deklariert habe?


AW: Select Case Problem!
21.03.2023 23:14:24
onur
Das ganze kann man bestimmt auch viel kürzer machen - kannst du die Datei posten? Sensible Daten kannst du ja neutralisieren.


AW: Select Case Problem!
21.03.2023 23:16:13
onur
Und WENN du postest, bitte genaue Erklärung, was wann passieren soll...


AW: Select Case Problem!
22.03.2023 09:55:46
David15348
Hallo hier wäre die Datei die Erklärung ist im Code eingefügt.

https://www.herber.de/bbs/user/158359.zip


Anzeige
AW: Select Case Problem!
22.03.2023 10:28:02
onur
1) Wieso überprüfst du, wenn z,B. nur Zeile 19 geändert wurde, trotzdem ALLE Zeilen von 18 bis Ende?
2)
Case Is = 0 And SoProFel    
ist Blödsinn - warum nicht einfach
Case Is = 0 


AW: Select Case Problem!
22.03.2023 14:08:49
Hans
Da hast du Recht ist Blödsinn, habe ich tatsächlich nicht gesehen danke für den Hinweis.
Aber wie gesagt bin Leihe was VBA angeht.


AW: Select Case Problem!
22.03.2023 10:31:21
Rudi Maintaire
Hallo,
da sitzt ein End Select falsch.
muss so aussehen:
                    Case Is  -0.041                        'Fall Delta lichtes Maß Pfosten  -0,041 mit(Passfeld=0, Sockel=2)
                        
                        SoUnAbr.Locked = True
                        SoObAbr.Locked = True
                        PfSoUnAbr.Locked = False
                        PfSoObAbr.Locked = False
                    End Select                              '1.4 Ende der Betrachtung "Passfeld" = 0 UND "Sockel Pro Feld" = Leer, 1, 2 UND "Deltalichtes Maß Pfosten" = Leer,  0.019, > -0.041, > 0.019,  -0.041
                  End Select
    Case Is = 1              
Am Ende eins löschen.

Ich bezweifele, dass das funktioniert. Select Case wird von oben abgearbeitet und der erste Treffer genommen.
z.B. -0,01 ist &lt 0,019, so dass der Rest nicht ausgewertet wird.

Gruß
Rudi


Anzeige
AW: geschlossen oWt
27.03.2023 23:56:46
Piet
keine Frage mehr offen!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige