Archive

Posts Tagged ‘EXCELeINFO’

EXCELeINFO addin 2.4.0 – Visualizar Configuración regional y de idioma desde Excel con Application.International

December 1, 2012 1 comment

Hace días me hice la pregunta: Para qué ir al Panel de control para ver mi configuración de regional ? Por ejemplo, qué separador de listas tengo configurado, qué idioma tengo configurados, qué formato de fecha tengo.

Me di a la tarea de comprender el funcionamiento de la propiedad International del objeto Application, y me di cuenta que es más sencillo de lo que podría parecer.

Si por ejemplo, queremos saber el símbolo de moneda que maneja nuestro Excel, sólo ejecutamos:

Sub Moneda()
MsgBox Application.International(xlCurrencyCode)
End Sub

Imagen del addin

image

image

Listado de configuraciones que muestra el addin

Configuración de país o región

Constante Significado

xlCountryCode

Versión de país o región de Microsoft Excel.

xlCountrySetting

Configuración actual de país o región en el Panel de control de Windows.

xlGeneralFormatName

Nombre del formato numérico General.

Moneda

Constante Significado

xlCurrencyCode

Símbolo de moneda.

xlCurrencyDigits

Número de decimales que van a utilizarse en los formatos de moneda.

xlNoncurrencyDigits

xlNoncurrencyDigits

Fecha y hora

Constante Significado

xl24HourClock

Muestra si el formato de hora que se utiliza es de 24 horas o si es de 12 horas.

xlDateOrder Orden de los elementos de la fecha.

xlDateSeparator

Separador de fecha (/).

Separadores

Constante Significado

xlDecimalSeparator

Separador decimal.

xlListSeparator

Separador de lista.

xlThousandsSeparator

Separador de miles o cero.

:: Descargar EXCELeINFO add-in 2.4.0

Crear categoría y descripción para funciones personalizadas UDF en Excel

November 24, 2012 8 comments

En un artículo del 2010 explicaba cómo Crear funciones personalizadas en Excel y tener nuestras propias funciones escritas por nosotros mismos.

En esta ocasión comparto un código en vba que nos permitirá crear una categoría personalizada y agrupar nuestras UDF’s (User Define Function), así como darles una descripción a los argumentos que tendrán y a la misma función.

Tendremos 3 partes principales para tener la categoría y las descripciones de la función:

  1. Mandar llamar la función desde el evento Open del archivo.
  2. El código que asignará los elementos de la función.
  3. El código de la función.

Código

En el evento Open del objeto ThisWorkbook asignamos el código siguiente.

Private Sub Workbook_Open()
    Call DescribeFunctionEXCELeINFOCOLORCELDA
End Sub

En un módulo normal.

'El código que describe la categoría de la función y sus argumentos
Private Sub DescribeFunctionEXCELeINFOCOLORCELDA()
    Dim NombreFunc As String        'nombre de la función
    Dim DescFunc As String          'descrición de la función
    Dim Categoria As String         'categoría de la función
    Dim DescArg(1 To 3) As String   'descripción de los argumentos
    '
    NombreFunc = "EXCELeINFOCOLORCELDA"
    DescFunc = "Devuelve el índice de color de la celda seleccioada"
    Categoria = "EXCELeINFO"    'Text category
    DescArg(1) = "Es la celda de donde se obtendrá el índice de color"
    '
    Application.MacroOptions _
            Macro:=NombreFunc, _
            Description:=DescFunc, _
            Category:=Categoria, _
            ArgumentDescriptions:=DescArg
End Sub
'
'Función personalizada UDF
Function EXCELeINFOCOLORCELDA(celda As Range)
'
' EXCELeINFOCOLORCELDA Función
' Devuelve el color de la celda de la celda seleccionada
'
    EXCELeINFOCOLORCELDA = celda.Interior.ColorIndex
    '
End Function

Imágenes

image

image

Permitir 3 intentos de contraseña para usar un archivo de Excel antes de cerrarse

November 21, 2012 1 comment

En un post anterior llamado Simular acceso con usuario y password en Excel con formulario vba presentaba un ejemplo en el que teníamos un formulario que nos solicita usuario y contraseña. Tanto el usuario como la contraseña los tomaba de una tabla y sólo cuando ambos coincidían, permitía cerrar el formulario y continuar.

En este ocasión, y tomando en cuenta el post mencionado, comparto un formulario que se lanza al momento de abrir nuestro archivo de Excel y nos solicita una contraseña para usarlo.

Cómo funciona

A diferencia del otro formulario, este sólo pide una clave de acceso para poder usar el archivo. En caso de que intentemos en 3 ocasiones una clave y ésta sea inválida, se cerrará el archivo.

Código

'Definimos la variable pública Intentos
Public Intentos As Byte
'
'Validar la clave
Private Sub CommandButton1_Click()
If Me.txtPass.Value = 1234 Then
    MsgBox "Contraseña válida. Se cerrará el formulario.", _
        vbInformation, "EXCELeINFO"
    Unload Me
Else
    Intentos = Intentos + 1
    MsgBox "Contraseña inválida. Llevas " & Intentos & " intento(s).", _
        vbInformation, "EXCELeINFO"
    Me.txtPass.SetFocus
    Me.txtPass.Value = ""
End If
If Intentos = 3 Then
    MsgBox "Has cumplido 3 intentos. Aquí se cerrará el archivo Excel.", _
        vbInformation, "EXCELeINFO"
    Unload Me
    ActiveWorkbook.Close SaveChanges:=False
Else
End If
End Sub
'
'Formateamos los objetos del formulario
Private Sub UserForm_Initialize()
With Me
    .txtPass.PasswordChar = "*"
    .txtPass.MaxLength = 8
End With
End Sub
'
'Evitamos que use la x para cerrar el formulario
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
    Cancel = True
    MsgBox "Por favor, ingresa una contraseña.", vbInformation, "EXCELeINFO"
End If
End Sub

Animación del formulario en acción

EXCELeINFO - 3 intentos de contraseña

:: Descargar el ejemplo

Guardar archivo de Excel solo si se ingresa contraseña

November 19, 2012 4 comments

En el artículo llamado Macro para impedir que se guarde un archivo de Excel exponíamos una macro que no te permitía guardar cambios en un archivo ni guardar una copia del mismo.

El código tiene la debilidad de que si queremos, como creadores, guardar cambios que no querramos que otros modifiquen, debíamos deshabilitar macros para hacer los cambios y luego volver a habilitarlas.

La mejora

Mediante la función InputBox lanzamos un diálogo que nos permite introducir una contraseña, y sólo si ingresamos la adecuada, nos permitirá guardar cambios o guardar una copia.

Código

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Pass = "12345"
    Confirma = InputBox("Escribe una contraseña para continuar.", _
        "EXCELeINFO - Guardar")
    If Confirma = Pass Then
    Else
        MsgBox "No tienes permitido guardar el archivo.", vbCritical, _
            "EXCELeINFO"
        Cancel = True
    End If
End Sub

Animación de la macro en ejecución

guardar archivo de Excel solo si se ingresa contraseña

Pedir confirmación antes de ejecutar una macro en Excel

November 15, 2012 2 comments

Cuando escribimos una macro, siempre lo hacemos a conciencia y sabiendo los cambios que hará, pero para el usuario final, siempre debemos dejarle la decisión de aplicar los cambios o no.

Pareciera algo contradictorio, pero para cualquier aplicación, siempre es recomendable enviar un aviso informando al usuario que está a punto de ejecutar una acción y lo dejamos a su consideración.

El siguiente código, dentro de su simpleza contiene la lógica de decidir si sí o no continuamos la ejecución de la macro.

Cómo funciona

Primeramente asignamos una variable llamada Resp que es la que almacenará el resultado de la clase MsgBox, cuyos  valores serán Si o No (vbYes, vbNo).

La lógica del código es:

Si Resp es igual a SI, entonces ejecuta el código

Sino

Muestra un mensaje o ejecuta otro código

Código de la macro

Sub Confirmar()
Dim Resp As Byte
Resp = MsgBox("Deseas continuar con la ejeción de la macro?", _
    vbQuestion + vbYesNo, "EXCELeINFO")
If Resp = vbYes Then
    MsgBox "Se eligió continuar...", vbExclamation, "EXCELeINFO"
    'Aquí se ejecutaría el código
Else
    MsgBox "Se eligió cancelar...", vbCritical, "EXCELeINFO"
End If
End Sub

Animación de la macro en ejecución

Pedir confirmación antes de ejecutar

Categories: Excel, Macros, Trucos Tags: , , ,

Nuevas funciones Excel 2013: SI.ND combinada con BUSCARV

November 12, 2012 3 comments

Una de las funciones que vienen con el lanzamiento de Excel 2013 es SI.ND, cuya descripción es: “Devuelve el valor que especificas, si la expresión se convierte en #N/A. De lo contrario, devuelve el resultado de la expresión”.

La función SI.ERROR

Excel 2010 introdujo la función SI.ERROR para devolver un valor especificado, en caso de que la fórmula devuelva #N/A, #¡DIV/0!, #¿NOMBRE?, pero la cuestión es que arrojará un resultado sin detectar cuál fue el error devuelto.

Cómo funciona SI.ND con BUSCARV

La función con la cual se combinará es con la famosa BUSCARV. Dicha función devuelve precisamente #N/A cuando un valor no se encuentra en la lista, lo cual se vuelve de mucha utilidad sin tomamos en cuenta que dicha función es una de las más utilizadas entre los usuarios de Excel.

Animación de la función en ejecución

SI ND

Crear fórmulas Excel con macros independientemente del idioma o separador de argumentos, coma o punto y coma

November 8, 2012 2 comments

Cuando queremos insertar fórmulas en Excel mediante macros, nos encontramos con 2 disyuntivas:

  1. Usar el nombre de la función mdiante lenguaje vba, es decir, su parte en inglés que sea compatible con cualquier Excel en cualquier idioma.
  2. Escribir la fórmula en nuestro propio lenguaje, cual sea que este fuera, adecuando el separador de argumentos: coma (,) o punto y coma(;), pero sólo compatible con otro Excel en nuestro idioma

Insertar fórmulas mediante vba aplicables a Excel en cualquier idioma

Supongamos que necesitamos insertar en una celda la función BUSCARV desde vba. Si esta macro se utilizará en otras versiones de Excel con diferentes idiomas al que usamos, lo mejor será usar los nombres en inglés.

Desde vba usamos la propiedad FORMULA del objeto RANGE:

Range("F6").Formula = "=VLOOKUP(E6,A1:B12,2,0)"

Insertar fórmulas mediante vba aplicables a nuestro idioma

La misma función BUSCARV la deseamos escribir desde vba en nuestro mismo idioma. Para eso debemos hace uso de la propiedad FORMULALOCAL del objeto RANGE.

Range("F6").FormulaLocal = "=BUSCARV(E6,A1:B12,2,0)"

El caso del separador de argumentos cuando es coma o punto y coma

El separador de listas o argumentos varía dependiendo de la configuración regional de nuestro sistema. Por ejemplo, es coma cuando la cofiguración es el Español y punyo y coma cuando la configuración en el inglés. Pero como no nos interesa escribir fórmulas para cada tipo de región, mejor hacemos uso de la propiedad INTERNATIONAL del objecto APPLICATION, para meter a una variable el separador que nos detecte Excel.

Para obtener el separador de argumentos configurado en el Panel de control usamos la siguiente instrucción:

Application.International(xlListSeparator)

Y si dejamos el separador como variable, las instruccones quedarían así:

'Obtener el separador de argumentos
Separador = Application.International(xlListSeparator)
'Para fórmula multi idioma
Range("F6").Formula = "=VLOOKUP(E6" & Separador & "A1:B12" & Separador & _
    "2" & Separador & "0)"
'Para fórmula en nuestro idioma
Range("F6").FormulaLocal = "=BUSCARV(E6" & Separador & "A1:B12" & Separador & _
    "2" & Separador & "0)"