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.
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
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.
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)
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.
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
Dies ist nur eine kleine Ergänzung zu @TomM's
Antwort /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
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
.