sábado, 24 de julio de 2010

Excel vba - Metodo SpecialCells


Excel vba - Metodo SpecialCells

Este metodo(SpecialCells) es gran ayuda para devolvernos referencias a rangos con determinadas caracteristicas :

Por ejemplo podemos obtener Mediante el metodo SpecialCells referencias a rangos :

Esta seria la sintaxis para obtener un objeto rango de las celdas


El rango de celdas es de donde se quiere buscar las celdas con determinadas carateristicas

Rango(rangodeCeldas).SpecialCells(Type, Value)

Los Parámetros serian los sgtes :

Type : parametro obligatorio que represnta el tipo de Celdas que se incluirán.
----
Value :parametro Opcional
-----

Si el paramtro "Type" es (xlCellTypeConstants) o (xlCellTypeFormulas), el parametro "Value" servira para determinar que tipos de celdas que se incluirán en el rango devuelto.

a)Las constantes para los tipos de celdas a buscar(XlCellType)

xlCellTypeAllFormatConditions. Celdas con cualquier formato.
xlCellTypeAllValidation. Celdas con criterios de validación.
xlCellTypeBlanks. Celdas vacías.
xlCellTypeComments. Celdas que contengan notas.
xlCellTypeConstants. Celdas que contengan constantes.
xlCellTypeFormulas. Celdas que contengan fórmulas.
xlCellTypeLastCell. La última celda del rango.
xlCellTypeSameFormatConditions. Celdas que tengan el mismo formato.
xlCellTypeSameValidation. Celdas que tengan los mismos criterios de validación.
xlCellTypeVisible. Todas las celdas visibles.


b)LAs Constantes para el segundo paarmetro que es opcionl (XlSpecialCellsValue) Valor
Este segundo parametyro nos permitira refinar nuestra busqueda de celdas especiles filtrando por :

xlErrors
xlLogical
xlNumbers
xlTextValues

ejemplo
--------
Set rng = Range(TuRango).SpecialCells(xlCellTypeFormulas, xlErrors) 'formulas con error

MsgBox rng.Address

----------------------------------

Ejemplo Excel Vba code SpecialCells


Sub VbaExcelCode_SampleSpeciallCells()

'MacroVbaExcel :Jesus Martin Serrano Panduro

Dim rng As Range
Dim TuRango As String

TuRango = "A1:C13"

Set rng = Range(TuRango).SpecialCells(xlCellTypeFormulas, xlNumbers) 'formulas

MsgBox rng.Address

Set rng = Range(TuRango).SpecialCells(xlCellTypeFormulas, xlErrors) 'formulas con error

MsgBox rng.Address

Set rng = Range(TuRango).SpecialCells(xlCellTypeComments) 'celdas con comentario

Debug.Print rng.Address

'Nota :
'mediante debug print puedes escribir el valor de una variable ,etc en al ventana de inmediato
'Para poder ver la ventana de inmediato estando sobre el editor vba debes presionar control G y listo
'Es especialmente util para analizar los valores que toma una variable en el procedimiento vba

End Sub

Sub VbaExcelCode_formatEmptyCells()

'MacroVbaExcel :Jesus Martin Serrano Panduro

ActiveSheet.UsedRange.SpecialCells _
(xlCellTypeBlanks).Interior.Color = 3732

'Nota :En caso no existan las celdas se te devolvera el error 1004 no se encontraron celdas
'debes validar que hacer en ese caso para no mostrar el mensaje en crudo.
End Sub


Sub vbaExcelCode_rowTestCells()

'MacroVbaExcel : Jesus Martin Serrano Panduro

'prueba las sgtes rutinas en Excel 2007 0 2010 - Filas de la version del Excel (1048576)
'como veras esto trabajaba correctamente en Excel 2003 -Filas de al versión del Excel (65536) o anterior por que no habian tantas filas
'esta es otra razon más par que restringas tus busquedas de celdas al rango usado o celdas especiales

MsgBox ActiveSheet.UsedRange.Cells.Count
MsgBox ActiveSheet.Cells.Count 'error 6 desbordamiento

End Sub


Sub VbaExcelCode_findLastCells()

'MacroVbaExcel: Jesus Martin Serrano Panduro

'para terminar el specialcells más simple para que quede claro
'activa la ultiam celda usada

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate


End Sub

3 comentarios:

Anónimo dijo...

Usefull

asdas dijo...

y si no encuentra coincidencias..
Arroja error
Como se puede gestionar eso.???

Excel dijo...

Podrias colocar

on error resume next

'para que tu decidas como tratar el error en las siguientes lineas

y gestionar el código del error

if err.number= 4334 then

msgbox "Celdas no encontradas"
'o alguna acción complementaria que realice tu macro si no encuentra las celdas

endif


' es un ejemplo