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

lunes, 19 de julio de 2010

Ultima celda usada(LastCell) en el Rango (1)






'Buscar la ultima celda usada(LastCell) en el Rango I

Sub Excel_Macro_ultim_cell_antes_de_una_celdaEnblanco()
'Mediante esta macro se podra seleccionar mediante codigo vba la ultima celda
'usada en la columna antes de una celda en blanco

'como se observa en la imagen del Excel se ha seleccionado la celda
'E5 que es justo la celda antes de la primera celda vacia (E6)
'con este parametro (xlDown) buscara la celda con direccion hacia abajo

Range("E1").End(xlDown).Select


End Sub





Sub Excel_Macro_LastCellInColumn()
'mediante esta macro podra seleccionar la ultima celda usada
'E10 tal como se aprecia en la imagen

Range("E65536").End(xlUp).Select

End Sub


Sub Excel_Macro_Ultiam_celda_antes_deBlanco()
'mediante esta macro podra realizar la busqueda de
'la ultima celda usada antes de una celda en blanco
'pero esta vez con direccion a la derecha (xlToRight) de su celda inicial

Range("A2").End(xlToRight).Select

End Sub

Sub UltimaCeldaUsada()
'Con esta macro se puede hallar la ultima celda usada
'en la Hoja

ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select

End Sub

sábado, 10 de julio de 2010

Enviar libro adjunto(macro excel vba)

Option Explicit
'Mediante este excel codigo vba de ejemplo podemos enviar el libro activo al email
'lo sgte que podrias hacer es crear un boton en el ribbon o un boton en una barra del Excel
'y desde ese botón enviar directamente un libro o una hoja

'Macro enviar el libro activo
Sub Prc_SendTheActiveWorkbook()
ActiveWorkbook.SendMail Recipients:="EXCELVBASAMPLE@Sample.com", Subject:=" EXCELVBASAMPLE "
End Sub

'Enviar solo primera hoja como adjunto
Sub prc_Send_one_Sheet_From_ActiveWorkbook()
ActiveWorkbook.Sheets(1).Copy
With ActiveWorkbook
.SendMail Recipients:="EXCELVBASAMPLE@Sample.com", Subject:=" SAMPLE EXCEL VBA "
.Close SaveChanges:=False
End With
End Sub

jueves, 3 de junio de 2010

Ejecutar macros de varios libros

'Ejecutar macros de diferentes libros

En ocasiones puede ser util tener nuestras macros agrupadas en diferentes libros de Excel o complementos para Excel

La sgte macro "Exe_From_otroAddin" nos muestra lo sencillo que resulta ejecutar macros externas


Sub exe_From_otroAddin()

Dim MyTool As String
Dim NameFile As String
Dim NameProcedure As String

NameFile = "Addin_new.xla" 'Primero Guardamos el nombre del Libro o complemento donde se encuentra la macro

NameProcedure = "Macro_otroAddin" 'Indicamos el nombre de la macro de Addin_new.xla


MyTool = "'" & NameFile & "'!" & NameProcedure 'Finalmente Concatenamos el nombre del complemento para Excel(NameFile)
con el nombre de la macro(NameProcedure)



Application.Run MyTool 'ejecutar la macro externa


End Sub

domingo, 28 de marzo de 2010

Chart area



'Este es un ejemplo de como cambiar el tamaño de chart area en varios charts

Sub SetChrtSize_Test()

Dim chtobj As ChartObject
Dim objChart As Chart

'cambiar el tamaño de chart area en el grafico activo
ActiveChart.ChartArea.Width = 1000
ActiveChart.ChartArea.Height = 80
ActiveChart.ChartArea.Interior.Color = 255

'Cambiar el tamaño de plot area
ActiveChart.PlotArea.Width = 1200
ActiveChart.PlotArea.Height = 800
ActiveChart.PlotArea.Interior.Color = 577

'Cambiar el tamaño de legend
ActiveChart.Legend.Interior.Color = 255
ActiveChart.Legend.Width = 33

'cambiar el tamaño de chart area en todos los graficos de la hoja activa (1)
For Each chtobj In ActiveSheet.ChartObjects
chtobj.Width = 250
chtobj.Height = 170
Next



End Sub