Anzeige
Archiv - Navigation
1500to1504
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

Case lösung oder andere?

Case lösung oder andere?
07.07.2016 09:21:24
roberto
Guten Tag:
Ich berschreibe hier meine Situation und Problematisch. Mit dem Bitte mich zu helfen.
Vielen Dank.
Situation:
Mit drei Parameter sollte man die Formel berechnet, W=HxBxSG, alle drei H, B, und SG. muss man eingeben;
Je nach dem Wert von W, sollte man eine Bestimmte Tabelle erscheinen.
Problematisch:
Das komplizierte Sache liegt beim dem verschiedenen Konditionen,
1.- beim W. Für W sind vier (4) Matrix, eine mit einem Max Wert von 25, dann 30, dann 40 und 50.
2.- Die Matrix haben auch ein min und max H und min und max B.
Matrix 1. H = (1250-1850), B=(300-750) W max 25
Matrix 2. H=(1850-2300), B=(300-900) W max 30
Matrix 3. H=(1850-2500), B=(300-900) W max 40
Matrix 4. H=(2300-2850), B=(300-900) W max 50
Meine Aktuelle Lösung, die noch fehler hat:

Public Sub bereich301()
Dim intStart%, intEnd As Integer
Dim intHoehe%, intBreite%, intDicke%, intM%, intspezGewicht As Integer
Dim dblGewicht As Double
Dim dblTiefe As Double
Dim zeile&, spalte&, lngMaxGewicht As Long
Dim arr As Variant
Dim i As Byte, blnOK As Boolean
arr = Array(25, 30, 40, 50, 50)
With Worksheets("concepta")
intHoehe = .Cells(4, 3)
intBreite = .Cells(5, 3)
intDicke = .Cells(6, 3)
intspezGewicht = .Cells(7, 3)
intM = .Cells(8, 3)
intTiefe = .Cells(11, 3)
dblGewicht = intHoehe / 1000 * intBreite / 1000 * intDicke / 1000 * intspezGewicht
dblTiefe = intBreite - intM + 73
End With
' insert rmo
Select Case intHoehe
Case 1250 To 1850
intStart = 0
intEnd = 1
Case 1851 To 2300
intStart = 1
intEnd = 2
Case 1851 To 2250
intStart = 1
intEnd = 3
Case 1851 To 2500
intStart = 2
intEnd = 3
Case 2301 To 2500
intStart = 3
intEnd = 4
Case Else
intStart = 3
intEnd = 4
End Select
'rmo
Select Case dblGewicht
Case 0 To 25
intStart = 1
intEnd = 2
Case 25.01 To 30
intStart = 1
intEnd = 2
Case 30.01 To 40
intStart = 2
intEnd = 3
Case Else
intStart = 3
intEnd = 4
End Select
' case max gewicht
Select Case dblGewicht
Case Is > 50
intStart = 4
intEnd = 4
MsgBox "Gewicht bei dieser Höhe/Breite/Material zu groß" & vbNewLine & "Bitte; Höhe,Breite oder  _
_
_
_
Material ändern!!!"
End Select
' end case gewicht
' for i
For i = intStart To intEnd
If retPos(Worksheets("HAWA-Concepta " & arr(i - 1)).Cells(1, 1), intHoehe, intBreite, zeile,   _
_
_
_
spalte, lngMaxGewicht) Then
If lngMaxGewicht > dblGewicht Then
'  MsgBox "errechnetes Gewicht unterhalb der Tabelle HAWA " & arr(i - 1) & " in Zelle(" & Chr( _
_
_
_
spalte + 64) & zeile & ")"
Call TabEinAusdrei(arr(i - 1))
Exit For
End If
End If
Next
'If Not blnOK Then MsgBox "Gewicht in allen Tabellen bei dieser Höhe/Breite zu groß" &  _
vbNewLine & "Bitte; Höhe oder Breite ändern!!!"
End Sub

Problem:
Mit H=1256, B=700, SG = 1100 dann W = 19.3424kg,
W sollte gut für die Matrix mit max 25, aber genau an diesen Punkt auf dem Matrix hat ein _
Maximum von 17, und gemäss die Public Sub bereich301() geht auf dem Matrix 30, und Matrix 30 hat ein H von 1850-2300, musste nicht erscheinen.
Frage; ist das Problem mit die Case ?
Vielen Dank
Freundliche Grüsse,

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Case lösung oder andere?
07.07.2016 15:33:27
Daniel
Hi
die Case-Fälle sind unsinnig.
achte darauf, dass sich die Bedinungen für die einzelnen Case-Fälle nicht überschneiden, so dass es eindeutig wird, welcher Case-Fall zutrifft.
Wenn die Case-Fälle nicht eindeutig sind, dann wird in der Reihe der erste zutreffende Fall angewendet.
in deinem Fall wäre das beispielsweise:
 Case 1250 To 1850
Case 1851 To 2300
Case 1851 To 2250
Case 1851 To 2500
Case 2301 To 2500
Case Else
der dritte Fall wird nie zur Anwendung kommen, weil der durch den zweiten Fall vollständig abgedeckt ist, und der 5. Fall auch nie, weil er durch den 4. Fall abgedeckt ist.
effektiv hast du in diesem Konstrukt folgende Fälle:
 Case 1250 To 1850
Case 1851 To 2300
Case 2301 To 2500
Case Else

desweitern ist es so, dass SelectCase-Gruppen:
Select Case intHoehe und Select Case dblGewicht
direkt aufeinander folgen und die selben Variablen beschreiben (intStart, intEnd)
somit überschreibst du mit SelectCase dblGewicht das Ergebnis von SelectCase intHöhe und das SelectCase intHöhe ist nutzlos.
Gruß Daniel

Anzeige
AW: Case lösung oder andere?
07.07.2016 16:06:01
roberto
Hallo,
Vielen Dank...für die erklärung.(ich habe nie gelernt), super.
Dann, ich habe zwischenzeit etwas angepasst, und zwar folgendes:
Select Case intHoehe
Case 1250 To 1850
intStart = 0
intEnd = 0
Case 1851 To 2300
intStart = 1
intEnd = 2
Case 1851 To 2250
intStart = 1
intEnd = 3
Case 1851 To 2500
intStart = 2
intEnd = 3
Case 2301 To 2500
intStart = 3
intEnd = 4
Case Else
intStart = 4
intEnd = 4
End Select

und dann hier habe ich die (-1) gelöscht.

For i = intStart To intEnd
If retPos(Worksheets("HAWA-Concepta " & arr(i)).Cells(1, 1), intHoehe, intBreite, zeile,  _
spalte, lngMaxGewicht) Then
If lngMaxGewicht > dblGewicht Then
MsgBox "errechnetes Gewicht unterhalb der Tabelle HAWA " & arr(i) & " in Zelle(" & Chr( _
spalte + 64) & zeile & ")"
Call TabEinAusdrei(arr(i))
Exit For

Noch eine Frage dazu:
Kann man noch eine For i = intStart To intend für "dblGewicht" machen? wenn ja, wie soll es sein?
Und dann muss ich die case gemäss dein vorschlag machen?;

Case 1250 To 1850
Case 1851 To 2300
Case 2301 To 2500
Case Else

Bemerkung: mit meine Aktuelle änderung hat es funktioniert, aber ich bin nicht sicher ob perfekt ist.
Vielen Dank
LG.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige