S odmlkou oprašuji své chabé znalosti VBA a vidím, jak tady pořád řádíte, tak jsem se pustil do pokusů s hrnkem silné kávy. Když došla, tak jsem sem napsal dotaz...
Pak je tu ještě CurrentRegion, ale pokud UsedRange je nesouvislá oblast, která zrovna nezačíná na buňce A1, tak Cells(1).CurrentRegion vrátí oblast která buňku zahrnuje, ačkoli je buňka A1 prázdná, za poslední buňkou oblasti vrácené CurrentRegion je prázdný řádek i sloupec.
Chápu návrh použít SpecialCells s parametrem na prázdné buňky, ale stejně bude nutné to dále nějak rozpitvat.
Evaluate jsem už někde zahlídnul, ale netuším, jak to myslíte s tím testem, to bych chtěl určitě zkusit.
Budou-li kolem oblasti obsahující data naformátované buňky bez hodnot, tak budou zahrnuty do UsedRange, že?
Zapomeneme-li orámování, podmíněné formátování, barvičky..
Předpokládejme, že někde v listu má být ke zpracování jediná souvislá oblast s hodnotami, případně znám předem počet sloupců, počet řádků je neznámý.
Můžete prosím otestovat, zda lze pomocí vlastní funkce níže dosáhnout požadovaného výsledku :
Function IsUsedRangeContinuousArea(Optional ByVal Sh As Object, _
Optional ByVal ExpectedColumnsCount As Integer) As Boolean
If Sh Is Nothing Then Set Sh = ActiveSheet
On Error GoTo Exit_Function
If Not TypeOf Sh Is Worksheet Then Exit Function 'Sh.Type = xlWorksheet
Dim ru As Range: Set ru = Sh.UsedRange
Dim rc As Range: Set rc = ru.Cells(1).CurrentRegion
If rc.Rows.Count = ru.Rows.Count And rc.Columns.Count = ru.Columns.Count Then
If ru.Cells.Count > 1 Then
If Not ExpectedColumnsCount > 0 Then
IsUsedRangeContinuousArea = True
Else
If ExpectedColumnsCount = ru.Columns.Count Then
IsUsedRangeContinuousArea = True
End If
End If
End If
End If
Exit_Function:
End Function
Dalším krokem by mohlo být ověření záhlaví sloupců, je-li známo...
citovat