Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1304to1308
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

Kontrollstruktur - wo ist dre Fehler?

Kontrollstruktur - wo ist dre Fehler?
06.04.2013 18:57:58
Peter
Guten Abend
In meinem Code soll das "End With" zuviel sein.
Ich finde den Fehler nicht. Wer kann mir helfen?
Arbeitet alle Zeilen 1 in den einzelnen Worksheets durch. Wo eine Zahl enthalten ist, wird die Spaltenbreite entsprechend festgelegt.
Danke und Gruss, Peter
Option Explicit
Sub Spaltenbreite()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"
'' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Range(.Cells(1, 1), .Cells(1, lngLetzteSpalte))
For Each rCell In rRange
If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then GoTo KeineAngabe
rCell.ColumnWidth = rCell.Value
End With
KeineAngabe:
'' keine Aktion ausführen
End Select
Next wSheet
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Kontrollstruktur - wo ist dre Fehler?
06.04.2013 19:16:50
hary
Hallo
end select gehoert:
Case Else
end select
hin
gruss hary

AW: und...
06.04.2013 19:19:49
hary
Hallo nochmal
..es fehlt ein next in der mittleren Schleife
gruss hary

AW: Mache gleich Schicht
06.04.2013 19:25:01
hary
Hallo
Bin uebermuedet ;-)
Sub Spaltenbreite()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"
'' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Range(.Cells(1, 1), .Cells(1, lngLetzteSpalte))
For Each rCell In rRange
If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then GoTo KeineAngabe
rCell.ColumnWidth = rCell.Value
 next
End With
End Select
Next wSheet
KeineAngabe:
'' keine Aktion ausführen
End Sub

gruss hary

Anzeige
AW: Mache gleich Schicht
06.04.2013 19:25:12
hary
Hallo
Bin uebermuedet ;-)
Sub Spaltenbreite()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"
'' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Range(.Cells(1, 1), .Cells(1, lngLetzteSpalte))
For Each rCell In rRange
If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then GoTo KeineAngabe
rCell.ColumnWidth = rCell.Value
 next
End With
End Select
Next wSheet
KeineAngabe:
'' keine Aktion ausführen
End Sub

gruss hary

Anzeige
Fehlendes Next
06.04.2013 20:01:52
Erich
Hi Peter,
dass da ein Next fehlte, hat Hary dir ja schon geschrieben.
Konsequent sauberes Einrücken hilft!
Das Goto lässt sich leicht vermeiden. Mein Vorschlag:

Sub Spaltenbreite()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"            '' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Range(.Cells(1, 1), .Cells(1, lngLetzteSpalte))
For Each rCell In rRange
If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then Exit For
rCell.ColumnWidth = rCell.Value
Next rCell
End With
End Select
Next wSheet
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Fehlendes Next
06.04.2013 20:59:29
Peter
Hallo
Vielen Dank für die schnellen Antworten.
@ Erich: Vielen Dank für den Hinweis zum guten Strukturieren. Ich versuche, mich in diese Richtung zu "bewegen".
Zum Vermeiden von GOTO: Das Ergebnis ist nicht, wie ich es mir wünsche.
Sobald eine Zelle die Bedingung erfüllt (leer, nicht numerisch oder die entsprechende Spalte ist ausgeblendet), werden die nachfolgenden Zellen in Zeile 1 nicht mehr abgearbeitet; es würde dann das nächste Worksheet in Angriff genommen (ist beispielsweise nur die erste Spalte eines bestimmten Worksheets ausgeblendet, bleiben alle Spaltenbreiten, so wie sie sind).
Gibt es noch eine andere Möglichkeit, also eine Sprungmarke zu setzen?
Danke und Gruss
Peter

Anzeige
AW: Fehlendes Next
07.04.2013 00:31:49
Erich
Hi Peter,
nun habe ich dich so verstanden, dass der Code alle Spalten verarbeiten,
also nicht bei der ersten "Nicht-Spalte" gleich zum nächsten Blatt übergehen soll.
Das war aus deinem Eingangs-Code nicht ersichtlich. "GoTo KeineAngabe" führt zum nächsten Blatt.
Wenn ich das jetzt richtig versdtanden habe, sind Goto und Exit völlig überflüssig, das einfache If reicht.
Hier mal mein und dein Code etwas umgebaut:

Sub Spaltenbreite2()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Worksheet
' besser als Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"            '' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Cells(1, 1).Resize(1, lngLetzteSpalte)       ' Vorschlag
For Each rCell In rRange
If IsNumeric(rCell.Value) And rCell.Value  "" _
And Not rCell.EntireColumn.Hidden Then _
rCell.ColumnWidth = rCell.Value             ' ohne Goto und Exit
Next rCell
End With
End Select
Next wSheet
End Sub
Sub Spaltenbreite1()
Dim rCell As Range, rRange As Range, lngLetzteSpalte As Long, wSheet As Object
For Each wSheet In Worksheets
Select Case wSheet.Name
Case "Tabelle1", "Tabelle2"        '' keine Aktion ausführen
Case Else
With wSheet
lngLetzteSpalte = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rRange = .Range(.Cells(1, 1), .Cells(1, lngLetzteSpalte))
For Each rCell In rRange
If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then GoTo KeineAngabe
rCell.ColumnWidth = rCell.Value
KeineAngabe:
Next rCell
End With
End Select
Next wSheet
End Sub
Passt das so?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Fehlendes Next
07.04.2013 07:02:37
fcs
Hallo Erich, Hallo Peter.
die Version ohne Sprung wird noch nicht funktionieren, da die Bedingungen durch "And" verknüpft sind.
Die Prüfung der Zellen muss wie folgt aussehen, wenn man ohne Sprungadresse arbeiten möchte.
                  If Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden Then
'mach nichts
Else
rCell.ColumnWidth = rCell.Value
End If
'oder
If Not (Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden) Then _
rCell.ColumnWidth = rCell.Value
Gruß
Franz

@Franz: And und Or und Not
07.04.2013 10:48:11
Erich
Hi Franz,
den Unterschied sehe ich jetzt nicht. :-(
Die Bedingungen in "Spaltenbreite2()" sind mit "And" verknüpft - aber IMHO muss das auch so sein.
Die einzelnen Bedingungen sind die Negationen der Bedingungen in "Spaltenbreite1()".

If Not (Not IsNumeric(rCell.Value) Or rCell.Value = "" _
Or rCell.EntireColumn.Hidden) Then _
rCell.ColumnWidth = rCell.Value
' ist m. E. identisch mit
If IsNumeric(rCell.Value) And rCell.Value  "" _
And Not rCell.EntireColumn.Hidden Then _
rCell.ColumnWidth = rCell.Value
' Letzteres ist wohl einfacher.
Oder übersehe ich da etwas?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: @Erich - Deine Lösung ist auch richtig
07.04.2013 12:45:50
fcs
Hallo Erich,
deine Lösung für ohne Sprungadrese funktioniert auch.
Ich hatte nicht genau darauf geachtet, dass du außer der And-Verknüpfung ja auch noch die Bedingungen geändert hast.
Welche Lösung jetzt die einfachere ist: ? - Ist wohl etwas Geschmackssache.
Gruß
Franz

AW: @Erich - Deine Lösung ist auch richtig
08.04.2013 13:41:55
Peter
Hallo zusammen
Nochmals besten Dank
Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige