Mostrando entradas con la etiqueta macros. Mostrar todas las entradas
Mostrando entradas con la etiqueta macros. Mostrar todas las entradas

martes, 26 de junio de 2012

Reemplazar punto y coma por Enter con macros

hola, aqui les traigo un truco que encontre por Internet muy util para reemplazar un punto y coma por enter, por ejemplo si tuvieran correos de la siguiente forma:

borre los correos para proteger la identidad de sus dueños, pero imaginen si tuvieran una lista de 20000 correos separados por punto y coma pero deseamos que esten uno debajo de otro para hacer una lista o cual sea el motivo, seria muy trabajoso separarlos uno a uno, bien para estos casos de listas de correo lo que hacemos es copiar esta lista a Word, una vez aqui pulsamos Alt+F11, se nos abrira el editor de Visual Basic, una vez aqui vamos a Insertar->Modulo

una vez aqui se nos abrira una ventana, lo siguiente que haremos sera escribir esta macro:

Sub reemplazar()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "; "
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
antes de ejecutar esta macro asegurense de haber seleccionado en el Word el texto que desean modificar de lo contrario no pasara nada. Bueno, una vez seleccionado presionan F5 o presionan el triangulo verde y quedaria asi:


en caso no sea punto y coma sino coma u otro caracter solo modifican estas 2 lineas
.Text = "; "
.Replacement.Text = "^p"
^p este caracter es el enter o salto de linea. Aqui colocan el caracter por el que deseen reemplazar, espero les sirva.

jueves, 1 de marzo de 2012

Convertir celda con texto a letra capital en Excel 2007 con macros

esto lo hacemos en caso de que deseemos cambiar el texto a letra capital en varias celdas.
primero vamos a Vista->Macros->Grabar Macro.
Una vez aqui nos saldra una ventana como esta:
en macro3 cambiamos al nombre que deseemos cambiar la macro podria ser CapitalLetter y en Metodo abreviado sera el atajo de teclado que vamos a usar para llamar a la macro (en la casilla en blanco pongan una letra).
ahora presionen el boton de Stop que esta abajo de Libro1.
ahora presionamos ALT+F11 para ir al Editor de Visual Basic. Una vez aqui vamos a la Ventana de Proyectos y vamos a la carpeta Modulos y damos doble click en Modulo1.
una vez aqui nos saldra una ventana como esta.
una vez aqui ponemos antes de End Sub este codigo.
jaxx = ActiveCell.Value 
If VarType(jaxx) = 8 Then 
ActiveCell.Value = WorksheetFunction.Proper(jaxx) 
End If
ActiveCell.Offset(1, 0).Select
OJO que esto lo hacemos habiendo puesto STOP en el paso que esta arriba.
Ahora cierran el editor y prueben escribiendo un texto en una celda y presionando el atajo de teclado que les dije anteriormente deberia salirles asi (en la figura que veran abajo escribi un texto y presione Ctrl+c y resulto)
espero les haya sido util este ejemplo.

Cambiar texto de mayusculas a minusculas o al reves en Excel 2007 con macros

en este ejemplo explicare como pasar un texto de mayuscula a minuscula, y le asignaremos un atajo de teclado como en los ejemplos anteriores que he posteado.
Lo que hacemos primero es abrir una hoja de Excel y vamos a Vista->Macros->Grabar nueva macro.
Elegimos un nombre podemos ponerle Upper_to_Lower
y en metodo abreviado es el atajo de teclado que vamos a usar para llamar a la macro.
Aceptamos y detenemos la grabacion (podemos ver que abajo hay un boton de Stop, le damos click y detenemos la grabacion).
Ahora presionamos ALT+F11 para abrir el Editor de Visual Basic. Una vez aqui abrimos la carpeta Modulos y damos doble click en Modulo 1.
les aparecera una ventana con un texto como este:
Sub Upper_to_Lower()
'
' Upper_to_Lower Macro
' by XSaint
'
' Acceso directo: CTRL+x
'
End Sub
como ven aqui solo contiene comentarios, no tiene codigo. Lo que vamos a hacer es implementar esta macro con el siguiente codigo. Para esto nos ubicamos una linea antes de End Sub y ponemos este codigo:
stone=ActiveCell.Value
If VarType(stone)=8 Then
ActiveCell.Value=UCase(stone)
End If
ActiveCell.Offset(1,0).Select 
quedando asi:
Cerramos el Editor y automaticamente regresamos al Excel que dejamos abierto. Ahora que la macro ya quedo implementada podemos utilizarla.
Ahora si queremos pasar de minusculas a mayusculas hacemos todos los pasos que hicimos anteriormente, cambiando el nombre de la macro y el atajo de teclado que puede ser la combinacion de teclas que deseen menos el Ctrl+x que pusimos arriba.
y el codigo que van a poner es este:
basement = ActiveCell.Value
If VarType(basement) = 8 Then
ActiveCell.Value = LCase(basement)
End If
ActiveCell.Offset(1, 0).Select
como ven se parece mucho al que implementamos anteriormente salvo el metodo que estamos llamando que en este caso es LCase.
y podemos ver como queda.

lunes, 27 de febrero de 2012

Acelerando el uso de Excel con macros para envio de direcciones

En este ejemplo vas a asumir que quieres hacer envio de correspondencia de excel a word. Sin embargo, cuando la persona te envia la data, estaba en la secuencia equivocada. En lugar de tener la data distribuida en columnas, la data tenia la informacion en la columna A.
Aunque tu podrias arreglar este tipo de error manualmente, te tomaria mucho tiempo cortar y pegar. Esto se puede automatizar con una macro.

Grabar una macro
La meta es grabar una macro simple que resolvera un registro. Para esto tienes que poner activa la celda con la que vas a comenzar. La macro deberia mover los 2 campos que estan debajo, eliminar las 3 celdas vacias, y terminar con el siguiente nombre. De este modo, tu puedes ejecutar la macro una y otra vez.
Para comenzar vamos a poner la celda activa en A1.
Ahora vamos a Vista-Macros-Grabar Macro.
Le damos un nombre a la macro (sin espacios). Escribimos un atajo de teclado. Dado que para este ejemplo solo usaras una macro, algo como Ctrl+a podria ser facil de recordar.
Una vez que tu haz empezado a grabar una macro, puedes ver el boton de Detener Macro. Abajo esta el boton de Usar Referencias Relativas.
Si tu presionas empiezas a grabar la macro ahora, Excel usaria las direcciones. Esto quiere decir, que asumiria que tu quisiste mover A2 a V1 y A3 a C1. Esto funciona para un registro, pero tu necesitas que la macro funcione para todos los registros. Activa las Referencias Relativas dando click en el boton.

Pasos para completar la tarea
Todo lo que tu hagas sera grabado. De ser posible, usa pulsaciones en vez del mouse.
Acciones Teclas que vas a presionar Que es lo que graba
Bajar una fila
Seleccionar 2 filas
Abajo
Mientras mantienes presionada la tecla Shift, presiona abajo.
ActiveCell.Offset(1, 0).Range("A1:A2").Select
Cortar Ctrl+X Selection.Cut
Mover una fila arriba y a la derecha una columna Arriba, Derecha ActiveCell.Offset(-1, 1).Range("A1").Select
Pegar Ctrl+V ActiveSheet.Paste
Moverte a la fila 2, Columna B Abajo ActiveCell.Offset(1, 0).Range("A1").Select
Cortar Ctrl+X Selection.Cut
Mover una fila arriba y 2 columnas a la izquierda
Selecciona 3 celdas(filas)
Abajo, Izquierda, Izquierda
Mientras se mantiene presionada la tecla shift, presiona abajo, abajo, abajo
ActiveCell.Offset(1, -2).Range("A1:A3").Select
Desde el menu seleccione inicio, eliminar Poner el mouse en el menu inicio, luego poner el mouse en el boton eliminar Selection.Delete Shift:=xlUp
A este punto, esta casi finalizada la macro. El problema es que, como mostramos abajo, tu haz seleccionado 3 celdas y tu solo quieres el nombre seleccionado.
Acciones Teclas que vas a presionar Que es lo que graba
Selecciona el nombre de la persona en el siguiente registro Arriba, Abajo ActiveCell.Select
Detener la grabacion Click en el boton Detener Grabacion

Probar la macro
Es tiempo de ejecutar la macro. Antes que lo intentes, graba todo antes que algo inesperado ocurra.
Pulsa Ctrl+a o ejecuta la macro una vez. Si todo va bien la macro arreglara el siguiente nombre.
Ejecutar la macro muchas veces
Si funciono bien una vez, cada vez que pulses Ctrl+a otro registro sera corregido.
Asi es como se vera el codigo en el editor de Visual Basic.
Sub RearrangeAddressBook()
'
' RearrangeAddressBook. Macro Recorded by XSaint, 27/02/12
'
' Keyboard Shortcut: Ctrl+a
'
ActiveCell.Offset(1, 0).Range("A1:A2").Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Cut
ActiveCell.Offset(-1, 1).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(1, -2).Range("A1:A3").Select
Selection.Delete Shift:=xlUp
ActiveCell.Select
End Sub
Esta sencilla macro resuelve un problema de la vida real. La clave para lograrlo fue usar el modo de grabacion relativa.

domingo, 26 de febrero de 2012

Calcular sumas en Microsoft Excel con funciones y con Visual Basic

en este pequeño tutorial voy a explicar 3 modos para calcular sumas en Excel. Desde el metodo mas facil hasta el mas dificil, los 3 modos son:
  1. Usando un icono para acceder a la funcion suma proporcionada en Excel
  2. Ingresando la funcion Excel manualmente
  3. Creando una funcion suma en Visual Basic y llamandola manualmente
Para este ejemplo utilizaremos un excel de una veterinaria en el cual se graban el numero de animales que son tratados por mes. Aqui lo que se quiere saber es:
  1. Cuantos animales en total son tratados por mes.
  2. El numero de cada especie que ella trata a lo largo del año
Para conseguir las respuestas que se necesita, la Dra. necesita calcular totales o sumas, a lo largo de cada fila y columna con los datos del paciente.
Para entender este ejemplo, por favor ingresa la data exactamente como muestro en la figura de abajo:
Utilizando el icono de autosuma
Calcular totales es una funcion conocida que se realiza con las hojas de Excel por lo que se creo un icono de autosuma para el proceso. El icono que ven en la figura de abajo, esta en la pestaña Inicio de Excel 2007, y es el unico icono con la letra griega Σ. Autosuma funciona en celdas consecutivas de datos, o un rango, ingresado en una fila o columna.
Para utilizar el icono para calcular la suma de numeros ingresados en un rango:
  • Click en la celda vacia que sigue en la ultima celda de esa columna
  • Click en el icono de Autosuma
  • Presiona enter
Por ejemplo, para calcular el numero total de gatos que el doctor atendio a lo largo del año, damos click en la celda B12, y luego hacemos los pasos 2 y 3 (el paso 2 es ilustrado en la figura 3). Excel genera la suma de 2558, y se coloca en la celda B12.
Para usar el icono para calcular la suma de numeros ingresados en una fila de celdas, primeros damos click en la celda vacia adyacente a la ultima celda con datos en esa fila y luego damos click en los pasos 2 y 3 de las instruccciones de arriba.
Nota:
Esta tecnica es solo util cuando la data que necesita ser sumada es ingresada en celdas consecutivas. Si hay una celda en blanco, el icono de autosuma solo calculara la suma del rango que este despues de la celda vacia.

Ingresando una funcion suma manualmente
Excel te da la opcion de ingresar manualmente en funciones que procesara la data definida por el usuario en la hoja de calculo. Para ingresar la funcion suma manualmente que calcula el total de data ingresada en celdas adyacentes en una columna:
  • Click en la celda donde tu quieres que aparezca la suma
  • Escribe =SUMA(aN1,aN2) donde a es la columna o fila en la cual el rango aparece, N1 es la primera celda en el rango y N2 es la ultima celda en el rango
  • Presiona Enter
Por ejemplo, para calcular el numero total de animales que el doctor vio en el mes de enero:
  • Click en la celda G2
  • Escribe =SUMA(B2:E2) como muestra la figura de abajo
  • Presiona Enter
Excel calcula la suma de 389 y lo pone en la celda G2.
Esta tecnica, a diferencia del icono de Autosuma, te permite calcular la suma de data en multiples rangos. La funcion SUMA puede trabajar sobre una coleccion de rangos, y los rangos son especificados en el mismo formato pero separados por coma. Por ejemplo, si tu quisieras calcular el total de numeros de serpientes tratadas a lo largo del año, tienes 2 opciones:
  • Tu podrias ingresar la funcion suma como =SUMA(E2:E13). Excel calculara apropiadamente el total de serpientes tratadas contando al mes de Julio como cero.
  • Podrias ingresar la funcion suma como =SUMA(E2:E7, E9:E13) (mostrada en la figura de abajo)la cual calcula la suma de 2 rangos de celdas y omitiendo la celda del mes de julio.
Usando Visual Basic para calcular sumas
Si tu conoces Visual Basic, puedes crear funciones personalizadas, o funciones definidas por el usuario en Excel. Estas funciones personalizadas. Estas funciones personalizadas pueden ser usadas en el mismo modo que las funciones implementadas como la funcion Suma, y pueden tener la misma funcionalidad de acuerdo a tus necesidades. Para crear una funcion personalizada:
  • En Excel, presione ALT+F11
  • Selecciona Modulo del menu Insertar.
  • Vamos a escribir codigo Visual Basic en esta ventana.
  • Presionamos ALT+Q para guardar la funcion.
Por ejemplo, para especificar una funcion llamada veterinarysum que calcula la suma de un rango consecutivo de celdas, sigue los pasos de abajo e ingresa el siguiente codigo Visual Basic del paso 3:
Function VeterinarySum(Rcells As Range)

Dim i As Integer
Dim Rcell As Range

For Each Rcell In Rcells
 i = i + Rcell
Next Rcell

VeterinarySum = i

End Function
Para usar una funcion definida por el usuario:
  • En Excel, click en la celda donde tu quieres ubicar los resultados de tus funciones
  • Click en el icono fx
  • En la funcion Insertar de la ventana, selecciona Definidas por el Usuario en el combo al costado de Selecciona una categoria
  • Selecciona tu funcion definida del menu de abajo del combo
  • Click OK
  • Especifica los parametros de la funcion, si es que los hubiera
  • Click OK
Por ejemplo, para usar la funcion VeterinarySum para calcular el total de perros que han sido sanados a lo largo del año:
  • Click en la celda C14
  • Sigue los pasos 2 y 3 de arriba. El paso 3 lo veran en la figura de abajo.
  • Selecciona VeterinarySum del combobox
  • Click en OK
  • Ingresa manualmente C2:C13 en el textbox RCells. Este paso lo veran en la figura de abajo.
  • Click OK.
Excel calculara la suma de 1819 y lo ingresara en la celda C14.

sábado, 18 de febrero de 2012

Mostrar todas las permutaciones o combinaciones de letras usando Excel VBA

Aqui les paso un ejemplo que encontre hace poco, todos los meritos de este ejemplo son para YOSHIDA, Hajime, aqui solo les comparto el ejemplo que encontre y lo explicare.
En Japon, todos los estudiantes aprenden "Permutaciones y Combinaciones" en el primer grado de la escuela secundaria. Como primera leccion, los profesores muestran todos los patrones de permutacion y combinaciones. Probablemente 4!=24 patrones o 6C3=20 patrones. Despues de mostrar todos los patrones, para calcular el valor de permutaciones o combinaciones es el problema para estudiantes.
Lo que se hace para entender casos como estos aqui cito una parte de un libro "el frasco misterioso de Anno" :

Hay un frasco.
En el frasco, esta el mar.
En el mar, hay una isla.
En la isla, hay 2 paises.
En cada pais hay 3 colinas.
En cada colina, hay 4 castillos.

Este libro muestra desde 1! a 8!=40320 puntos en las paginas. Pero, si queremos mostrar 10! = 3628800, necesitaremos mas de 180 paginas. Esto parece real para los estudiantes.
Aun para los profesores, es duro y doloroso mostrar todos los patrones de 5! o mas a mano. Pero las computadores si pueden hacerlo. Algun programa tiene la funcion de mostrar permutaciones. Desafortunadamente, estos programas no son tan populares en las escuelas. Excel es mas conocido para profesores y estudiantes. Y es una herramienta muy poderosa para la educacion en matematicas. Ademas, Excel VBA (Visual Basic para Aplicaciones) es un lenguaje de programacion poderoso.
JK para Excel es una hoja de trabajo con un programa VBA para mostrar todos los valores al aplicar permutaciones o combinaciones. JK simboliza Junretsu(permutacion) y Kumiawase(combinacion) en japones.
CASO 1
SMILE tiene 5 letras, y todas diferentes. Escribe SMILE y clickea en GO.
Todos los patrones de la permutacion lo veran a continuacion:
Ya que JK es una hoja de Excel, los patrones de salida pueden ser escritos a un archivo de texto.
CASO 2
FOOTBALL tiene 8 letras. 2 O y 2 L son identicas. El numero de permutaciones de "FOOTBALL" es 8!/(2!*2!)=10080. El programa realizado muestra a todos.
Dado que el maximo de filas es 65536 en Excel, JK puede mostrar los siguientes patrones.

8!=40320
9P6=60480
18C9=48620

CASO 3
JK puede mostrar ambos casos, ya sea permutaciones o combinaciones. Mire los siguientes ejemplos.
"CAKE" tiene 4 letras. Y todas son diferentes. Vamos a tomar 2 letras a la vez.
Numero de permutaciones=4P2=12
Numero de combinaciones=4C2=6

El algoritmo principal de JK es una llamada recurrente. No es un algoritmo inusual. Cuando dibujamos un diagrama del arbol, usamos este algoritmo.
Ahora como ya vieron como funciona la macro, les voy a explicar el codigo que tiene.
Al abrir el archivo veran 2 botones (Input Form y Reset)
el codigo que se ejecuta al pulsar el boton Input Form es este:
'// Input Form
  Sheet1.Columns(1).ClearContents
  Label1.Caption = ""
  UserForm1.Show
este codigo lo que hace es limpiar la columna A o 1 de la Hoja1, limpiar el Label1 (es ese rectangulo morado que muestra los resultados) y mostrar el formulario UserForm1.
El formulario que abre es este.
y el codigo que se ejecuta al presionar en el boton Go es este:
'// GO
  Dim OutputStr As String
  Dim SortedStr As String
  Dim startDtm As Date, endDtm As Date 'Process time
  Dim i As Integer
  Dim Msg As String
  Dim TempStr As String
      
  Clr_text
  cnt = 0
  nest = 0
  OverFlowBol = False
  OutputStr = ""
  InputStr = TextBox1.Text
  startDtm = Now()
  Label3.Caption = "Counting ..."
  Label4.Caption = ""
  DupChrChk InputStr, SortedStr

  If JKsw = True Then
     Perm OutputStr, InputStr, r 'Permutations
  Else
     Comb OutputStr, SortedStr, r 'Combinations
  End If
  
  endDtm = Now()
  For i = 1 To 20: Beep: Next i
  
  If OverFlowBol = False Then
    TempStr = cnt & " way"
    If cnt > 1 Then
       TempStr = TempStr & "s."
    Else
       TempStr = TempStr & "."
    End If
    Label3.Caption = TempStr
  Else
    Label3.Caption = "Stop at " & cnt & " "
    Msg = "Process Limit !"
    MsgBox Msg, vbCritical
  End If
  
  Label4.Caption = "Time:" & DateDiff("s", startDtm, endDtm) & " sec."
  Wrt_text
  TextBox1.SetFocus
lo que se hace aqui es inicializar variables con Dim y despues llamar a la macro Clr_Text que contiene este codigo
'// Reset data
  UserForm1.Label3.Caption = ""
  UserForm1.Label4.Caption = ""
  Sheet1.Activate
  Sheet1.Label1.Caption = ""
  Sheet1.Columns(1).ClearContents
  Sheet5.Activate
  Sheet5.Range("B2", "D21").ClearContents
  Sheet5.Range("F7", "H12").ClearContents
  Sheet5.Label1.Caption = ""
  Sheet1.Activate
como se puede ver lo que hace es limpiar ciertos controles, ahora siguiendo con el evento Go de arriba, se almacena la palabra ingresada en InputStr mientras que OutputStr se inicializa como una variable sin caracteres, y se evalua si JKsw es verdadero, esta variable esta inicializada mas arriba por lo que se puede llamar en cualquier funcion, y dado que se inicializo As Boolean por defecto sera verdadera, entonces llamara a la macro Perm la cual se le ingresaran 3 valores y el codigo que ejecutara esta macro sera el siguiente:
Sub Perm(OutNowStr As String, InNowStr As String, sel As Integer)
'// Permutations
  
  Dim k As Integer
  Dim i As Integer
  Dim OutNextStr As String  '
  Dim InNextStr As String   '
  Dim ChkStr As String      '
  Dim chr1Str As String     '
  Dim hit As Integer        '
  
  nest = nest + 1
  If OverFlowBol = True Then
    nest = nest - 1
    Exit Sub
  End If
  
  If sel = 0 Then
    OutProc OutNowStr
  
  Else
    k = Len(InNowStr)
    ChkStr = ""
    
    For i = 1 To k
      chr1Str = Mid(InNowStr, i, 1)
      hit = InStr(ChkStr, chr1Str)
            
      If hit = 0 Then
        ChkStr = ChkStr & chr1Str
'    -------------------------------------------------------------------
        OutNextStr = OutNowStr & chr1Str
        InNextStr = Mid(InNowStr, 1, i - 1) & Mid(InNowStr, i + 1, k - i)
        Perm OutNextStr, InNextStr, sel - 1
'    -------------------------------------------------------------------
      End If
    Next i
  End If
  nest = nest - 1
End Sub
como se ve aqui este codigo realiza las permutaciones, ahora esto sera en caso de que JKsw sea verdadero que como lo dije sera en su defecto, pero que pasa si es falso vemos que llama a otra macro: Comb. Para ver como cambia el valor de la variable vemos en el formulario 2 radiobutton, estos cambian el valor de la variable JKsw ya que si vemos el codigo:
Private Sub OptionButton1_Click()
'// "Permutations"
  JKsw = True
  JKstr = "Permutations"
End Sub
ahora volvemos a la opcion de que JKsw sea falso, llamara a la macro Sub que ejecutara el siguiente codigo:
Sub Comb(OutNowStr As String, InNowStr As String, sel As Integer)
'// Combinations
  
  Dim k As Integer
  Dim i As Integer
  Dim OutNextStr As String  '
  Dim InNextStr As String   '
  Dim ChkStr As String      '
  Dim chr1Str As String     '
  Dim hit As Integer        '
  
  nest = nest + 1
  If OverFlowBol = True Then
    nest = nest - 1
    Exit Sub
  End If
  
  If sel = 0 Then
    OutProc OutNowStr
  
  Else
    k = Len(InNowStr)
    ChkStr = ""
    
    For i = 1 To (k - sel + 1)         ' <-- Caution!
      chr1Str = Mid(InNowStr, i, 1)
      hit = InStr(ChkStr, chr1Str)
            
      If hit = 0 Then
        ChkStr = ChkStr & chr1Str
'    -------------------------------------------------------------------
        OutNextStr = OutNowStr & chr1Str
        InNextStr = Mid(InNowStr, i + 1, k - i)
        Comb OutNextStr, InNextStr, sel - 1
'    -------------------------------------------------------------------
      End If
    Next i
  End If
  nest = nest - 1
End Sub
ahora como vemos en StartDtm y EndDtm se almacenaron los valores al empezar y terminar el codigo, ahora seguimos en el evento click del boton Go, aqui se evalua si OverFlowBol = False y dado que se inicializo asi muestra el numero de celdas que contienen las permutaciones o combinaciones respectivas asi como los ejemplos anteriores que al poner SMILE salia 120 ways (vean la figura de arriba) y despues mostrara el tiempo que demoro en procesar las permutaciones en el Label4, como vimos antes en 120 permutaciones mostro 0 segundos pero en 10080 permutaciones le tomo 6 segundos, este tiempo lo calcula de restar EndDtm y StartDtm. Ahora si pulsamos Reset se ejecutara este boton
Private Sub CommandButton2_Click()
'// Reset Data
  TextBox1.Text = ""
  TextBox2.Text = ""
  Clr_text
  TextBox1.SetFocus
End Sub
aqui lo que hace es limpiar los textbox, llamar al procedimiento Clr_text y poner el cursor en el textbox1. El boton Close tiene el siguiente codigo
Private Sub CommandButton3_Click()
'// Close Form
  End
End Sub
En el codigo para elegir el numero de combinaciones o permutaciones se utiliza un spinbutton que tiene el siguiente codigo:
Private Sub SpinButton1_Change()
'// Change the value of "r" by spin button
  TextBox2.Text = SpinButton1.Value
End Sub
y vemos que en el evento textchange del textbox2 se llama al spinbutton
Private Sub TextBox2_Change()
'// Chose r
  Dim msgStr As String
  
  r = Val(TextBox2.Text)
  n = Len(TextBox1.Text)
  
  If TextBox2.Text <> "" Then
    If (Not IsNumeric(TextBox2.Text)) Or _
       r < 0 Or r > n Then
      msgStr = "Choose 0 <= r <= " & n
      MsgBox msgStr, vbExclamation
      r = n
      TextBox2.Text = n
    End If
  End If
  
  SpinButton1.Max = n
  SpinButton1.Value = r
End Sub
Ahora al elegir los radiobuttons se llamara a los procedimientos Perm o Comb
Private Sub OptionButton1_Click()
'// "Permutations"
  JKsw = True
  JKstr = "Permutations"
End Sub

Private Sub OptionButton2_Click()
'// "Combinations"
  JKsw = False
  JKstr = "Combinations"
End Sub
y este es el codigo con el que se inicializa el formulario
Private Sub UserForm_Initialize()
'// Initialize
  OptionButton1.Value = True
  OptionButton1_Click   'Set "Permutation"
  CalSheetBol = True    'Write to CalcSheet
  n = 0
  r = 0
  UserForm1.SpinButton1.Max = 0
  UserForm1.SpinButton1.Value = 0
  Load UserForm1
End Sub
no tengo mucho tiempo para explicar el resto de codigo, asi que aqui les dejo el ejemplito para que se guien y espero les haya servido esta pequeña explicacion que hice.

Macro para calcular el promedio en Excel 2007

Voy a poner algunos conceptos previos.
  • Una macro es una rutina programada por el usuario que puede ser llamada mediante atajos de teclado
  • Visual Basic para Aplicaciones (VBA) es un lenguaje de programacion utilizado por los Programas de Microsoft Office que permite al usuario desarrollar rutinas personalizadas y funciones
  • Funciones son rutinas que devuelven valores
Ahora si vamos con el ejemplo.
Primero abrimos una hoja de calculo y la llenamos con 7 numeros en forma vertical, asi como en la figura:
ahora seleccionamos la celda superior de la derecha, asi como ven arriba (celda B2)
Ahora vamos a grabar la macro seleccionando Vista->Macro->Grabar Macro y modifican las propiedades (en metodo abreviado escriban la letra que deseen, con esa combinacion de teclas llamaran a la macro mas adelante)
Ahora escribimos la formula de entrada en la celda B2 y luego detenemos la macro yendo a Vista->Macro->Detener Macro

Para detener la macro, tambien puedes utilizar el boton Stop que esta en la parte inferior izquierda de la hoja de Excel.
Vamos a probar la macro ubicandonos en otra columna, escribimos 7 numeros y en la celda del primer numero nos movemos a la derecha y pulsamos el atajo de teclado que les indique en la figura de arriba (Ctrl+a)
y veran que aparece el mismo resultado
Ahora presionamos ALT+F11 para acceder al modulo de Visual Basic como muestra la figura:
eliminen la ultima linea
Range("C2").Select
de lo contrario, al presionar Ctrl+a siempre retornara a la celda C2.
Para grabar la macro como un archivo Visual Basic, vayan a Archivo->Exportar Archivo y grabenlo como un archivo Basic [*.bas] (asegurense que el Modulo1 este remarcado).
Espero les haya servido este pequeño ejemplito :)

jueves, 16 de febrero de 2012

VBA Command Button Example with Excel

En este ejemplo vamos a calcular el volumen y el area de la superficie de un bloque determinado de tal manera que las longitudes de los lados estan escritos en Excel en las celdas B1:B3 como ven abajo. El codigo deberia ejecutarse al presionar el boton llamado Calcular V & A. El codigo deberia automaticamente mostrar el resultado en las celdas A5 y A6.
Lo que hacemos es escribir los valores de w, h y d en las celdas desde B1 a B3 y poner un boton de comando ActiveX (ya les explique en un ejemplo anterior como poner botones en Excel 2007), y le damos doble click, aqui nos aparecera un editor de codigo de Visual Basic.
Ventana de codigo para el CommandButton1

y escriben este codigo:
'declaramos variables tipo double
Dim w As Double, h As Double, d As Double, volume As Double, sa As Double
'capturamos los valores de las celdas B1 a B3
w = Range("B1").Value 'aqui capturamos el ancho
h = Range("B2").Value 'aqui capturamos el largo
d = Range("B3").Value 'aqui cpturamos el espesor
'calculamos el volumen
volume = w * h * d
'calculamos el area de la superficie
sa = 2 * w * h + 2 * h * d + 2 * w * d
'mostramos los resultados en las celdas A5 y A6
Range("A5").Value = "El volumen es " & volume & " cu. in"
Range("A6").Value = "La superficie es " & sa & " sq. in"
'seleccionamos
para compilar el codigo van a Depuracion - Compilar VBA Project.
cierran el editor, y al pulsar el boton les aparecera el resultado asi: