Macros en Excel

60
Macros en Excel Practica II Genera una Macro que escriba un nombre en una celda y lo ponga negrita y observa el Código. Genera una Macro que escriba un nombre en una celda y lo Centre y observa el Código. Genera una Macro que escriba un nombre en una celda y cambie el tamaño de la letra a 20 puntos y observa el Código. Códigos Más comunes: Trasladarse a una Celda Range("A1").Select Escribir en una Celda Activecell.FormulaR1C1="Ramon" Letra Negrita Selection.Font.Bold = True Letra Cursiva Selection.Font.Italic = True Letra Subrayada Selection.Font.Underline = xlUnderlineStyleSingle Centrar Texto With Selection .HorizontalAlignment = xlCenter End With Alinear a la izquierda With Selection

description

macros en excel 2013

Transcript of Macros en Excel

Macros en ExcelPractica IIGenera unaMacroque escriba un nombre en una celda y lo ponga negrita y observa elCdigo.Genera unaMacroque escriba un nombre en una celda y lo Centre y observa elCdigo.Genera unaMacroque escriba un nombre en una celda y cambie el tamao de la letra a 20 puntos y observaelCdigo.Cdigos Ms comunes:Trasladarse a una CeldaRange("A1").SelectEscribir en una CeldaActivecell.FormulaR1C1="Ramon"Letra NegritaSelection.Font.Bold = TrueLetra CursivaSelection.Font.Italic = TrueLetra SubrayadaSelection.Font.Underline = xlUnderlineStyleSingleCentrar TextoWith Selection.HorizontalAlignment = xlCenterEnd WithAlinear a la izquierdaWith Selection.HorizontalAlignment = xlLeftEnd WithAlinear a la DerechaWith Selection.HorizontalAlignment = xlRightEnd WithTipo de Letra(Fuente)With Selection.Font.Name = "AGaramond"End WithTamao de Letra(Tamao de Fuente)With Selection.Font.Size = 15End WithCopiarSelection.CopyPegarActiveSheet.PasteCortarSelection.CutOrdenar AscendenteSelection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottomOrden DescendenteSelection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottomBuscarCells.Find(What:="Ramon", After:=ActiveCell, LookIn:=xlFormulas, LookAt _:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _False).ActivateInsertar FilaSelection.EntireRow.InsertEliminar FilaSelection.EntireRow.DeleteInsertar ColumnaSelection.EntireColumn.InsertEliminar ColumnaSelection.EntireColumn.DeleteAbrir un LibroWorkbooks.Open Filename:="C:\Mis documentos\video safe 3.xls"Grabar un LibroActiveWorkbook.SaveAs Filename:="C:\Mis documentos\piscis.xls", FileFormat _:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _False, CreateBackup:=FalseEstos serian algunos cdigos muy comunes enExcel, pero si usted desea puede generar mas cdigosde otras opciones, es cuestin de que los ocupe.Antes de pasar a laFase 3es necesario que domines generarMacrosy Observar sus cdigos que se encuentranen laFase 2.Recuerda esto es de mucha practica y para eso es necesario aprender bien las fases Anteriores.

Fase 3CREANDO FORMULARIOS Y PROGRAMNDOLOSAntes de Empezar esta nueva fase te recomiendo que salgas deExcely vuelvas a entrar, esto es porsi estuviste practicando los cdigos, para que no quede una secuencia de Macros.Ahora te enseare a dominar lo mximo de Excel que es crear formularios y programarlos, bueno un formulario es una ventana que se programa por medio de controles y estos controles responden a sucesos que nosotrosprogramamos. Todo esto se encuentra dentro de Visual Basic.A continuacin Muestro como crear un formulario y como programarlo:1. Presione La TeclasAlt + F11,para entrar al editor deVisual Basic.2. Activa las siguientes opciones: De clic en elMen Very elija la opcinExplorador de Proyectos De clic en elMen very elija la opcinVentana Propiedades2. DelMen Insertarelija la OpcinUserForm.Esto inserta el Formulario queprogramaremos concontroles. En elExplorador de Proyectose observara que se insertoelUserForm.

Tambin cuando de clic en el FormularioUSERFORM1se debe de activarel Cuadro de Herramientas, si no se activade clic en elMen Very elija la opcinCuadro de Herramientas.1. Elija delCuadro de Herramientasel ControlEtiquetael que tiene laAy Arrastre dibujando en el FormularioUSERFORM1la etiqueta. Quedara el nombre Label1, despus de un clic en la etiqueta dibujada y podrmodificar el nombre de adentro y pondremos ahNombre.Si por error da doble clic en la etiqueta y lo mandaa la pantalla de programacin de la etiqueta, solo de doble clic enUserForm1que se encuentra en elExplorador de Proyecto.2. Elija delCuadro de Herramientasel controlCuadro de Textoel que tieneaby arrastre dibujando en elformularioUSERFORM1el cuadro de texto a un lado de la etiqueta que diceNombre. El cuadro de texto debede estar vaco y su nombre serTextbox1, el nombre solo aparecer en el control.3. 4. 5. Haga los dos pasos anteriores igualmente poniendoDireccinen laLabel2yTelfonoen laLabel3y tambindibjeles su Textbox. Esto quedara as despus de haberlo hecho

Si tiene algn problemaal dibujar las etiquetas o los cuadros de texto, solo cmbiele el nombre a laetiqueta o el cuadro de texto en laVentana Propiedadesla opcin se llama(Name).El Error que marque puede serNombre Ambiguo,pero si le cambias el Nombre al control se quitara el error. Puedes ponerle cualquier nombre enlugar de Label1.

Solo altera esto si te marca error, si NO djalo as.Los controles como las Etiquetas y Cuadros de Textos pueden modificrseles algunas opciones en la VentanaPropiedadesPara hacer esto es necesario tener conocimiento sobre las propiedades de los controles.No altere las propiedades si no las conoce.

1. Elija delCuadro de Herramientasel controlBotn de Comandoy Arrastre dibujando en el FormularioUSERFORM1el Botn, despus de un clic en elnombre del Botn dibujado y podr modificar el nombre ypondremos ahInsertar.Si por error da doble clic en la Botn y lo manda a la pantalla de programacin de laetiqueta, solo de doble clic enUserForm1que se encuentra en elExplorador de Proyecto.As quedara el Formulario formado por los controles:1. Ahora de doble clic sobre el controlTextbox1para programarlo y despus inserte el siguiente cdigo:Private Sub TextBox1_Change()Range("A9").SelectActiveCell.FormulaR1C1 = TextBox1End SubEsto indica que se valla aA9y escriba lo que hay en elTextbox1Nota.-Lo que esta en azul lo genera Excel automticamente, usted solo escribir lo que esta en Negrita.Para volver alFormularioy programar el siguiente Textbox de doble clic enUserForm1que se encuentra en elExplorador de Proyecto,o simplemente de clic enVer Objetoen el mismoExplorador de Proyecto.1. Ahora de doble clic sobre el controlTextbox2para programarlo y despus inserte el siguiente cdigo:Private Sub TextBox2_Change()Range("B9").SelectActiveCell.FormulaR1C1 = TextBox2End SubEsto indica que se valla aB9y escriba lo que hay en elTextbox2Para volver alFormularioy programar el siguiente Textbox de doble clic enUserForm1que se encuentra en elExplorador de Proyecto,o simplemente de clic enVer Objetoen el mismoExplorador de Proyecto.1. Ahora de doble clic sobre el controlTextbox3para programarlo y despus inserte el siguiente cdigo:Private Sub TextBox3_Change()Range("C9").SelectActiveCell.FormulaR1C1 = TextBox2End SubEsto indica que se valla aC9y escriba lo que hay en elTextbox3Para volver alFormularioy programar elBotn de ComandoInsertarde doble clic enUserForm1que se encuentra enelExplorador de Proyecto,o simplemente de clic enVer Objetoen el mismoExplorador de Proyecto.1. Ahora de doble clic sobre el controlBotn de Comandopara programarlo y despus inserte el siguiente cdigo:Private Sub CommandButton1_Click()Rem inserta un renglnSelection.EntireRow.InsertRem Empty Limpia Los TextboxTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyRem Textbox1.SetFocus Enva el cursor al Textbox1 para volver a capturar los datosTextBox1.SetFocusEnd SubNota.-El comandoRemes empleado para poner comentarios dentro de la programacin, el comandoEmptyesempleado para vaciar los Textbox.1. Ahora presione el botnEjecutar User/Formque se encuentra en la barra de herramientas osimplemente la tecla de funcinF5

Se activara elUserform1y todo lo que escriba en los Textbox se escribir en Excel y cuando presione el botn Insertar,se insertara un rengln y se vaciaran los Textbox y despus se mostrara el cursor en elTextbox1.En este archivo que usted bajo se encuentra una hoja de Excel Libre de Virus o sea que esta limpio,bralo sin ningn problema, ya que ah viene un ejemplo de la Macro ya realizada y solo la ejecutara y vera comotrabajan las Macros. Espero y ests pendiente porque vienen mas partes sobre este interesante curso de Macros.El Archivo Viene con el Nombre de Macro1

MACROS EN EXCELParte IIHola amigos, estamos de nuevo aqu para mostrar la segunda parte deGua de Macros enExcelque te ser de gran utilidad, ya que se manejaranFormulasen los Formularios,Bsquedas de TextoyEl Asistente de Windows. Entonces empecemosAmigos.TRABAJANDO CON FORMULASEs de suma importancia saber aplicarFormulasenMacros de Excel, ya que la mayora de las hojas de clculos las involucran, por ejemplo los Inventarios, las Nominas o cualquier otro tipo de hoja las llevan, es por eso que en la siguienteFasese muestra como manejarFormulasenMacros de Excel.Fase I1. Presione La TeclasAlt+ F11,para entrar al editor deVisual Basic.2. Activa las siguientes opciones: De clic en elMen Very elija la opcinExplorador de Proyectos De clic en elMen very elija la opcinVentana Propiedades2. DelMen Insertarelija la OpcinUserForm.Esto inserta el Formulario que programaremos con controles. En elExplorador de Proyectose observara que se inserto elUserForm.Ahora crearas un formulario con el siguiente aspecto:el formulario tendr: Tres etiquetas Tres Textbox Un Botn de ComandoLos datos que se preguntaran sern Nombre y Edad, los Das Vividos se generaran automticamente cuando insertes la edad. A continuacin se muestra como se deben de programar estos Controles:Programacin de los Controles:Private Sub CommandButton1_Click()Selection.EntireRow.InsertTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubPrivate Sub TextBox1_Change()Range("A9").SelectActiveCell.FormulaR1C1 = TextBox1End SubPrivate Sub TextBox2_Change()Range("B9").SelectActiveCell.FormulaR1C1 = TextBox2Rem aqu se crea la FormulaTextBox3 = Val(TextBox2) * 365Rem El Textbox3 guardara el total de la multiplicacin del Textbox2 por 365Rem El Comando Val permite convertir un valor de Texto a un Valor NumricoRem Esto se debe a que los Textbox no son Numricos y debemos de ConvertirlosEnd SubPrivate Sub TextBox3_Change()Range("C9").SelectActiveCell.FormulaR1C1 = TextBox3End SubEsto va permitir que cuando se ejecute el formulario y se de la edad el resultado de los das vividos aparecer en elTextbox3y se escribir tambin enExcel. El comandoVales un comando deVisual Basicque te permite convertir un valor de texto a un valor numrico. Recuerden el Comando Rem se utiliza para poner Comentarios nicamente y no afecta a la programacin.Este Archivo de estaMacrose llamaMacros de Edady viene incluido aqu.Generaremos otro ejemplo, Crea el Siguiente Formulario con los siguientes datos: 5 Etiquetas 5 Textbox 1 Botn de ComandoLos datos que se preguntaran sern Nombre, Das Trabajados, Pago por Da, Bonos y Sueldo Neto.

Genera el siguiente cdigo:Private Sub CommandButton1_Click()Selection.EntireRow.InsertTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubPrivate Sub TextBox1_Change()Range("A9").SelectActiveCell.FormulaR1C1 = TextBox1End SubPrivate Sub TextBox2_Change()Range("B9").SelectActiveCell.FormulaR1C1 = TextBox2End SubPrivate Sub TextBox3_Change()Range("C9").SelectActiveCell.FormulaR1C1 = TextBox3End SubPrivate Sub TextBox4_Change()Range("D9").SelectActiveCell.FormulaR1C1 = TextBox4Rem aqu se crea la formulaTextBox5 = Val(TextBox2) *Val(TextBox3) + Val(TextBox4)Rem El TextBox5 guardarael totalEnd SubPrivate Sub TextBox5_Change()Range("E9").SelectActiveCell.FormulaR1C1 = TextBox5End SubCuando se introduzca el Bonos automticamente se generara el Sueldo Neto.Este ejemplo viene en el ArchivoMacros de Sueldo Neto

USANDO INFORMACIN CON UN TEXTBOXSe puede buscar informacin con un Textbox programndolo de la siguiente forma:Dibuje unaEtiqueta, unTextboxy unBotnde Comandoy agregue el siguiente Cdigo:Private Sub TextBox1_Change()Range("a9").SelectActiveCell.FormulaR1C1 = TextBox1End SubPrivate Sub CommandButton1_Click()Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _False).ActivateEnd SubSi te fijas inclu en la programacin delBotn Buscar Ahoraque buscara lo que en el Textbox1 a la hora de Presionarse.Este proceso viene en el Archivo CompletoMacro2TRABAJANDO CON EL ASISTENTEEl asistente es el personaje deOfficeque se activa para ayudarnos y una de las ventajas es que podemos Manipularlo, por ejemplo se le puede dar animacin, Moverse, Hacer Preguntas, Etc.A continuacin se muestran algunos cdigos del Asistente:Este cdigo permite hacer visible el ayudante o sea mostrarlo. Si deseas ocultarlo solo cambia la opcinTrueporFalse.Assistant.Visible = TrueEste cdigo permite Mover el Asistente a un nuevo lugar, solo cambia los valores numricos y cambiara de posicin.Assistant.Move 430, 230Este cdigo permite activar un efecto de animacin, cuando escribas el signo Igual despus de Assistant.Animation = aparecer un men con diferentes efectos de animacinAssistant.Animation = msoAnimationListensToComputerEste ejemplo permite crear unNuevo Asistentepara poderlo manipular con una pregunta y que tu contestes. La variabletguardara el valor de la respuesta, si el valor es -3 significa que es Si y por lo tanto borrara el rengln.

With Assistant.NewBalloon.Text = "Deseas Borrar este Registro"

.Button = msoButtonSetYesNo.Heading = "Advertencia"t = .ShowEnd WithIft = -3 ThenAssistant.Animation = msoAnimationEmptyTrashSelection.EntireRow.DeleteEnd IfEste ejemplo viene en el archivoMacro2Si deseas que siga saliendo esta gua solo escrbeme pidiendo que sigan saliendo ejemplos.

MACROS EN EXCELParte IIIHola amigos, estamos de nuevo aqu para mostrar la tercera parte deGua de Macros enExcelque te ser de gran utilidad, ya que se manejaranConsultas en los Formularios, accesos a las Macros desde Excel sin necesidad de entrar a Visual Basic y algunos mtodos de trabajar mas fcil. De antemano muchas gracias por apoyar este curso de Excel creo que les ha servido, no haba tenido mucho tiempo para escribir esta tercera parte pero creo que ya esta.!!!Mucho Animo!!!.ELABORANDO UNA CONSULTATodoRegistro de informacindebe de tener su propiaConsulta, Baja y Modificacin, es por eso que en este nuevo capitulo nos concentramos en ello, primeramente en poderconsultar la informacinque ya se escribi en laHoja de Excel, obviamente desde unaMacrocombinada conVisual Basic, observemos el siguiente ejemplo:Fase I1. Presione La TeclasAlt + F11,para entrar al editor deVisual Basic.2. Activa las siguientes opciones: De clic en elMen Very elija la opcinExplorador de Proyectos De clic en elMen very elija la opcinVentana Propiedades2. DelMen Insertarelija la OpcinUserForm.Esto inserta el Formulario que programaremos con controles. En elExplorador de Proyectose observara que se inserto elUserForm.Ahora crearas un formulario con el siguiente aspecto:el formulario tendr: Tres etiquetas Tres Textbox Tres Botones de ComandoLos datos que se preguntaran sernNombre, Direccin y Telfono. Los tres botones nos servirn para lo siguiente:Consultarconsultara la informacin que hayamos insertado desde el botn insertar.Bajapodr eliminar algn dato que se consulto y no lo queremos.Insertartendr la funcin de insertar los registros que vayamos dando de alta, es como los ejercicios anteriores. A continuacin se muestra como se deben de programar estos Controles:Programacin de los Controles:BOTON DE CONSULTAPrivate Sub CommandButton1_Click()Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _False).ActivateActiveCell.Offset(0, 1).SelectTextBox2 = ActiveCellRem la lnea que contiene elActiveCell.Offset(0, 1).Selectpermite moverse una columna a la derecha, por lo tanto despus de la bsqueda de las primeras lneas conCell.Findsi encuentra el Nombre de la persona se mueve a la siguiente columna y la lneaTextBox2 = ActiveCellPermite capturar el valor de la celda alTextbox2y as mostrar el dato de la celda en elTextBox2.ActiveCell.Offset(0, 1).SelectTextBox3 = ActiveCellRem Cada vez que se escriba la lneaActiveCell.Offset(0, 1).Selectsignifica que se tiene que moverse una columna a la derecha.Rem Si el nombre que tratas de consultar no se encuentra podra generar un error porque fallara el Cell.Find esto puede ocurrir en el Word 97, yo trabajo con el Word 2000 o XP y no tengo ese problema. Pero esto se solucionara con una trampa de error.End SubBOTON BAJAPrivate Sub CommandButton2_Click()Selection.EntireRow.DeleteRange("A9").SelectTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubBOTON INSERTARPrivate Sub CommandButton3_Click()Range("A9").SelectSelection.EntireRow.InsertTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubCUADROS DE TEXTOPrivate Sub TextBox1_Change()Range("A9").FormulaR1C1 = TextBox1Rem esta primer lnea reemplaza a estas dos que te parece todava mas cortaRange("A9").SelectActiveCell.FormulaR1C1 = TextBox1End SubPrivate Sub TextBox2_Change()Range("B9").FormulaR1C1 = TextBox2End SubPrivate Sub TextBox3_Change()Range("C9").FormulaR1C1 = TextBox3End SubSi con elBotn Consultatienes un error cuando no encuentra a la persona, entonces tendrs que agregar esto a tu cdigo delBotn ConsultarBOTON DE CONSULTAPrivate Sub CommandButton1_Click()On Error Goto noencontroRem esta lnea genera una trampa de error si Excel encuentra un error se le dice que se vaya a la etiquetanoencontroque esta definida mas adelante en el cdigo. No use la trampa de error si no tiene problemas a la hora de que no encuentra a la persona. Recuerde si usted comete cualquier error Excel se dirigir a la etiquetanoencontro.y esquivara cualquier error, hasta uno que usted cometa en la programacin.Cells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _False).ActivateActiveCell.Offset(0, 1).SelectTextBox2 = ActiveCellActiveCell.Offset(0, 1).SelectTextBox3 = ActiveCellRem Tambin se puede utilizar este cdigo para leer la informacin de las celdas lo que esta en azul. La diferencia es que se asignan los valores a variables y despus se descargan a los TextBoxs.ActiveCell.Offset(0, 1).SelectDireccion = ActivecellActiveCell.Offset(0, 1).SelectTelefono = ActivecellTextBox2 = DireccionTextBox3 = Telefononoencontro:Rem Aqu se esquiva el errorEnd SubQue te parece es increble como una Macro combinada con Visual Basic puede hacer hasta lo imposibleBueno ya tenemos elaborado un ejercicio de consultas de datos, ahora accesaremos al formulario desdeExcelsin necesidad de entrar alEditor de Visual Basic.Para realizar este ejercicio debemos permanecer dentro delEditor de Visual Basicpara poder introducir el cdigo en unModulo, por lo tanto debers seguir los siguientes pasos: De clic en elMen Insertary elija la opcinModulo Escriba dentro delModuloel nombre del modulo en este casoSub EntradaCuando usted escriba Sub Entrada aparecer de la siguiente manera:Sub Entrada()Load UserForm1UserForm1.ShowEnd SubUsted deber escribir las dos lneas que estn en medio que son:Load UserForm1UserForm1.ShowLa primer lnea significa que cargue a la memoria el formulario que se llamaUserForm1, la segunda lnea significa que lo muestre, esto quiere decir que en el modulo estamos escribiendo el cdigo de una macro que permitir cargar el formulario desde Excel sin necesidad de entrar alEditor de Visual Basic.Si te fija en el explorador de proyecto aparece elModuloque creamos.si queremos volver al formulario solo da doble clic enUserForm1Bueno ya esta listo ahora salgamos delEditor de Visual Basicy volvamos aExcel. De clic en elMen ArchivodelEditor de Visual Basic Elija la opcinCerrar y volver a Microsoft ExcelYa que estamos enExcel, podemos insertar una imagen o un botn o cualquier grafico, por ejemplo: De clic en elMen Insertar Elija la opcinImagen, seguido porImagen Prediseada inserte cualquier imagen y dele el tamao que usted desea. De clic derecho sobre la Imagen Elija la opcinAsignar Macro De clic en laMacroque se llamaEntrada, es obvio la nica que hicimos De Clic enAceptar De clic fuera de la imagen en cualquier celda y listo si presionas la imagen cargara el formulario.

MACROS EN EXCELParte IVBueno empezaremos con como agregar informacin a unComboboxy unListbox, primeramente debers crear el siguiente formulario dentro deVisual Basic, recuerda desde Excel se utiliza la teclaALT + F11para entrar aVisual Basic, seguido delMen Insertary despusUserform, bueno creo que ya lo sabes. Inserta UnCombobox y un Listboxy unBotn.Ahora que ya creaste la Interfaz vamos a programar el botn, veremos como se le puede agregar informacin por medio de cdigo a estos dos controles.Da doble clic en elBotny escribe las siguientes lneas dentro del procedimiento.Private Sub CommandButton1_Click()ComboBox1.AddItem "Juan Jose"ComboBox1.AddItem "Pedro de la Fuente"ComboBox1.AddItem "Salvador de la Luz"ListBox1.AddItem "Juan Jos"ListBox1.AddItem "Pedro de la Fuente"ListBox1.AddItem "Salvador de la Luz"End SubBueno vamos a analizar el significado de estas lneas:ComboBox1.AddItem "Juan Jos "La opcinAddItemsignifica que vas a agregar un dato de texto, por lo tanto se entiende como vas a agregar a Juan Jos alCombobox1, por lo tanto yo puedo agregar los datos que quiera a unComboboxo unListboxcon la opcinAddItem, entonces al presionar el botn aparecern los datos que se encuentra escritos y podrs seleccionar cualquiera de ellos, recuerda que la informacin la vas a agregar segn tus necesidades.Ahora si deseas agregar nmeros a un Combobox o ListBox escribe el siguiente cdigo en un botn:Private Sub CommandButton1_Click()For X=1 to 50Listbox1.AddItem str(x)NextEnd SubLa InstruccinFor-Nextes un ciclo contador que te permite contar desde un numero hasta otro. Por ejemplo le digo que cuente desde el 1 hasta el 50 y lo que se encuentre dentro del cicloFor-Nextse ejecutara el nmero de veces, laXes una variable numrica que guarda el valor, cada vez que el ciclo da una vuelta aumenta un numero, por lo tantoXva a valer desde 1 hasta 50, y la instruccinStres para convertir el valor numrico de laXen valor de Texto, ya que la opcinAddItemguarda solo texto, claro esta que tambin puede funcionar sin esta instruccin en algunos casos.Por lo tanto elListbox1va a guardar los nmero del 1 al 50, sin necesidad de irlos poniendo de uno por uno, imagnatelo.Listbox1.AddItem 1Listbox1.AddItem 2Listbox1.AddItem 3Ya te quiero ver en el cdigo para que llegues al 50, jejejejejejeje.Bueno esto es para introducirle datos a unListbox y Combobox, pero como puedo usar estos datos para enviarlos para una celda, en el siguiente ejemplo te lo explico:Da doble clic en elListboxy escribe el siguiente cdigo:Private Sub ListBox1_Click()Range("a9").SelectActiveCell.FormulaR1C1 = ListBox1End SubAs de de fcil cada vez que escojas un dato que se encuentre en unListbox1lo enviara a la celdaa9, escribindolo ah. Si lo deseas hacer lo puedes hacer en unCombobox, solo cambiaListbox1porCombobox1y se acabo.Ahora si deseas agregar los datos alListboxoComboboxsin ningn botn que presionar escribe el siguiente cdigo:Private Sub UserForm_Activate()ComboBox1.AddItem "Juan Jose"ComboBox1.AddItem "Pedro de la Fuente"ComboBox1.AddItem "Salvador de la Luz"ListBox1.AddItem "Juan Jos"ListBox1.AddItem "Pedro de la Fuente"ListBox1.AddItem "Salvador de la LuzEnd SubLa Clave esta en el procedimientoUserForm_Activate()esto quiere decir que cuando se active el formulario cargara lo que tu le indiques, en este caso va a introducir los datos alListbox1yCombobox1automticamente, que te parece.Ahora si deseas tomar informacin de una celda y enviarla a unComboboxoListboxescribe el siguiente cdigo en un Botn:Private Sub CommandButton1_Click()Range("a9").SelectDo While ActiveCell EmptyActiveCell.Offset(1, 0).SelectListBox1.AddItem ActiveCellLoopEnd Sub

Fjate bien, primeramente muevo el rango a la celdaa9porque ah esta el inicio de mi informacin, despus la lneaDo While Activecell Emptysignifica Hazlo mientras la celda no se encuentre vaca, la siguiente lnea que esActiveCell.Offset(1, 0).Select,significa Baja un Rengln, la siguiente lneaListBox1.AddItem ActiveCell,agrega la informacin de la celda alListbox1y la lneaLoopes parte del cicloDo While,siempre cierra el ciclo, como elFor-Next.Por lo tanto todos los nombres que estn delante dea9sern enviados alListbox1y cuando tope con la celdaa15que se encuentra vaca la condicin delDo Whileparara la ejecucin de su cdigo. Esto funciona caminando renglones hacia abajo, pero si deseas moverte hacia la derecha por columnas solo cambia la lneaActiveCell.Offset(1, 0).SelectporActiveCell.Offset(0, 1).Select,quiere decir que se mueva por columna, no por rengln.ActiveCell.Offset(Rengln, Columna).SelectSi cambias el 1 por otro numero se mover el numero de veces que tu le indiques, por ejemplo si quiero bajar 10 renglones de un golpe:ActiveCell.Offset(10, 0).SelectSi quiero moverme 20 columnas a la derechaActiveCell.Offset(0, 20).SelectAs funciona esto.

Ahora veremos como se ejecuta una macro a la hora de abrir un libroPrimeramente inserta unModulodelMen Insertardentro deVisual Basicy escribe el siguiente cdigo:Sub Auto_open()Load UserForm1UserForm1.ShowEnd SubLa magia esta en el procedimientoAuto_open()que permite ejecutar automticamente lo que se encuentre dentro de el cuando abras un libro que contenga este cdigo, en este ejemplo cuando se abre el libro se activa el formulario 1 que programe.As que todo lo que agregues dentro de este procedimiento se ejecutara automticamente cuando abras un libro, que te parece.A continuacin veremos como ordenar una informacin por orden alfabtica ascendente, es un cdigo muy completo y bueno que te permite localizar los datos y ordenarlos, sin pasarse un rengln en blanco.Observemos el siguiente ejemplo y aprendamos de el:Si se fijan en la siguiente pantalla tengo datos en una hoja que empinan en el renglnA10y terminan enC16, el siguiente cdigo detectara donde debe detenerse para poder ordenar los datos. Es necesario crear el cdigo para ordenar datos, pero aqu yo te lo muestro:

Programa esto en el botn1Private SubCommandButton1_Click()Rem este cdigo localiza el ultimo registro por medio del renglnRange("a10").SelectDo While ActiveCell EmptyActiveCell.Offset(1, 0).SelectLoopRem llega hasta el a17 donde no hay informacin y se regresa un rengln para ser exacto con la siguiente lnea.ActiveCell.Offset(-1, 0).SelectRem este cdigo localiza la ltima columna del ltimo datoDo While ActiveCell EmptyActiveCell.Offset(0, 1).SelectLoopActiveCell.Offset(0, -1).SelectRem esta lnea guarda en la variable celdaactiva la celda exacta donde esta el ultimo dato de la ultima columna de informacin, en este caso C16.celdaactiva = ActiveCell.AddressRem este cdigo toma el rango desde A10 donde empieza la informacin, hasta donde encontr el ultimo dato C16, que lo guarda la variable celdaactiva. Selecciona de A10 hasta C16.Range("A10:" + celdaactiva).SelectRem este cdigo ordena los datos en orden ascendente, el cdigo fue generado en Excel, as que si no sabes generarlo solo copialo de aqu.Selection.Sort Key1:=Range("A10"), Order1:=xlAscending, Header:=xlGuess, _OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottomEnd SubAs es como funciona este cdigo de Macros de Excel ordenando exactamente desde A10 hasta donde estn los datos finales.Bueno ahora para convertir la informacin a Minscula o Mayscula es muy parecido el cdigo, solo obsrvalo:Private SubCommandButton1_Click()Range("a10").SelectDo While ActiveCell EmptyActiveCell.FormulaR1C1 =LCase(ActiveCell)ActiveCell.Offset(1, 0).SelectLoopEnd SubAs es la magia esta enLcaseque convierte a Minsculas yUcasea Maysculas, empieza en A10 y hasta que no encuentra datos deja de convertir a Minsculas.El siguiente Formulario y cdigo muestra la fuerza de cmo se puede consultar y modificar el dato que se encontr.

Etiqueta 4,escrbele el numero 9 dentro.

Crea la siguiente Interfaz, 4 Etiquetas, 3 Textbox y 3 BotonesCopia el siguiente cdigo:Private Sub CommandButton1_Click()Rem si no se escribe nada en los Textboxs a la hora de insertar escribe No TieneIf TextBox1 = EmptyThenRange("A9").FormulaR1C1 = "No Tiene"If TextBox2 = EmptyThenRange("B9").FormulaR1C1 = "No Tiene"If TextBox3 = EmptyThenRange("C9").FormulaR1C1 = "No Tiene"Range("A9").SelectSelection.EntireRow.InsertTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubPrivate Sub CommandButton2_Click()On Error GoTo noencontroRem Cdigo para buscar, ya lo conocemosCells.Find(What:=TextBox1, After:=ActiveCell, LookIn:=xlFormulas, LookAt _:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _False).ActivateActiveCell.Offset(0, 1).SelectTextBox2 = ActiveCellActiveCell.Offset(0, 1).SelectTextBox3 = ActiveCellRem la etiqueta 4 toma el valor del rengln activo y permite modificar la informacin que encontr, ya que modifiques la informacin presionas el botn actualizar.Label4 = ActiveCell.Rownoencontro:End SubPrivate Sub CommandButton3_Click()Rem Vuelve a indicar el rengln 9 para escribir en los TextboxsLabel4 = "9"Range("a9").SelectTextBox1 = EmptyTextBox2 = EmptyTextBox3 = EmptyTextBox1.SetFocusEnd SubPrivate Sub TextBox1_Change()Rem si nos damos cuenta la etiqueta 4 sirve para llevar el rengln donde introducimos los datoso los modificamos, asi que cada textbox que programemos debe llevar estas lineas.Range("A" + Label4).FormulaR1C1 = TextBox1End SubPrivate Sub TextBox2_Change()Range("B" + Label4).FormulaR1C1 = TextBox2End SubPrivate Sub TextBox3_Change()Range("C" + Label4).FormulaR1C1 = TextBox3End SubBueno amigos, espero les sea de provecho los ejemplos mostrados, por lo tanto nos vemos en la prxima edicin, con mas de Macros en Excel.

MACROS EN EXCELParte VBienvenidos amigos a la quinta parte de Macros en Excel y Visual Basic, hoy nos toca aprender mas sobre este interesante curso de Macros, en el cual trabajaremos con grficos en Excel, veremos como se puede generar una grafica desde un cdigo generado y alterado por nosotros mismos.

Si observamos los datos que vamos a graficar nos damos cuenta que en la columnaAse encuentran losvalores ejes (X)yen la columnaBlosvalores series (Y), estos datos son necesario para efectuar una grafica que podra quedar asEsta grafica muestra las edades de 5 personas, los nombres sonlos valores ejesy la edadlos valores series, ahora veremos como se puede detectar estos datos por medio de una MacroAl graficar estos datos se genero el siguiente cdigo:SubMacro1()1. Range("A5:B10").Select2. Charts.Add3. ActiveChart.ChartType = xlColumnClustered4. ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumns5. ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"End Sub1. La primer lnea indica el rango donde estn los datos,valores ejes y valores series,2. La segunda lnea indica que se agrega una grafica3. La tercera lnea indica el tipo de grafica que se desea4. La cuarta lnea indica como se acomodan los datos en la grafica5. La quinta lnea indica donde se muestra la grafica, si en la misma hoja o en una sola hoja.Nota.Los nmeros de 1 al 5 no van en el cdigo, solo los puse para poder explicar las lneasA continuacin se muestran algunos de los diferentes tipos de graficasLnea 3:

ActiveChart.ChartType = xlColumnClustered

ActiveChart.ChartType = xlBarClustered

ActiveChart.ChartType = xlLineMarkers

ActiveChart.ChartType = xlPie

ActiveChart.ChartType = xlXYScatter

ActiveChart.ChartType = xlAreaStacked

ActiveChart.ChartType = xlDoughnut

ActiveChart.ChartType = xlRadarMarkers

ActiveChart.ChartType = xlCylinderColClustered

ActiveChart.ChartType = xlConeColClustered

ActiveChart.ChartType = xlPyramidColClustered

Si tu agregas al final del cdigo principal alguna lnea del tipo de grafico que te gusto, ese se activara, por ejemplo:SubMacro1()Range("A5:B10").SelectCharts.AddActiveChart.ChartType = xlColumnClusteredActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumnsActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"ActiveChart.ChartType = xlPyramidColClustered.End SubEste cdigo se puede programar en un botn o cualquier otro control deVisual Basic.A continuacin se muestra como se acomodan los datosLnea 4:

ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlRowsEn esta lnea se muestra la grafica porRengln

ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumnsEn esta lnea se muestra la grafica porColumnaEsta es la forma en que se muestran los datos de lo que habla lalnea 4.Lalnea 5habla de que si la grafica queda en la misma hoja o simplemente toma una hoja para ella, por ejemplo:ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Grafico 1"Esta lnea indica que la grafica tenga su propia hoja y que su nombre seaGrafico 1.En este ejemplo ejecuto un cdigo con cada una de las caractersticas explicadas en las5 lneas.Range("A5:B10").SelectCharts.AddActiveChart.ChartType = xlColumnClusteredActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumnsActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"ActiveChart.ChartType = xlPyramidColClusteredActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= xlColumnsActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Grafico 1" Tipo de Grafico Comose acomodan los datos Como se muestra la grafica, en este caso en una sola hojaElabora el siguiente formulario con el siguiente cdigo, para observar los diferentes tipos de grficos y la forma en que se acomodan los datos:

Dibuja dos Listbox y un Botn y pega el cdigo dentro del formulario.Private Sub CommandButton1_Click()Rem este cdigo genera la Grafica en la hoja1Range("A5:B10").SelectCharts.AddActiveChart.ChartType = xlColumnClusteredActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumnsActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1"Rem agrega los diferentes tipos de grafica al Listbox1ListBox1.AddItem "xlColumnClustered"ListBox1.AddItem "xlBarClustered"ListBox1.AddItem "xlLineMarkers"ListBox1.AddItem "xlPie"ListBox1.AddItem "xlXYScatter"ListBox1.AddItem "xlAreaStacked"ListBox1.AddItem "xlDoughnut"ListBox1.AddItem "xlRadarMarkers"ListBox1.AddItem "xlCylinderColClustered"ListBox1.AddItem "xlConeColClustered"ListBox1.AddItem "xlPyramidColClustered"Rem agrega las diferentes formas de acomodar los datos al Listbox2ListBox2.AddItem "Renglon"ListBox2.AddItem "Columna"End SubPrivate Sub ListBox1_Click()Rem este cdigo da el tipo de grafica al dar clic en el Listbox1If ListBox1 = "xlColumnClustered" Then ActiveChart.ChartType = xlColumnClusteredIf ListBox1 = "xlBarClustered" Then ActiveChart.ChartType = xlBarClusteredIf ListBox1 = "xlLineMarkers" Then ActiveChart.ChartType = xlLineMarkersIf ListBox1 = "xlPie" Then ActiveChart.ChartType = xlPieIf ListBox1 = "xlXYScatter" Then ActiveChart.ChartType = xlXYScatterIf ListBox1 = "xlAreaStacked" Then ActiveChart.ChartType = xlAreaStackedIf ListBox1 = "xlDoughnut" Then ActiveChart.ChartType = xlDoughnutIf ListBox1 = "xlRadarMarkers" Then ActiveChart.ChartType = xlRadarMarkersIf ListBox1 = "xlCylinderColClustered" Then ActiveChart.ChartType = xlCylinderColClusteredIf ListBox1 = "xlConeColClustered" Then ActiveChart.ChartType = xlConeColClusteredIf ListBox1 = "xlPyramidColClustered" Then ActiveChart.ChartType = xlPyramidColClusteredEnd SubPrivate Sub ListBox2_Click()If ListBox2 = "Renglon" ThenActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlRowsEnd IfIf ListBox2 = "Columna" ThenActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("A5:B10"), PlotBy:= _xlColumnsEnd IfEnd SubAntes de ejecutar estaMacrollenas los datos anteriores en la hoja1 deExcelEn este archivo indexo un ejemplo de un libro de cmo se puede generar unaMacroque realice 25 graficas, esto por medio un modulo, este ejemplo es apoyado por su servidor hacia una persona que deseaba realizar este trabajo. Espero le sea de utilidad el cdigo.

MACROS EN EXCELParte VIBienvenidos amigos a la sexta parte deMacros en Excel y Visual Basic, estamos listos para ver mas sobre este interesante curso, en este caso veremos como se pueden archivar los datos de una hoja en un archivo aparte. Aprenderemos a trabajar conarchivos secuncialesenVisual Basic. Losarchivos secuncialesson aquellos que al registrar sus datos llevan una secuencia, por ejemplo si registro 5 nombres llevaran un orden del 1 al 5, en cambio existen tambin losarchivos aleatorios, pero ellos no respetan la secuencia, por ejemplo los 5 nombres podran quedar en cualquier posicin del 100 en adelante, del 300 en adelante, del 10 en adelante, de donde quieras ponerlos, tu indicas en donde quieres que queden los 5 nombres, pueden quedar hasta separados y no respetar una secuencia.El problema de losarchivos secunciales, es que si introduces algunos smbolos en la captura pueden alterar el archivo y no funcionar correctamente, por eso se recomienda filtrar los datos con algn cdigo o simplemente no capturar smbolos.

En esta hoja podemos observar 5 nombres, la intencin ser archivarlos aparte y hacerlos desparecer de la hoja, para despus volverlos aparecer en la hoja. A esto se le llamara Registro de datos y Consulta de datos.

