Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

If und Select Case Anweisung

Forumthread: If und Select Case Anweisung

If und Select Case Anweisung
24.03.2025 11:10:51
Siegfried Freimann
Hallo,
wo liegt hier der Fehler? Die If Anweisung funktioniert, die Select Case nicht.
Warum?
Debbuging Ergebnis:
Zeilen: 53
IF-Bedingung erfüllt
TypeName(lastRow): Long
CInt(Trim(lastRow)): 53
Zeilen = 53: Bedingung NICHT erfüllt

Sub SelectCode()
Set wsVL = ThisWorkbook.Worksheets("Vorlage")
lastRow = LZ(wsVL, 1)
Dim Zeilen As Integer
Zeilen = lastRow
Debug.Print "Zeilen: " & Zeilen
If Zeilen = 53 Then
Debug.Print "IF-Bedingung erfüllt"
Else
Debug.Print "IF-Bedingung nicht erfüllt"
End If
Debug.Print "TypeName(lastRow): " & TypeName(lastRow)
Debug.Print "CInt(Trim(lastRow)): " & CInt(Trim(lastRow))

Select Case True
Case Zeilen = 53
Debug.Print "Zeilen = 53: " & "Bedingung NICHT erfüllt"
' Exit Sub
Case Else
Debug.Print "Keine Bedingung erfüllt"
GoTo Ende
End Select
Exit Sub
Ende:
Debug.Print "Fall Zeilen = 53 erreicht"
End Sub
Danke!
Gruß
Sigi
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If und Select Case Anweisung
24.03.2025 12:35:11
Ulf
Hi,
deine Ergebnisse sind nicht nachvollziehbar.
Public Sub xx()

Dim intZeilen As Integer
intZeilen = 53
If intZeilen = 53 Then
Select Case True
Case intZeilen = 53
Debug.Print "Beide wahr"
End Select
End If
End Sub

hth
Ulf
Anzeige
AW: If und Select Case Anweisung
24.03.2025 13:50:17
Der Steuerfuzzi
Hallo,

Du hast beides mal zwar die selbe Bedingung, allerdings bei if als Ergebnis "Bedingung erfüllt" und bei Select Case "Bedingung NICHT erfüllt", das macht keinen Sinn. Der Code macht übrigens das was er soll.

Gruß
Michael
AW: Select Case Anweisung
24.03.2025 14:10:35
GerdL
Moin,

noch ohne expliziten True-Part.
Public Sub Unit()


Dim Zeilen As Long
Zeilen = 42

Select Case Zeilen
Case 1 To 53: MsgBox "Zeilen = 53: Bedingung erfüllt"
Case Else: MsgBox "Zeilen > 53: Bedingung nicht erfüllt"
End Select

End Sub

Gruß Gerd
Anzeige
AW: Select Case Anweisung
25.03.2025 09:55:53
Siegfried Freimann
Hallo Zusammen,
Danke für Eure Rückmeldungen!
Zuerst mal zu lastrow
Function LZ(ws As Worksheet, col As Long) As Long
' letzte Zeile in Spalte
LZ = IIf(IsEmpty(ws.Cells(Rows.Count, col)), ws.Cells(Rows.Count, col).End(xlUp).Row, Rows.Count)
End Function
zu Select Case true
Meines Wissen nach wir hier genauer geprüft.
Scheinbar war mein Excel nicht in Ordnung, da nur die IF Anweisung funktionierte.
Habe heute Nacht Excel neu installiert nun klappt es.
Danke!
Gruß
Sigi
Sinn des ganzen
Sub FussTextboxen_erstellen()
On Error GoTo Fehler
Dim tb As Object
Dim i As Integer
Dim tBHeight As Double
Dim tBWidth As Double

' Ziel-Arbeitsblatt
Set wsVL = ThisWorkbook.Worksheets("Vorlage")

' Vorhandene TextBoxen löschen, falls vorhanden
For i = 1 To 4
On Error Resume Next
Set tb = wsVL.OLEObjects("Textbox" & i)
If Not tb Is Nothing Then tb.Delete
On Error GoTo 0
Next i
wsVL.PageSetup.PrintArea = ""
' Die Arrays
Dim sData As String
Dim sArray() As String
Dim sArrays(1 To 4) As String
Dim rng As Range
Set wsDa = ThisWorkbook.Worksheets("Daten")
Set rng = wsDa.Columns("A").Find(What:="FaDaten", LookIn:=xlValues, LookAt:=xlWhole)
'Meier||Bau GmbH||Musterring 12||85524||Augsburg||
'Amtsgericht München 142547||DE 122345123||143/124 525 444||M. Maier||0789||||+491678565423||||||||Targo Bank München||DE 12345678910||BYLADE 2345678
If Not rng Is Nothing Then
sData = wsDa.Cells(rng.Row + 1, 1).Value
If Len(sData) > 0 Then
sArray = Split(sData, "||")
sArrays(1) = sArray(0) & "," & sArray(1) & "," & sArray(2) & "," & sArray(3) & " " & sArray(4)
sArrays(2) = "HRB " & sArray(5) & "," & sArray(6) & "," & sArray(7) & "," & sArray(8)
sArrays(3) = "Mobil: " & sArray(11) & "," & sArray(9) & "," & sArray(12) & "," & sArray(13) & "," & sArray(15)
sArrays(4) = sArray(15) & "," & sArray(16) & "," & sArray(17)
End If
End If
Set rng = Nothing
Set wsDa = Nothing

' Berechne die Top-Position am Ende des Formulars
lastRow = LZ(wsVL, 1)
Dim Zeilen As Long
Zeilen = lastRow ' Die letzte Zeile des Arbeitsblatts
Dim iZahl As Long
Dim Zeilenhöhe As Double
Zeilenhöhe = 13.2 ' Zeilenhöhe

Select Case Zeilen
Case Is = 53: iZahl = 53
Case Is = 108: iZahl = 108
Case Is = 163: iZahl = 163
Case Is = 218: iZahl = 218
Case Is = 273: iZahl = 273
Case Is = 328: iZahl = 328
Case Is = 383: iZahl = 383
Case Is = 438: iZahl = 438
Case Is = 493: iZahl = 493
Case Is = 548: iZahl = 548
Case Is = 603: iZahl = 603
Case Is = 658: iZahl = 658
Case Is = 713: iZahl = 713
Case Is = 768: iZahl = 768
Case Is = 823: iZahl = 823
Case Is = 878: iZahl = 878
Case Is = 933: iZahl = 933
Case Is = 988: iZahl = 988
Case Is = 1043: iZahl = 1043
Case Is = 1098: iZahl = 1098
Case Is > 1098
MsgBox "nur 20 Seiten"
Exit Sub
End Select

tBHeight = ((iZahl - 1) * Zeilenhöhe) + 3
tBWidth = 200 ' Breite der TextBoxen erhöhen damit Zeilentext vorher nicht umgebrochen wird

' TextBoxen erstellen und korrekt platzieren
For i = 1 To 4
Set tb = wsVL.OLEObjects.Add(ClassType:="Forms.TextBox.1", Top:=tBHeight, Width:=tBWidth, Height:=43.6)
With tb
.Name = "Textbox" & i
.Object.WordWrap = True
.Object.MultiLine = True
.Object.TextAlign = fmTextAlignLeft
.Object.SelectionMargin = False
.Object.SpecialEffect = fmSpecialEffectFlat
.Object.BorderStyle = fmBorderStyleNone
.Object.Font.Name = "Arial"
.Object.Font.Size = 9
.Object.Text = Join(Split(sArrays(i), ","), vbLf)
End With
Next i

' Vorhandene TextBoxen Breiten festlegen
Dim dBreite As Double, dBreite1 As Double, dBreite2 As Double, dBreite3 As Double
For i = 1 To 4
dBreite = 0
Set tb = wsVL.OLEObjects("Textbox" & i)
wsVL.OLEObjects ("Textbox" & i)
tb.Object.AutoSize = True
dBreite = wsVL.OLEObjects("Textbox" & i).Width
tb.Object.AutoSize = False
Select Case i
Case 1
wsVL.OLEObjects("Textbox1").left = 5
wsVL.OLEObjects("Textbox1").Width = dBreite
dBreite1 = dBreite + 3
Case 2
wsVL.OLEObjects("Textbox2").left = dBreite1 + 8
wsVL.OLEObjects("Textbox2").Width = dBreite
dBreite2 = dBreite + dBreite1 + 5
Case 3
wsVL.OLEObjects("Textbox3").left = dBreite2 + 8
wsVL.OLEObjects("Textbox3").Width = dBreite
dBreite3 = dBreite + dBreite2 + 5
Case 4
wsVL.OLEObjects("Textbox4").left = dBreite3 + 8
wsVL.OLEObjects("Textbox4").Width = dBreite
End Select
' Zeilenunabhängig
tb.Placement = xlFreeFloating
'gleiche Höhe
tb.Height = 43.6
Next i

With wsVL.Range(wsVL.Cells(iZahl, "A"), wsVL.Cells(iZahl, "F"))
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeTop).TintAndShade = 0
.Borders(xlEdgeTop).Weight = xlThin
End With
With wsVL
' Dynamischen Druckbereich festlegen
.PageSetup.PrintArea = .Range(.Cells(1, 1), .Cells(iZahl + 3, 6)).Address
End With
Exit Sub
Fehler:
App_Ein
MsgBox "Textboxen erstellen: " & Err.Description & " (ErrNumber): " & Err.Number
Debug.Print "Textboxen erstellen: " & Err.Description & " (ErrNumber): " & Err.Number
End Sub
Anzeige
AW: Select Case Anweisung
25.03.2025 11:26:48
GerdL
Hallo Siegfried,

weniger flexibel, aber kürzer:
Dim izeile As Long, Zeilen As Long


If Zeilen > 1098 Then MsgBox ("nur 20 Seiten"): Exit Sub
izeile = Zeilen - (Zeilen Mod 55) + 53

Gruß Gerd
AW: Select Case Anweisung
25.03.2025 11:37:15
daniel
Hi

kleiner Tipp am Rande:

diesen Block:
Select Case Zeilen

Case Is = 53: iZahl = 53
Case Is = 108: iZahl = 108
Case Is = 163: iZahl = 163
Case Is = 218: iZahl = 218
Case Is = 273: iZahl = 273
Case Is = 328: iZahl = 328
Case Is = 383: iZahl = 383
Case Is = 438: iZahl = 438
Case Is = 493: iZahl = 493
Case Is = 548: iZahl = 548
Case Is = 603: iZahl = 603
Case Is = 658: iZahl = 658
Case Is = 713: iZahl = 713
Case Is = 768: iZahl = 768
Case Is = 823: iZahl = 823
Case Is = 878: iZahl = 878
Case Is = 933: iZahl = 933
Case Is = 988: iZahl = 988
Case Is = 1043: iZahl = 1043
Case Is = 1098: iZahl = 1098
Case Is > 1098
MsgBox "nur 20 Seiten"
Exit Sub


kannst du mit folgender Berechnung wesentlich kürzer ausführen.
der Abstand zwischen den Werten ist immer 55, dh du machst ein Aufrunden auf ein Vielfaches von 55, nur versetzt um 2
für diese Operation gibt es die Funktion OBERGRENZE, in VBA dann Worksheetfunction.Ceiling

If Zeilen > > 1098 then 

Msgbox "nur 20 Seiten
Exit sub
end if
iZahl = Worksheetfunction.Ceiling(Zeilen + 2, 55) - 2


ist nicht nur kürzer, es ist auch einfacher anzupassen, wenn sich die Anzahl der Zeilen pro Seite mal ändert, du könntest diesen Wert auch in einer Zelle hinterlegen so dass man dafür nicht mal den Code ändern müsste.

dieses aufwendige Select Case braucht man nur dann, wenn die Abstände nicht regelmäßig oder irgendwie berechenbar sind, aber auch dann würde ich das wahrscheinlich nicht "hart" im Code hinterlegen, sondern in einer Hilfstabelle auf einem versteckten Blatt und dann mit dem SVerweis/VLookUp die Werte auslesen. Auch hier ist der Vorteil, das es über die Tabelle wesentlich einfacher geändert werden kann, im Bedarfsfall auch von Anwendern, die sich mit VBA nicht auskennen.

Gruß Daniel
Anzeige
AW: Select Case Anweisung
25.03.2025 20:17:41
Siegfried Freimann
Hallo Gerd, hallo Daniel,
vielen Dank!
Die Worksheetfunction.Ceiling(Zeilen + 2, 55) - 2 ist eine super Sache,
die ich nicht kannte.
Gruß
Sigi
AW: If und Select Case Anweisung
24.03.2025 12:17:44
Siegfried Freimann
Hallo Ralf,
da habe ich mich verschrieben.
Muss natürlich "Zeilen" heißen.
Es bleibt aber dabei, dass auch wenn Zeile 53 beschriftet ist dies nicht anerkannt wird.
Warum?
Danke!
Gruß
Sigi
Anzeige
AW: If und Select Case Anweisung
24.03.2025 13:52:52
Der Steuerfuzzi
Hallo Ralf,

Zitat:
Was willst Du mit Select Case True erreichen?

Ich verwende das auch hin und wieder in bestimmten Fällen. Denn so kann man z. B. die Werte mehrerer Variablen verarbeiten und nicht nur eine.

Allerdings ist das hier natürlich nicht notwendig, da ja nur die Zeile geprüft wird.

Gruß
Michael
Anzeige
AW: If und Select Case Anweisung
24.03.2025 12:30:14
RPP63
Verrätst Du mir, was sich hinter der Function LZ() verbirgt?
Poste mal den (überarbeiteten) kompletten Code.
Nutze dafür die hiesigen Code-Tags.
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18