jueves, 5 de enero de 2017

Excel VBA: Operaciones con el objeto Application Excel

'Mediante las siguientes instrucciones podras operar con el objeto aplicación de Excel

'El nombre del usuario de Excel
?Application.UserName
Jesus


'La ruta de Excel
?Application.Path
D:\AppData_temporal\Win7\Office2016_64\Office16


'Procesar un string con evaluate
?Application.Evaluate("55+88")


'Contar los Addins instalados
?Application.AddIns.Count
 4


'Contar los ComAddins instalados
?Application.COMAddIns.Count
 12


'Verificar el tipo de calculo ..manual o auto,etc
?Application.Calculation
-4105


'verificar la actualizacion de pantalla
?Application.ScreenUpdating
Verdadero


'la ruta por defecto de las plantillas
?Application.TemplatesPath
C:\Users\Jesus\AppData\Roaming\Microsoft\Plantillas\


'la ruta por defecto de complementos
?Application.UserLibraryPath
C:\Users\Jesus\AppData\Roaming\Microsoft\Complementos\


'nombre de la aplicacion
?Application.Name
Microsoft Excel


'Separador de rutas como C:\...D:\,etc
?Application.PathSeparator
\

'La version de Excel ...en este caso Excel 2016
?Application.Version
16.0

'El sistema operativo---y si es de 32 o 64 bits
?Application.OperatingSystem
Windows (64-bit) NT 6.01





miércoles, 21 de diciembre de 2016

Excel VBA Macro: Optimizar Macros en Excel II

-Con Menos código la macro se ejecutara más rápido siendo más fácil de entender y modificar. Sera más rápida de ejecutar y mejora la experiencia del usuario.

-Analiza la lógica antes de programar

-Usar la instrucción WITH para resumir el código además de que esto facilita cambios.

-Evitar la instrucción. SELECT casi nunca es necesario para operar en algún objeto.

-Evitar loops tal vez alguna función incorporada del Excel o el VBA ya hace lo que buscas...
no traten de reinventar la pólvora…sobre todo porque no se ejecutará más rápido que una
función nativa .

Usar Option Explicit al inicio de los módulos para obligar a declarar las variables.


Evitar el uso de Variant.

martes, 13 de diciembre de 2016

Excel Vba Macro: Optimizar Macros En Excel


Una primera medida puede ser desactivar la actualización de pantalla 
...en las primeras líneas

 Application.screenupdating=False
No debes olvidar colocarlo en True al finalizar el procedimiento
 Application.screenupdating=True

Apagar los eventos automáticos
Lo hacemos con la instrucción: 
Application.EnableEvents=False
Evita ejecutar macros de evento

Apagar visualización de saltos de página
Lo hacemos con la instrucción: ActiveSheet.DisplayPageBreaks = False
Esto  evita problemas entre macros Excel 2003 vs. 2007/2010



Sub Macro_Jes_Test

'Así debiera comenzar tu macro
Application.screenupdating=False

Application.calculation=xlCalculationManual
Application.EnableEvents=False

'Code ccc
Code ddd
'Code eee

'Así  debiera  finalizar

Application.screenupdating=True
Application.calculation=xlCalculationAutomatic
Application.EnableEvents=true

End Sub

martes, 6 de diciembre de 2016

Proteger y Desproteger Hojas VBA - Excel


'La siguiente macro permite proteger y desproteger todas las hojas de un libro

Const myClave = "MyClave123"

'for each
'Protect---> clave
'unprotect--->clave
'...

'excel vba macro:proteger todas las hojas
Sub protegerHojas()

Dim sht As Worksheet

For Each sht In Sheets

sht.Protect Password = myClave

Next

End Sub

'excel vba macro:Desproteger todas las hojas
Sub DesprotegerHojas()

Dim sht As Worksheet

For Each sht In Sheets

sht.Unprotect Password = myClave

Next

End Sub



lunes, 28 de noviembre de 2016

Excel VBA - Usar Compare Text

Usar compare text

Incluya la Opción compare text en la parte superior de cada módulo
para comparar texto sin importar las mayúsculas o minúsculas
*El valor por defecto diferencia entre mayúsculas y minúsculas

Al comparar el valor de una celda hará diferencia entre  “YES”, o “Yes” o “YeS”.

Por defecto en VBA las comparaciones son binarias. Ósea, "sí" ≠ "Sí

De igual forma podrías colocar Ucase  al  valor de la celda a comparar. Así tenemos los 2 valores en mayúsculas.

If UCASE(Target. Value) = "SI" Then

'hacer esto

End if

De todas formas me parece, más simple colocar

Option Compare Text


en la primera línea de cada módulo

miércoles, 16 de noviembre de 2016

VBA Tips

1-Abrir la ventana de inmediato, ubíquese sobre el explorador de proyectos VBA presionar CTRL+G
Esta ventana nos permite inspeccionar el valor de las variables sin tener que ejecutar una macro.

?numeroValue

2-Abrir explorador de objetos, presionar F2
Esta ventana nos permite conocer toda la jerarquía de objetos de Excel VBA
ObjetoParent.ObjetoHijo.ObjetoHijoHijo

Realice las siguientes pruebas en la ventana de inmediato
?ActiveCell.Parent.parent.parent.name
Microsoft Excel
Libro1
Hoja1

Luego corrobore la jerarquía en el explorador de objetos F2

3-Evitar que se cierre un libro habilitado para macros
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
MsgBox "No se puede cerrar Excel."

End Sub


lunes, 14 de noviembre de 2016

Excel 2016 - Cómo solucionar el error "falta api-ms-win-crt-runtime-l1-1.0.dll" para Excel

Mensaje de error en Excel 2016-Instalación: El programa no se puede iniciar porque api-ms-win-crt-runtime-l1-1.0.dll falta en su computadora ...

Cómo solucionar el error "api-ms-win-crt-runtime-l1-1.0.dll falta" para Excel 2016:
1.Cerrar Excel. Intente instalar todas las actualizaciones de Windows pendientes. Vaya a Inicio; Panel de control; Windows Update ...Revise las actualizaciones e instale todas las actualizaciones pendientes y reinicie el equipo.
2. Intente volver a instalar o reparar la office (Excel) para solucionar este problema,
3.Solución recomendada:
Ir...Actualización para Universal C Runtime en Windows 
https://support.microsoft.com/en-us/kb/2999226
Seleccione la actualización para su versión de Windows (32 o 64 bits) ... y finalmente reinicie su Excel.