No sé si es posible, pero quiero verificar si un rango en Excel está vacío. Entonces, ¿cómo puedo escribir si:Excel Visual Basic - detectar si el rango está vacío
Range("A38":"P38")
¿Está vacío en el código VBA?
Gracias de antemano.
No sé si es posible, pero quiero verificar si un rango en Excel está vacío. Entonces, ¿cómo puedo escribir si:Excel Visual Basic - detectar si el rango está vacío
Range("A38":"P38")
¿Está vacío en el código VBA?
Gracias de antemano.
Encontré una solución de los comentarios que recibí.
Sub Empty()
If WorksheetFunction.CountA(Range("A38:P38")) = 0 Then
MsgBox "Empty"
Else
MsgBox "Not Empty"
End If
End Sub
Atención: ** "Empty()" ** no es un nombre de procedimiento válido. @ darren-bartrup-cook, mi edición propuesta no se desvía de la intención original de la publicación y conserva sus objetivos. –
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
De la experiencia que acabo de aprender que podría hacer:
If Selection.Rows.Count < 2
Then End If`
Aclaración ser proporcionado un poco más tarde (en este momento estoy trabajando)
Gracias por la respuesta, ¿podría también proporcionarnos un poco de aclaración sobre lo que realmente está haciendo la comparación para los futuros visitantes? EDITAR: También es un poco complicado entender cómo encaja su edición con el ejemplo original. – Thor
@Thor cuando busca una solución al problema en Google, obtiene esta página. Pero esta página no responde a ese problema y por eso respondí ese problema. Creo que las personas aquí no solo votan por cosas. Puedo ver que esto ya ayudó a algunas personas. – DeerSpotter
¿Sigues trabajando? –
IsEmpty devuelve True si el la variable no está inicializada o está establecida explícitamente en Vacío; de lo contrario, devuelve False. False siempre se devuelve si la expresión contiene más de una variable. IsEmpty solo devuelve información significativa para las variantes. (https://msdn.microsoft.com/en-us/library/office/gg264227.aspx). Por lo que debe comprobar cada célula de rango por separado:
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:
Por supuesto que aquí son más código que en solución con la función CONTARA que no cuenta las celdas vacías, pero GoTo puede interrumpirla bucles si se encuentra al menos uno no celda vacía y haga su código más rápido, especialmente si el alcance es grande y necesita detectar este caso. También este código para mí es más fácil de entender que lo que está haciendo, que con la función Excel CountA que no es función VBA.
El código de macro de Excel (no sé si la compilación es posible) demora un tiempo cuando tienes una gran cantidad de iteraciones. Su solución es necesaria si ya ha determinado que alguna celda en el rango no está vacía y desea procesarla, pero la comprobación de determinar si un rango está vacío (es decir, si su código es incluso necesario) debería ser más rápido y tal vez mucho más rápido usando la respuesta aceptada (CountA).El uso de una única función "nativa" para un bucle VB que hace lo mismo tiende a generar tiempos de ejecución más rápidos. –
esto no siempre funciona. Por ejemplo, si tiene un rango que no es una selección continua luego de una selección (digamos que su selección de rango omite 1 celda, omite 5 celdas, regresa a 1 celda, etc.), entonces se producirá un error. – DeerSpotter
Otra posible solución. Recuento de células vacías y restar ese valor a partir del número total de células
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
Consultar la API (este es el PIA, pero el COM que se utiliza en VBA debe ser similar): http://msdn.microsoft.com /en-us/library/microsoft.office.interop.excel.range_members.aspx (la propiedad Count, tal vez) –
Soy bastante nuevo para VBA, así que esto no tiene mucho sentido para mí :) – Kano
'Rango ("A38: P38"). Contar', ver http://msdn.microsoft.com/en-us/library/aa139976%28v=office.10%29.aspx –