AW: neue Version
21.01.2007 12:44:04
Erich G.
Hallo Eugen,
vor dem Frühstück ist wohl bei mir schlecht...
Hier eine neue Version:
Option Explicit
Sub TestLetzteSpalte()
Worksheets.Add
Cells(1, 7) = 100
Cells(2, 8) = "="""""
Cells(3, 9) = "x"
Cells(3, 9).ClearContents
Cells(4, 10).Validation.Add Type:=xlValidateWholeNumber, _
AlertStyle:=xlValidAlertStop, Operator:=xlNotEqual, Formula1:="7"
MsgBox LetzteBenutzteSpalte(Sheets(1).Range("B1:AA4"), 0) ' Bereich mit 5 Zeilen
MsgBox letzteSpalte(Range("B1:AA4"))
MsgBox LetzteBenutzteSpalte(Sheets(1).Range("B1:AA4"), 1) ' mit Gültigkeitsprüfung
MsgBox UnbenutzteSpalte(Sheets(1).Range("B1:AA4"), 0)
MsgBox UnbenutzteSpalte(Sheets(1).Range("B1:AA4"), 1)
End Sub
Function UnbenutzteSpalte(rngB As Range, _
Optional Gueltig As Boolean, _
Optional Komment As Boolean) As Integer
UnbenutzteSpalte = LetzteBenutzteSpalte(rngB, Gueltig, Komment) + 1
If UnbenutzteSpalte > rngB.Column + rngB.Columns.Count - 1 Then UnbenutzteSpalte = -1
End Function
Function LetzteBenutzteSpalte(rng As Range, _
Optional Guelt As Boolean, _
Optional Komm As Boolean) As Integer
Dim cc As Integer
cc = LastColSpec(rng, xlCellTypeConstants)
cc = Application.Max(cc, LastColSpec(rng, xlCellTypeFormulas))
If Guelt Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeAllValidation))
If Komm Then cc = Application.Max(cc, LastColSpec(rng, xlCellTypeComments))
LetzteBenutzteSpalte = cc
End Function
Function LastColSpec(rng As Range, specType As Integer) As Integer
Dim varAreas, rngA As Range
On Error GoTo XEnd
Set varAreas = rng.SpecialCells(specType).Areas
For Each rngA In varAreas
LastColSpec = Application.Max(LastColSpec, rngA.Columns(rngA.Columns.Count).Column)
Next rngA
XEnd:
On Error GoTo 0
End Function
Function letzteSpalte(rng As Range) As Integer
Dim zz As Long
On Error Resume Next
For zz = 1 To rng.Rows.Count
If Application.CountA(rng.Rows(zz)) > 0 Then letzteSpalte = Application.Max( _
letzteSpalte, rng.Rows(zz).Column - 1 + Application.Match("", rng.Rows(zz), -1))
If Application.Count(rng.Rows(zz)) > 0 Then letzteSpalte = Application.Max( _
letzteSpalte, rng.Rows(zz).Column - 1 + Application.Match(-1E+307, rng.Rows(zz), -1))
Next zz
On Error GoTo 0
End Function
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort