You are on page 1of 8

t

MACROS EN EXCEL
Parte IV
Aprenderemos comoejecutarunahoja deExcel y activarautomáticamente
un Macro,como
ordenar información, como convertirla en mayúscula o minúscula y como crear
modificaciónautomáticade X información

Empezaremos con comoagregarinformacióna un Comboboxy un Listbox, primeramente


deberáscrear el siguienteformulario dentro de Visual Basic, recuerdadesdeExcel se
utiliza la tecla ALT + F1l para entrar a Visual Basic, seguidodel Menú Insertar y
despuésUserform, buenocreo que ya lo sabes.InsertaUn Cq yun xyu n
Botón.

Ahora lalnterfaz vamos


a el botón.veremoscomo se
puede agregar información por
mediode códisoa estosdoscontroles.

Da doble clic en el Botón y escribelas


siguientes lineas dentro del
procedimiento.

PrivateSubCommandButtonl_ClickQ
ComboBoxl.Adrlltemf'Jorge"
ComboBoxl.Adilltem " Hochstettter"
ComboBoxl.Addltem"I)iez"

ListBoxl.Addltem " Jorge'I


ListBoxl.Addltem "Hochstettter"
ListBoxl.Addftem "Diez"
End Sub
Buenovamosaanalizarel significadodeestaslíneas:

ComboBoxl.Addltem"Jorge "

La opciónAddltem significaque vas a agregarun dato de texto, por lo tanto se entiende


comovasa agregara JuanJoséal Comboboxl, por lo tantoyo puedoagregarlos datosque
quieraa un Comboboxo un Listbox con la opciónAddltem,entoncesal presionarel botón
apareceránlos datos que se encuentraescritosy podrásseleccionarcualquierade ellos,
recuerdaque la informaciónla vasa agregarsegúntus necesidades.
Ahora si deseasaE:egarnúmerosa un Comboboxo ListBox escribeel siguientecódigoen
un botón:

PrivateSubCommandButtonl_Click0

For X=l to 50
Listboxl.Addltem str(x)
Next

End Sub

La InstrucciónFor-Next es un ciclo contadorque te permite contardesdeun numerohasta


otro. Por ejemplole digo que cuentedesdeel t hastael 50 y lo que se encuenfiedentrodel
ciclo For-Next se ejecutarael númerode veces,1aX es una variablenuméricaque guaña
el valor, cadavezque el ciclo da una vuelta aumentaun numero,por 1otanto X va a valer
desdet hasta50, y la instrucciónStr es paraconvertirel valor nunérico de la X en valor
de Texto, ya que la opción Addltem guardasolo texto, claro esta que tambiénpuede
funcionarsin estainstrucciónen algunoscasos.

Por lo tanto el Listboxl va a guarda;rlos número del 1 al 50, sin necesidadde irlos
poniendode uno por uno, imagínatelo.

Listboxl.Addlfem "1"
Listboxl.AddI:tem"2"
' Listboxl..Addltem"3"

Bueno esto es para introducirledatosa un Listbox y Combobox,pero cornopuedousar


estosdatosparaenviarlosparaunacelda,en el sigUienteejemplote 1oexplico:

Da dobleclic en el Listbox y escribeel siguientecódigo:

PrivateSubListBoxl_Click0
Range("49").Select
ActiveCellFdrmulaRl C1 : ListBox
End Sub
Así de de fácil cadavezqueescojasun datoque seencuentreen un Listboxl lo enviaraa la
celda a9, escribiéndoloahí. Si 1o deseashacer lo puedeshacer en ur Combobox,solo
cambiaListboxl. por Comboboxl y seacabo.

Ahora si deseasagi:egarlos datosal Listbox o Combobox sin ningúnbotón quepresionar


escribeel siguientecódigo:

PrivateSubUserForm_ActivateQ

ComboBoxl.Addltem "Jorge"
ComboBoxl.Addltem "Hochstetter"
ComboBoxl.Addltem"I)iez"
ListBoxl.Addltem "Jorge"
ListBoxl.Addltem "Hochstetter"
ListBoxl.AddItem,, Dfez,,

End Sub

La Clave estaen el procedimientoUserForm-ActivateQestoquieredecir que cuando


se
activeel formulariocargaralo que tu le indiques,en estácasova a introducirlos datosal
Listboxl y Comboboxl automáticamente, quete parece,

Ahora si deseastomar información de una celda y enviarla a un Combobox o Listbox


escribeel siguientecódigoen un Botón:

PrivateSubCommandButtonl_Click$ SJ 4rcfriuo Edición ger Insertsr


formato Hprrám¡cntas Dalos
Range(t'a9r').Select ve¡tana t
-dpx

Do While ActiveCell o Empty r' Nombre


ActiveCell.Offset(1,0).Seleet B
ListBoxl,Addltem ActiveCell
e 16ffiGffi
Loop 11 EtuiaLopez
1? Juan$oler ,
End Sub l3 rMaria Soto
14 Li l i anaR áves
1E

{ ) > r\ -, Ho ia llx l. i, riI

Fdate bien" primeramentemuevo el rang{a la celda a9 porque ahí esta el inicio de mi


información,despuésla línea Do While Activecellc, fnpty significa Hazlomientrasla
celda no se encuentrevacía, la siguientelínea que es Áóti"JCett.Offset(1, 0).Selecf
significa Baja un Renglón, la siguientellnea ListBoxl.Addltem Activgcell, agregala
informaciónde la celdaal Listboxl y la línea Loop es partedel ciclo Do While,ii.átpr.
cierrael ciclo, como el For-Next. Por lo tanto todosloJ nombresque estendelantede a9
seránenviadosal Listboxl y cuandotope con la celda a15 que se encuentravacia la
condición del Do \ilhile parara la ejecuciónde su código. Esto funciona caminando
lengloneshaciaabajo,perosi deseasmovertehaciala derechapor columnassolocambiala
línea ActiveCetl.Offset(1,0).Select por ActiveCell.Offset(Q l).Select, quieredecir que
semuevapor columna,no por renglón. Activdell.Offset(Renglón, Columna).Select
Si cambiasel I por otro numerose moveráel numerode vecesque tu le indiques,por
ejemplosi quierobajar 10 renglonesde un golpe:

ActiveCell.Offset(l0, 0).Select

Si quieromovetme20 cotumnasa la derecha


ActiveCell.Offset(O'20).Select

Así funcionaesto.

Ahora veremoscomoseejecutaunamacroa la horade abrir un libro

Primeramenteinsertaun Modulo del Menú Insertar dentrode Visual Basic v escribeel


siguientecódigo:

SubAuto_openQ
Load UserForml
UserForml.Show
EndSub

La mag¡aestaen el procedimientoAuto_openQ que permite ejecutarautomáticamentelo


que se encuentredentro de el cuando abrasun libro que contengaeste código, en este
ejemplocuandoseabreel libro seactivael formulario 1 queprograme.

Así que todo lo que agreguesdentro de este procedimientose ejecutaraautomáticamerúe


cuandoabrasun libro, quete parece.

A continuaciónveremoscomoordenarunainformaciónpor ordenalfabéticaascendente, es
un cédigo muy completo y bueno que te permite localizar los datos y ordenarlos,sin
pasarseun renglónen blanco.

el siguienteejemploy aprendamos
Observemos de el:

Si sefijan en la siguientepantallatengodatosen unahoja queempinanen el renglónA10 y


terminanen C16, el siguientecódigodetectaradondedebedetenerse paftipoderordenarlos
datos.Es necesariocrearel códigoparaordenardatos,peroaquíyo te lo muestro:

ifl Arcftiwo Edción ecrmdto blerrffiimtós D.tos Veotm. Z


-
if 6 ¡E¡ Éd¡ Et -ts 8rp.-.- -:R-=-qgá+ &

l O,Csn suelo ( Jchoa 31-?47-',t3


1 'l - Ra r non M endo¡ á 3'l -247-14
12 Gl or ¡ a M endóza 31-247:16
-1 3 . Da nieI Lcer a 31-24V -1á
1 a ',_ n á mer Enr ¡ que et-átz-tz
15 Do ña cheto er -2+z-rs
16 Dá nna Ledeem a 31-2.4V -19'
iz '
>r \Ho¡al / xc¡lae 1 *¡¡;á ¡
Programaestoen el botónl

PrivateSubCommandButtonl_Cticke

li'r..],,Úir¡5,{.'i1,..':,'l:l';li;'].'.;.l.::!i';:i:,"',.i¡j¡í'¡;1¡¡11¡;,ll'...*Í:ll:31i:.;'ii¡,.*i,neiiiÍ'i',lilr.,;Lli¡ri;i::!il.

Range("a10").Select

Do While ActiveCell + Empty


ActiveCell.Offset(1,O).Select
Loop

.i .';1,,'i ij,i¿,;r, :¡:i,ii;;t¡ ::':t:.''.:. i¡ ,',;1.i,¡ii;i+.rrrc, j,:rr,!_l'j.liíii.ii i.?l',l'Si:i i¡1Úi ¡,'¡¡i']*¡l;¿nr'r,I,j::1,


ü-íit iiirl:''
:::;:a r.:,',.A.' J}ii¡ .[?¡ SÍ.!',lr¡,ir3lltü,i-,$,,1
i¡l,i-;,,.

ActiveCelLoffset(-1,0).Select

jil.4¡,1 e.',i.:'.l;r,i;¡'; ji'¡l,ji:i:;I;r, i,¿,,lll:ii:i:ii,.c¡;,üij::tÍ¡i,+ti


{l¡ji ú!i:xt.'jiir i L :::i ',fi i

Do While ActiveCell + Empty


ActiveCell.Offset(0, I ).Select
Loop
Activdell.Offset(0, -1).Select

}.¡;;*.¿i.-.Í..tií¡:ttsg¿{arü'¿e¡¡l¿l'¡n.'lg.'itll+q,.:[{i,s;¡etl;',n|tll¿l'li,...dil{r;1iÉ.j:.ül,i,',¡',*¡¡,.r'{*tlli,¿*l¡llÍÉr¡¡l+
.i:¡ic''"ri.e]iii uii¡r;i:o, i;li;rt:,:-';i.l:,:,
ij,. itÍ.ief;.i,r,lt¡r:i:i,iii,i¡
, e;¿ +:Ll,:r;,i¡,t,,::
r'l:,i.

celdaactiva= ActiveCell.Address

. . ii: l] . . . ¡ . lt ' :.,i .:' .r:" i ' ti ,l i f¡i i ü r' .,.u l ¡;i i ' ,Í1 i i i ' .1r, irii-rr.l
¡l;
.j¡.l'li.ri]]']s!;.óe[i;udú¡ti.l,.,'j,¿1;aÍ¡¡,.r.']liií.,.+Juc.l'g;ti:;l.i;n;'ri'gl,l;;'^¡.i¡i,j¡q¡.;i;l¿i.::::,;-,i'.1'
il,i. ,tl,.ii.i
llir¡:lg;,in iil-t ó

Range("Al 0:" + celdaactiva).Select

iü: ; . t , *s lt . *¡ :o i ri i g u l 4 .:!.,$ ;-rí¡f,t* s ' .l e .l ,l ¡..' tn+ i r' uü{,x:l .¡l ' ' 3* {,.fg¡.e¡i ,}f;l l o::ü..l i rí,;f,]l ' g." rl fr¡r . ; .
¡i,:',;:',r,ai'! qr.ltlrtÍ in-i ¡;r¡nil+:;; S{.rlii:i,t,¡.rit:i¡:,.1t:t:,¡:j,t¡,i,
¿i:tr,ltrti,ijrj',tlrliil,i,¡

Selection.SortKeyl:=Range("a10r'), orderl:=xl,Ascending, Header:=xlGuesso


OrderCustom¡=l, Ufatchbase:=fu'ahe, -
Orientation::xlTopToBottom

End Sub

Así es como funciona estecódigo de Macros de Excel ordenandoexactamentedesdeAl0


hastadondeestanlos datosfinales.
Bl?."o ahorapara convertir la información a Minúscula o Mayúsculaes
muy parecidoel
código,soloobsérvalo:

PrivateSubCommandButtonl_Clickfl

Range("a10").Select

Do While ActiveCell + Empty


ActiveCell.FormulaR1CI : LCase(ActiveCell)
ActiveCell.Offset(l, 0).Select

Loop

End Sub

Así es la magia esta en Lcase que convierte a Minúsculasy Ucase


a Mayúsculas,
empiezaen A10 y hastaqueno encuentradatosdejade convertira Minúsculas.

El siguienteFormularioy códigomuestralafuerzade cómosepuedeconsultary


modificar
el dato que seencontró.

Etiqueta 4, escríbeleel numero


9 dento.

crea la siguienteInterfaz,4 Etiquetas,3 Textboxy 3 Botones

Copiael siguientecódigo;

PrivateSubCommandBuüonl_Clickfl

Re¡usi no seescribensd¿en lcs Textbox¡a Ia hora de insertareseribeNo Tiene

If rextBoxl : EmptyThenRange("A9").ForrrulaRlcl : ,,NoTiene"


If TextBox2: EmptyThenRange("89").FonnulaRlcl: ,,NoTiene',
If TextBox3: Empty ThenRange("C9,').FormulaR1Cl
: *No Tiene"

Range("A9").Select
Selection.EntireRow.Insert
TextBoxl : Empty
TextBox2 : Empty
TextBox3: Empty
TextBoxl.SetFocus

End Sub

PrivateSubCommandButton2_Click$

On Error GoTo noenconfio

ft.emCédigoparfi bu$car,ya lo conocemüs

cells.Find(what::TextBoxl, After::Activecell, Lookln::xlFormulas,LookAt


_
:dPart, searchorder:=ilByRows,searchDirection::xlNext,Matchcase::
False).Activate

ActiveCell.Offset(0,I ).Select
TextBox2: ActiveCell
ActiveCell.Offset(0,1).Select
TextBox3: ActiveCell

Rem la etiquefa4 toma el valcr del renglénaetivoy per"rnitem aelificar la infCI,r'n¡


ae-i{in
f-!üeeüerrÍrtr'ó,.1'¿
14ue,Irrdifiquesta üm:for¡¡racién
pr"esicna-s
etrhoúénactualizar.
Label{ : ActiveCell.Row

noencontro:

End Sub

Private Sub CommandButton3_Click0

Rem vuelve a indicar eürenglún 9 par* escribir en ios TextL¡oxs

Label4 - 'r9rl
Range("a9").Select
TextBoxl : Empty
TextBox2 : Empty
TextBox3 : Empty
Textlloxl.SetFocus
End Sub

PrivateSubTextBoxl_ChangeQ
Rem si nosdamoscuentala etiqueta4 sirve para llevar el renglén donde introriueimss
nosdatos o lcs ¡cr*tiil}*armos,'nsá
que ca¿{*texth{ix qile F¡"ogrf¡ffiermos
debe l!,ev;¡restas
Iimeas.
Range("A"+ Label4).FormulaRl C I : TextBoxl
End Sub

Private SubTextBox2_ChangeQ
Range("B"+ Label4).FormulaRl
Cl : TextBox2
End Sub

PrivateSubTextBox3_Change0
Range("C"+ Label4).FormulaRl
Cl : TextBox3
End Sub

You might also like