Iremos aVisual BasicconAlt+F11y Insertaremos unUserForm,en el cual dibujaremos dos botones, uno con el nombre deRegistroy Otro con el Nombre deConsulta.Ahora a programar el botn Registro, para poder archivar los nombres.Private Sub CommandButton1_Click()Rem se translada a la celda a8Range("a8").SelectRem si no hay ningn dato en a8 que no archive de nuevoIf ActiveCell = Empty Then GoTo salteRem abre un archivo en la unidad c con el nombre de datos.txtRem en forma de aadir Temporal (Output) en el rea de almacenamiento #1Open "c:\datos.txt" For Output As 1Rem activa una etiqueta para poder regresarregresa:Rem escribe el dato de la celda activa en el archivoWrite #1, ActiveCellRem borra el dato de la celdaActiveCell = EmptyRem baja un rengln para el siguiente nombreActiveCell.Offset(1, 0).SelectRem si la celda esta vaca que no regrese yaIf ActiveCell = Empty Then GoTo salteRem regresa a escribir el siguiente nombre en el archivoGoTo regresa:salte:Rem se acaboRem cierra el archivoClose #1End SubLos datos quedaran archivados en la unidad y sern devueltos cuando presiones el botn consulta. Que a continuacin se muestra:Ahora a programar el botn consultaPrivate Sub CommandButton2_Click()Rem se translada a la celda a8Range("a8").SelectRem abre un archivo en la unidad c con el nombre de datos.txtRem en forma de Leer (input) en el rea de almacenamiento #1Open "c:\datos.txt" For Input As 1Rem esto significa hazlo mientras no sea fin del archivoRem esto quiere decir que no deje de leer los datosRem hasta que no se llegue al ultimo de ellosDo While Not EOF(1)Rem lee un datoInput #1, nombreRem lo escribe en la celdaActiveCell.FormulaR1C1 = nombreRem baja un rengln para el siguiente nombreActiveCell.Offset(1, 0).SelectRem activa el ciclo Do While-que regrese hastaRem que se cumpla la condicinLoopRem cierra el archivoClose #1EndSubQue te parece archivar los datos aparte sin que nadie pueda observarlos, esta es la magia de los archivos secunciales. Este ejemplo viene indexado en un archivo con el nombre deMacros VI.El siguiente cdigo archiva el nombre, la direccin y el telfono en el archivo, crea un formulario igual con dos botones.Private Sub CommandButton1_Click()Rem se traslada a la celda a8Range("a8").SelectRem si no hay ningn dato en a8 que no archive de nuevoIf ActiveCell = Empty Then GoTo salteRem abre un archivo en la unidad c con el nombre de datos.txtRem en forma de aadir Temporal(output) en el rea de almacenamiento #1Open "c:\datos.txt" For Output As 1Rem activa una etiqueta para poder regresarregresa:Rem captura el nombre en una variablenombre = ActiveCellRem borra el dato de la celdaActiveCell = EmptyRem se mueve una columna a la derechaActiveCell.Offset(0, 1).SelectRem captura la direccion en una variabledireccion = ActiveCellRem borra el dato de la celdaActiveCell = EmptyRem se mueve una columna a la derechaActiveCell.Offset(0, 1).SelectRem captura el telefono en una variabletelefono = ActiveCellRem borra el dato de la celdaActiveCell = EmptyRem escribe los datos nombre, direccion y telefono en el archivoWrite #1, nombre, direccion, telefonoRem baja un rengln para el siguiente nombreActiveCell.Offset(1, 0).SelectRem retrocede dos columnasActiveCell.Offset(0, -2).SelectRem si la celda esta vaca que no regrese yaIf ActiveCell = Empty Then GoTo salteRem regresa a escribir el siguiente nombre en el archivoGoTo regresa:salte:Rem se acaboRem cierra el archivoClose #1End SubPrivate Sub CommandButton2_Click()Rem se translada a la celda a8Range("a8").SelectRem abre un archivo en la unidad c con el nombre de datos.txtRem en forma de Leer (input) en el rea de almacenamiento #1Open "c:\datos.txt" For Input As 1Rem esto significa hazlo mientras no sea fin del archivoRem esto quiere decir que no deje de leer los datosRem hasta que no se llegue al ultimo de ellosDo While Not EOF(1)Rem lee los datosInput #1, nombre, direccion, telefonoRem escribe en la celda el nombreActiveCell.FormulaR1C1 = nombreRem se mueve una columna a la derechaActiveCell.Offset(0, 1).SelectRem escribe en la celda la direccionActiveCell.FormulaR1C1 = direccionRem se mueve una columna a la derechaActiveCell.Offset(0, 1).SelectRem escribe en la celda el telefonoActiveCell.FormulaR1C1 = telefonoRem baja un rengln para el siguiente nombreActiveCell.Offset(1, 0).SelectRem retrocede dos columnasActiveCell.Offset(0, -2).SelectRem activa el ciclo Do While-que regrese hastaRem que se cumpla la condicinLoopRem cierra el archivoClose #1End SubEste ejemplo viene en el archivoMacros VI-2.Tambin se puede consultar sin necesidad de leer los datos en la hoja, esto quiere decir leyendo directo del archivo y trayendo los datos al formulario, en el siguiente ejemplo, se programa el botn consulta en formulario.

Dibuja el siguiente formulario, los dos primeros botones es el mismo cdigo anterior, pero el tercer botn incluye el siguiente cdigo:Private Sub CommandButton3_Click()Open "c:\datos.txt" For Input As 1Do While Not EOF(1)Input #1, nombre, direccion, telefonoIf nombre = TextBox1 ThenTextBox2 = direccionTextBox3 = telefonoEnd IfLoopClose #1End SubEste ejemplo viene en el archivoMacros VI-3Solo corra el formulario y escriba el nombre que desea consultar y presione el tercer botn.Usted podr consultar cualquiera de los nombres que se encuentren dentro del archivo, sin necesidad de que existan en la hoja, claro esta que primero es necesario presionar el botn registro para archivarlos, pero despus se pueden manipular.Bueno espero que sea de su agrado esta parte y que practiquen mucho los archivos secuenciales.