it-swarm.com.de

Excel Visual Basic - Erkennen, ob der Bereich leer ist

Ich weiß nicht, ob es möglich ist, aber ich möchte überprüfen, ob ein Bereich in Excel leer ist. Wie schreibe ich dann, wenn:

Range("A38":"P38")

Ist im VBA-Code leer? 

Danke im Voraus.

26
Kano

Ich habe aus den Kommentaren eine Lösung gefunden.

Sub Empty()
    If WorksheetFunction.CountA(Range("A38:P38")) = 0 Then
        MsgBox "Empty"
    Else
        MsgBox "Not Empty"
    End If
End Sub
47
Kano

IsEmpty gibt True zurück, wenn die Variable nicht initialisiert ist oder explizit auf Leer gesetzt ist. Andernfalls wird False zurückgegeben. False wird immer zurückgegeben, wenn der Ausdruck mehr als eine Variable enthält. IsEmpty gibt nur für Varianten sinnvolle Informationen zurück. ( https://msdn.Microsoft.com/de-de/library/office/gg264227.aspx ). Sie müssen also jede Zelle in Reichweite separat prüfen:

    Dim thisColumn as Byte, thisRow as Byte

    For thisColumn = 1 To 5
        For ThisRow = 1 To 6
             If IsEmpty(Cells(thisRow, thisColumn)) = False Then
                 GoTo RangeIsNotEmpty
             End If
        Next thisRow
    Next thisColumn
    ...........
    RangeIsNotEmpty: 

Natürlich gibt es hier mehr Code als in Lösung mit CountA-Funktion, die nicht leere Zellen zählen, aber GoTo kann Schleifen unterbrechen, wenn mindestens eine nicht leere Zelle gefunden wird, und der Code wird schneller ausgeführt, insbesondere wenn der Bereich groß ist und Sie diesen Fall erkennen müssen. Auch dieser Code ist für mich einfacher zu verstehen, was er tut, als mit der Excel-CountA-Funktion, die keine VBA-Funktion ist.

3
Dim M As Range

    Set M = Selection

If application.CountIf(M, "<>0") < 2 Then
    MsgBox "Nothing selected, please select first BOM or Next BOM"
Else

'Your code here

End If

Aus Erfahrung habe ich gerade gelernt, dass Sie Folgendes tun könnten:

If Selection.Rows.Count < 2 
Then End If`

Klarstellung etwas später (ich arbeite gerade) 

3
DeerSpotter

Wenn Sie sich in einer Situation befinden, in der Sie unbedingt jede Zelle in einem Bereich durchlaufen müssen, anstatt CountA zu verwenden, ist es viel schneller, diesen Bereich zuerst in ein Array zu konvertieren und die Werte dieses Arrays zu schleifen, als in vielen Bereichen/Schleifen. Zellen. 

Function IsRangeEmpty(ByVal rng As Range) As Boolean

    'Converts a range to an array and returns true if a value is found in said array

    Dim area As Range
    For Each area In rng.areas

        Dim arr As Variant
        arr = area.value

        For i = LBound(arr, 2) To UBound(arr, 2)        'columns
            For j = LBound(arr, 1) To UBound(arr, 1)    'rows

                'if cell is not empty then
                If Len(Trim(arr(j, i))) > 0 Then
                    IsRangeEmpty = False
                    Exit Function
                End If

            Next j
        Next i

    Next area

    IsRangeEmpty = True

End Function

Beispiel für die Verwendung:

Sub Test()
    Debug.Print IsRangeEmpty(Range("A38:P38"))
End Sub

Wenn Range("A38:P38") leer ist, wird True ausgegeben. Andernfalls würde False ausgegeben.

1
Marcucciboy2

Eine andere mögliche Lösung. Zählen Sie leere Zellen und subtrahieren Sie diesen Wert von der Gesamtanzahl der Zellen

Sub Emptys()

Dim r As range
Dim totalCells As Integer

'My range To check'
Set r = ActiveSheet.range("A1:B5")

'Check for filled cells'
totalCells = r.Count- WorksheetFunction.CountBlank(r)


If totalCells = 0 Then
    MsgBox "Range is empty"
Else
    MsgBox "Range is not empty"
End If

End Sub
0
DJK

Dies ist nur eine kleine Ergänzung zu @TomM'sAntwort /Eine einfache Funktion, um zu überprüfen, ob die Zellen Ihrer Auswahl leer sind

Public Function CheckIfSelectionIsEmpty() As Boolean
   Dim emptySelection As Boolean:emptySelection=True
   Dim cell As Range
   For Each cell In Selection
       emptySelection = emptySelection And isEmpty(cell)
       If emptySelection = False Then
          Exit For
       End If
   Next
   CheckIfSelectionIsEmpty = emptySelection
End Function
0
LiNKeR
Dim cel As Range, hasNoData As Boolean

    hasNoData = True
    For Each cel In Selection
        hasNoData = hasNoData And IsEmpty(cel)
    Next

Dies gibt True zurück, wenn keine Zellen in Selection Daten enthalten. Ersetzen Sie für einen bestimmten Bereich einfach RANGE(...) für Selection.

0
TomM