Cómo Utilizar Visual Basic para Aplicaciones (VBA) para Cambiar Los Formularios de Usuario en Excel PDF
Cómo Utilizar Visual Basic para Aplicaciones (VBA) para Cambiar Los Formularios de Usuario en Excel PDF
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Soporte
Microsoft puso fin al soporte tcnico para Office 2003 el 8 de abril de 2014. Este cambio ha
afectado a las actualizaciones de software y las opciones de seguridad. Sepa qu significa esto
en su caso y cmo puede mantenerse protegido.
RESUMEN
https://support.microsoft.com/eses/kb/829070
1/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
En este artculo se describe cmo cambiar los formularios de usuario mediante programacin
en Microsoft Excel. Incluye ejemplos y Microsoft Visual Basic para Aplicaciones macros VBA
que muestran cmo sacar partido de las capacidades de los formularios de usuario y cmo
utilizar los controles de ActiveX que estn disponibles para los formularios de usuario.
Una introduccin a los principios bsicos de los formularios de usuario describe cmo
mostrar los formularios de usuario, cmo ocultar temporalmente UserForms y cmo
descartar UserForms. Tambin se muestra cmo utilizar los eventos ms comunes que estn
asociados con los formularios de usuario, el evento Initialize , el evento Click y el evento
Terminate . Uno o ms de los siguientes ejemplos muestran cmo utilizar cada uno de los
siguientes controles de ActiveX en un formulario de usuario:
Control Label
Control TextBox
Control CommandButton
Control ListBox
Control ComboBox
Control Frame
Control OptionButton
Control de casilla de verificacin
Control ToggleButton
Control TabStrip
Control multiPage
Control ScrollBar
Control SpinButton
Control RefEdit
Control de imagen
INTRODUCCIN
En este artculo se describe cmo utilizar VBA para realizar cambios en los formularios de usuario
en Excel.
https://support.microsoft.com/eses/kb/829070
2/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
MS INFORMACIN
Microsoft proporciona ejemplos de programacin nicamente con fines ilustrativos, sin ninguna
garanta expresa o implcita. Esto incluye, pero no se limita a, las garantas implcitas de
comerciabilidad o idoneidad para un fin determinado. Este artculo asume que est familiarizado
con el lenguaje de programacin que se muestra y con las herramientas que se utilizan para crear
y depurar procedimientos. Los ingenieros de soporte tcnico de Microsoft pueden explicarle la
funcionalidad de un determinado procedimiento, pero no modificarn estos ejemplos para
ofrecer mayor funcionalidad ni crearn procedimientos que cumplan sus requisitos especficos.
UserFormName. Mostrar
Para mostrar un formulario de usuario denominado UserForm1, utilice el cdigo siguiente:
UserForm1.Show
Puede cargar un formulario de usuario en la memoria sin que se muestre realmente. Puede tomar
un UserForm complejo varios segundos en aparecer. Debido a que un formulario de usuario se
puede cargar en la memoria, usted puede decidir cundo incurrir en esta sobrecarga. Para cargar
UserForm1 en la memoria sin mostrarlo, utilice el cdigo siguiente:
LoadUserForm1
Para mostrar el formulario de usuario, debe utilizar el mtodo Show que se ha mostrado
anteriormente.
UserForm1.Hide
https://support.microsoft.com/eses/kb/829070
3/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Para obtener informacin adicional, haga clic en el nmero de artculo siguiente para verlo en
Microsoft Knowledge Base:
213747 XL2000: cmo mover entre formularios de usuario personalizado con botones de
comando
UnloadUserForm1
UnloadMe
4/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
formulario UserForm.
5. En el mdulo, escriba el cdigo siguiente:
PrivateSubUserForm_Click()
Me.Height=Int(Rnd*500)
Me.Width=Int(Rnd*750)
EndSub
PrivateSubUserForm_Initialize()
Me.Caption="EventsEventsEvents!"
Me.BackColor=RGB(10,25,100)
EndSub
PrivateSubUserForm_Resize()
msg="Width:"&Me.Width&Chr(10)&"Height:"&Me.Height
MsgBoxprompt:=msg,Title:="ResizeEvent"
EndSub
PrivateSubUserForm_QueryClose(CancelAsInteger,CloseModeAsI
nteger)
msg="NowUnloading"&Me.Caption
MsgBoxprompt:=msg,Title:="QueryCloseEvent"
EndSub
PrivateSubUserForm_Terminate()
msg="NowUnloading"&Me.Caption
MsgBoxprompt:=msg,Title:="TerminateEvent"
EndSub
5/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
el formulario UserForm. Dado que cre un procedimiento para el evento Resize , recibe dos
cuadros de mensaje despus de hacer clic en el formulario UserForm. El evento Resize se produce
dos veces porque el cdigo tras el evento Click cambia la propiedad Width y la propiedad Height
del objeto UserForm.
Cierre el formulario UserForm, inicia el evento QueryClose . El evento QueryClose muestra un
cuadro de mensaje que contiene el ttulo que le asign el UserForm en el cdigo para el evento
Initialize . Puede utilizar el evento QueryClose cuando desea realizar un determinado conjunto de
acciones si el usuario cierra el formulario UserForm.
El evento Terminate , a continuacin, genera un cuadro de mensaje que indica que el ttulo de
UserForm UserForm1. El evento Terminate se produce despus de que el formulario de usuario se
quita de la memoria y el ttulo de UserForm devuelve a su estado original.
PrivateSubCommandButton1_Click()
UnloadMe
EndSub
PrivateSubUserForm_QueryClose(CancelAsInteger,CloseModeAsI
nteger)
IFCloseMode=vbFormControlMenuThen
https://support.microsoft.com/eses/kb/829070
6/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Cancel=True
Me.Caption="ClicktheCommandButtontocloseMe!"
EndIf
EndSub
Cdigo de VBA
Excel incluye quince controles diferentes que puede utilizar en los formularios de usuario. Esta
seccin contiene varios ejemplos que utilizan estos controles mediante programacin.
Nota: El cdigo de VBA que se incluye en este artculo no contiene ejemplos que afectan a todas
las propiedades y los eventos para los controles. Si se necesita, puede utilizar la ventana
Propiedades para ver una lista de las propiedades que estn disponibles para un control. Para ver
una lista de propiedades, en el men Ver , haga clic en Ventana Propiedades.
7/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
modo de diseo. En modo de diseo, puede editar los controles y puede cambiar las propiedades
de un control en un formulario de usuario en la ventana Propiedades. Para mostrar la ventana
Propiedades, en el men Ver , haga clic en Ventana Propiedades.
Nota: Los controles no responden a eventos mientras est en modo de diseo. Cuando se ejecuta
un cuadro de dilogo para que se muestre la forma en que los usuarios ver, el programa est en
modo de ejecucin. Los cambios que realice en las propiedades de un control en modo de
ejecucin no se conservan cuando se descarga de la memoria el UserForm.
Nota: Controles responden a eventos en modo de ejecucin.
UserFormName.Controlname.Property = Valor
Por ejemplo, si desea establecer la propiedad Text de un control TextBox denominado TextBox1
en un formulario de usuario denominado UserForm1 al valor de Bob, utilice el cdigo siguiente:
UserForm1.TextBox1.Text="Bob"
TextBox1.Text="Bob"
Al adjuntar cdigo a un objeto, el cdigo est asociado a uno de los eventos de ese objeto. En
muchos de los ejemplos de este artculo, adjuntar cdigo al evento Click del objeto
CommandButton .
Controles de etiqueta
Controles de etiqueta se utilizan principalmente para describir otros controles en un formulario
de usuario. El usuario no puede editar un control de etiqueta mientras se ejecuta el formulario
UserForm. Utilice la propiedad Caption para establecer o devolver el texto de un control de
etiqueta . Otras propiedades utilizadas para dar formato a un control Label incluyen la propiedad
Font y la propiedad ForeColor .
8/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubCommandButton1_Click()
WithLabel1
'Setthetextofthelabel.
.Caption="ThisisLabelExample1"
'Automaticallysizethelabelcontrol.
.AutoSize=True
.WordWrap=False
'SetthefontusedbytheLabelcontrol.
.Font.Name="TimesNewRoman"
.Font.Size=14
.Font.Bold=True
'Setthefontcolortoblue.
.ForeColor=RGB(0,0,255)
EndWith
EndSub
Controles TextBox
Controles TextBox se utilizan con frecuencia para obtener datos de un usuario. La propiedad Text
contiene la entrada que se realiza en un control TextBox .
9/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubCommandButton1_Click()
IfTextBox1.Text<>"userform"Then
MsgBox"PasswordisIncorrect.Pleasereenter."
TextBox1.Text=""
TextBox1.SetFocus
Else
MsgBox"Welcome!"
UnloadMe
EndIf
EndSub
10/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
cuadro de mensaje que indica que la contrasea es incorrecta, se desactiva el control de cuadro
de texto y, a continuacin, vuelva a escribir la contrasea. Al escribir una contrasea correcta,
recibir un mensaje de bienvenida, y se cierra el formulario UserForm.
Para obtener informacin adicional, haga clic en el nmero de artculo siguiente para verlo en
Microsoft Knowledge Base:
213555 XL2000: Ninguna propiedad de validacin de datos para UserForm TextBoxes
Controles CommandButton
Puede utilizar un control CommandButton para iniciar un procedimiento de VBA. El
procedimiento VBA normalmente est asociado al evento Click del control CommandButton .
Para utilizar un control CommandButton que un procedimiento que se ejecuta cuando se
produce el evento Click , siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregue un control CommandButton en el formulario UserForm.
5. Agregue un control Label al UserForm.
6. En la ventana cdigo, escriba el cdigo siguiente:
PrivateSubCommandButton1_Click()
red=Int(Rnd*255)
green=Int(Rnd*255)
blue=Int(Rnd*255)
CommandButton1.BackColor=RGB(red,green,blue)
EndSub
11/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Controles ListBox
El propsito del control ListBox es presentar al usuario una lista de elementos para seleccionarlos.
Puede almacenar la lista de elementos de un control ListBox en una hoja de clculo de Excel. Para
rellenar un control ListBox con un rango de celdas en una hoja de clculo, utilice la propiedad
OrigenDeLaFila (RowSource) . Cuando se utiliza la propiedad SeleccinMltiple (MultiSelect) ,
puede configurar un control ListBox para que acepte varias selecciones.
PrivateSubListBox1_Click()
MsgBoxListBox1.Value
EndSub
12/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
2. En a1: a5 de las celdas de Sheet1, escriba los valores que desee usar para rellenar el control
ListBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
5. Agregue un control ListBox en el formulario UserForm.
6. En el men Ver , haga clic enPropiedades para ver la ventana de propiedades.
7. Escriba los valores que se indican para las siguientes propiedades del control ListBox :
Property
Value
MultiSelect 1frmMultiSelectMulti
RowSource
Sheet1!A1:A8
SubCommandButton1_Click()
'LoopthroughtheitemsintheListBox.
Forx=0toListBox1.ListCount1
'Iftheitemisselected...
IfListBox1.Selected(x)=TrueThen
'displaytheSelecteditem.
MsgBoxListBox1.List(x)
EndIf
Nextx
EndSub
13/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Control Frame
Para utilizar la propiedad OrigenDeLaFila (RowSource) para llenar un control ListBox desde un
rango de celdas en una hoja de clculo, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En a1: a5 de las celdas de Sheet1, escriba los valores que desee usar para rellenar el control
ListBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
5. Agregue un control ListBox en el formulario UserForm.
6. Agregue un control CommandButton en el formulario UserForm.
7. Haga doble clic en el CommandButton control todisplay la ventana de cdigo para el
formulario UserForm.
8. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de CommandButton1
:
PrivateSubCommandButton1_Click()
ListBox1.RowSource="=Sheet1!A1:A5"
EndSub
14/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
SubPopulateListBox()
DimMyArrayAsVariant
DimCtrAsInteger
MyArray=Array("Apples","Oranges","Peaches","Bananas","P
ineapples")
ForCtr=LBound(MyArray)ToUBound(MyArray)
UserForm1.ListBox1.AddItemMyArray(Ctr)
Next
UserForm1.Show
EndSub
Cmo utilizar un rango horizontal de celdas en una hoja de clculo para llenar un control
ListBox
Si establece la propiedad OrigenDeLaFila (RowSource) de un control ListBox en un rango
horizontal de celdas, slo el primer valor aparece en el control ListBox .
Para rellenar un control ListBox desde un rango horizontal de celdas utilizando el mtodo
AddItem , siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En las celdas a1: de E1 de Sheet1, escriba los valores que desee usar para rellenar el control
ListBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
https://support.microsoft.com/eses/kb/829070
15/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
SubPopulateListWithHorizontalRange()
ForEachxInSheet1.Range("A1:E1")
UserForm1.ListBox1.AddItemx.Value
Next
UserForm1.Show
EndSub
Cmo devolver varios valores de un control ListBox enlazado a varias columnas de datos
Puede dar formato a los controles de cuadro de lista para mostrar ms de una columna de datos.
Esto significa que el control ListBox muestra ms de un elemento en cada lnea de la lista. Para
devolver varios valores desde el elemento seleccionado en la lista, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. Escriba los datos siguientes en las celdas que estn onSheet1 indicado:
A1: ao
B1: regin
C1: ventas
A2: 1996
B2: norte
C2: 140
A3: 1996
B3: sur
C3: 210
A4: 1997
B4: norte
C4: 190
A5: 1997
B5: sur
C5: 195
https://support.microsoft.com/eses/kb/829070
16/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PropertyValue
BoundColumn1
ColumnCount3
ColumnHeadsTrue
RowSourceSheet1!A2:A5
9. Haga doble clic en el control ListBox control todisplay la ventana de cdigo para el control
ListBox .
10. En la ventana cdigo, escriba el cdigo siguiente:
PrivateSubListBox1_Change()
DimSourceDataAsRange
DimVal1AsString,Val2AsString,Val3AsString
SetSourceRange=Range(ListBox1.RowSource)
Val1=ListBox1.Value
Val2=SourceRange.Offset(ListBox1.ListIndex,1).Resize(1,
1).Value
Val3=SourceRange.Offset(ListBox1.ListIndex,2).Resize(1,
1).Value
Label1.Caption=Val1&""&Val2&""&Val3
EndSub
https://support.microsoft.com/eses/kb/829070
17/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Al hacer clic en una entrada en el control ListBox , la etiqueta cambia para mostrar los tres de los
elementos de esa entrada.
Cmo quitar todos los elementos de un control ListBox enlazado a una hoja de clculo
Para quitar todos los elementos de un control ListBox enlazado a una hoja de clculo, desactive el
valor que se almacena en la propiedad OrigenDeLaFila (RowSource) . Para quitar elementos de
un control ListBox enlazado a una hoja de clculo, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En a1: a5 de las celdas de Sheet1, escriba los valores que desee usar para rellenar el control
ListBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
5. Agregue un control ListBox en el formulario UserForm.
6. Haga clic en el control de cuadro de lista y haga clic en Propiedades.
7. En la propiedad OrigenDeLaFila (RowSource) , escriba Hoja1! A1: A5.
8. Agregue un control CommandButton en el formulario UserForm.
9. Haga doble clic en el CommandButton control todisplay la ventana de cdigo para el
control CommandButton .
10. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de CommandButton1
:
PrivateSubCommandButton1_Click()
ListBox1.RowSource=""
EndSub
Cmo quitar todos los elementos de un control de cuadro de lista que no est enlazado a una
hoja de clculo
https://support.microsoft.com/eses/kb/829070
18/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
No hay ningn comando VBA nico que quita todos los elementos de un control ListBox , si la
lista no est enlazada a una hoja de clculo. Para quitar todos los elementos de un control ListBox
que se rellena a partir de una matriz de Visual Basic, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregue un control ListBox en el formulario UserForm.
5. En el men Insertar , haga clic enmdulo para insertar una hoja de mdulo.
6. En la ventana cdigo, escriba el cdigo siguiente:
SubPopulateListBox()
DimMyArrayAsVariant
DimCtrAsInteger
MyArray=Array("Apples","Oranges","Peaches","Bananas","P
ineapples")
ForCtr=LBound(MyArray)ToUBound(MyArray)
UserForm1.ListBox1.AddItemMyArray(Ctr)
Next
UserForm1.Show
EndSub
PrivateSubCommandButton1_Click()
Fori=1ToListBox1.ListCount
ListBox1.RemoveItem0
NextI
EndSub
https://support.microsoft.com/eses/kb/829070
19/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Controles ComboBox
Puede utilizar el control ComboBox como un cuadro de lista desplegable, o como un cuadro
combinado, donde puede seleccionar un valor en una lista o escriba un nuevo valor. La propiedad
Style determina si el control ComboBox acta como un cuadro de lista desplegable o un cuadro
combinado.
Nota: Todos los ejemplos de la seccin anterior para el control ListBox pueden aplicarse tambin
al control ComboBox , excepto el ejemplo "Cmo obtener los elementos seleccionados en un
control ListBox de seleccin mltiple".
Cmo agregar un nuevo elemento a la lista si el control ComboBox no est enlazado a una
https://support.microsoft.com/eses/kb/829070
20/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
hoja de clculo
Cuando se escribe un valor que no est en la lista en el control ComboBox , desea agregar el
nuevo valor a la lista. Para agregar el nuevo valor que ha escrito en el control ComboBox , si el
control ComboBox no est enlazado a la hoja de clculo, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregue un control ComboBox al UserForm.
5. En el men Insertar , haga clic enmdulo para insertar una hoja de mdulo.
6. En la ventana cdigo, escriba el cdigo siguiente:
SubPopulateComboBox()
DimMyArrayAsVariant
DimCtrAsInteger
MyArray=Array("Apples","Oranges","Peaches","Bananas",
"Pineapples")
ForCtr=LBound(MyArray)ToUbound(MyArray)
UserForm1.ComboBox1.AddItemMyArray(Ctr)
Next
UserForm1.Show
EndSub
PrivateSubCommandButton1_Click()
DimlistvarAsVariant
listvar=ComboBox1.List
https://support.microsoft.com/eses/kb/829070
21/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
OnErrorResumeNext
'Iftheitemisnotfoundinthelist...
IfIsError(WorksheetFunction.Match(ComboBox1.Value,listvar,
0))Then
'addthenewvaluetothelist.
ComboBox1.AddItemComboBox1.Value
EndIf
EndSub
Cmo agregar un nuevo elemento a la lista si el control cuadro combinado est enlazado a
una hoja de clculo
Cuando un usuario escribe un valor que no est en la lista en el control ComboBox , desea
agregar el nuevo valor a la lista. Para agregar el nuevo valor que escribi en el control de cuadro
combinado a la lista, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En a1: a5 de las celdas de Sheet1, escriba los valores que desee usar para llenar el control
ComboBox .
3. Seleccione a1: a5 de las celdas de Sheet1.
4. En el men Insertar , elijanombrey, a continuacin, haga clic en definir.
En el cuadronombres en el libro , escriba ListRange y, a continuacin, haga clic en
Correcto. Esto crea el nombre definido ListRange. Puede utilizar el nombre definido
ListRange para enlazar la propiedad OrigenDeLaFila (RowSource) del control ComboBox a
la hoja de clculo.
5. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
6. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
7. Agregue un control ComboBox al UserForm.
8. En las Propiedades para ComboBox1, escriba Hoja1! ListRange como la
https://support.microsoft.com/eses/kb/829070
22/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
propiedadOrigenDeLaFila RowSource .
9. Agregue un control CommandButton en el formulario UserForm.
10. Haga doble clic en el CommandButton control todisplay la ventana de cdigo para el
control CommandButton .
11. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de CommandButton1
:
PrivateSubCommandButton1_Click()
DimSourceDataAsRange
DimfoundAsObject
SetSourceData=Range("ListRange")
Setfound=Nothing
'Trytofindthevalueontheworksheet.
Setfound=SourceData.Find(ComboBox1.Value)
'Iftheitemisnotfoundinthelist...
IffoundIsNothingThen
'redefineListRange.
SourceData.Resize(SourceData.Rows.Count+1,1).Name="L
istRange"
'Addthenewitemtotheendofthelistontheworkshee
t.
SourceData.Offset(SourceData.Rows.Count,0).Resize(1,
1).Value_
=ComboBox1.Value
'ResetthelistdisplayedintheComboBox.
ComboBox1.RowSource=Range("listrange").Address(externa
l:=True)
EndIf
EndSub
23/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Control OptionButton
A veces, puede ser til mostrar la lista de un control ComboBox cuando aparece por primera vez
un formulario de usuario. En el siguiente ejemplo utiliza el evento Activate del objeto UserForm.
Para mostrar la lista de un control ComboBox , siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En a1: a5 de las celdas de Sheet1, escriba los valores que desee usar para llenar el control
ComboBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
5. Agregue un control ComboBox al UserForm.
6. En las Propiedades para ComboBox1, escriba Hoja1! A1: A5 como la
propiedadOrigenDeLaFila RowSource .
7. Haga doble clic en el formulario UserForm para mostrar la ventana de theCode para el
formulario UserForm.
8. En la ventana cdigo, escriba el siguiente cdigo para el evento CommandButton Click :
PrivateSubUserForm_Activate()
ComboBox1.DropDown
EndSub
Controles ComboBox
Para mostrar automticamente la lista de un control ComboBox cuando se realiza una seleccin
en otro control ComboBox , siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En las celdas a1: a10 Hoja1, escriba los valores que desee usar para llenar el control
ComboBox .
3. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
4. En el men Insertar , haga clic enmdulo.
5. En la ventana de cdigo para el mdulo, escriba el cdigo siguiente:
https://support.microsoft.com/eses/kb/829070
24/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
SubDropDown_ComboBox()
UserForm1.ComboBox2.DropDown
EndSub
PrivateSubComboBox1_Click()
Application.OnTimeNow,"DropDown_ComboBox"
EndSub
25/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
control ComboBox
213718 XL2000: Cmo mostrar una lista de ComboBox cuando un UserForm se muestra
213721 XL2000: Cmo quitar todos los elementos de un control ListBox o ComboBox
213722 XL2000: Cmo utilizar la propiedad TextColumn
213752 XL2000: Utiliza el mtodo AddItem provoca un error cuando enlazado a datos es
OrigenDeLaFila RowSource
213756 XL2000: El mtodo RemoveItem con un control ListBox o ComboBox
Control Frame
Utilizar un control Frame para agrupar elementos relacionados lgicamente en un UserForm. Con
frecuencia se utilizan controles Frame para agrupar controles OptionButton .
Cmo quitar todos los elementos de un control ListBox enlazado a una hoja de clculo
Utilizar un For Each... Siguiente bucle para acceder a todos los controles de un control Frame ,
siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregue un control Frame en el formulario UserForm.
5. Agregar un control OptionButton para el control Frame .
Repita este paso para agregar dos controles OptionButton ms en el control Frame .
6. Haga doble clic en el control Frame para abrir la ventana de theCode para el control Frame
.
7. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de marco :
PrivateSubFrame1_Click()
DimCtrlAsControl
ForEachCtrlInFrame1.Controls
Ctrl.Enabled=NotCtrl.Enabled
Next
EndSub
https://support.microsoft.com/eses/kb/829070
26/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Control OptionButton
Puede utilizar grupos de controles OptionButton para realizar una seleccin entre un grupo de
opciones. Puede utilizar cualquiera de las siguientes tcnicas para controles de botn de opcin
del grupo:
Control Frame
Propiedad GroupName
Nota: El valor es True , el valor S y el valor de indican que se ha seleccionado un control
OptionButton . El valor Off , el valor No y el valor False indican que no est seleccionado un
control OptionButton .
27/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubCommandButton1_Click()
ForEachxInFrame1.Controls
Ifx.Value=TrueThen
MsgBoxx.Caption
EndIf
Next
EndSub
28/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
11. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de CommandButton1
:
PrivateSubCommandButton1_Click()
DimxAsControl
'LoopthroughALLthecontrolsontheUserForm.
ForEachxInMe.Controls
'Checktoseeif"Option"isintheNameofeachcontro
l.
IfInStr(x.Name,"Option")Then
'CheckGroupname.
Ifx.GroupName="Group1"Then
'CheckthestatusoftheOptionButton.
Ifx.Value=TrueThen
MsgBoxx.Caption
ExitFor
EndIf
EndIf
EndIf
Next
EndSub
29/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
est activado. El valor Off , el valor No y el valor False indican que un control de casilla de
verificacin est desactivado.
PrivateSubCheckBox1_Change()
SelectCaseCheckBox1.Value
CaseTrue
CheckBox1.Caption="True"
CaseFalse
CheckBox1.Caption="False"
CaseElse
CheckBox1.Caption="Null"
EndSelect
EndSub
Control ToggleButton
Un control ToggleButton tiene la misma apariencia que un control CommandButton hasta que
haga clic en l. Al hacer clic en un control ToggleButton , parece estar presionado o hacia abajo.
La propiedad Value de un control ToggleButton es True cuando el botn est seleccionado y
False cuando no se selecciona el botn. Si el valor de la propiedad TripleState es True, un control
https://support.microsoft.com/eses/kb/829070
30/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
ToggleButton tambin puede tener un valor Null. Aparece un control ToggleButton que tiene un
valor null que no est disponible.
Nota: El valor es True , el valor S y el valor de indican que un control ToggleButton est activado.
El valor Off , el valor No y el valor False indican que no est seleccionado un control
ToggleButton .
PrivateSubToggleButton1_Click()
IfToggleButton1.Value=TrueThen
'SetUserFormbackgroundtoRed.
Me.BackColor=RGB(255,0,0)
Else
'SetUserFormbackgroundtoBlue.
Me.BackColor=RGB(0,0,255)
EndIf
EndSub
31/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
'VariablethatholdsthenameoftheToggleButtonthatwasclick
ed.
PublicclickedAsString
SubExclusiveToggleButtons()
DimtoggleAsControl
'LoopthroughalltheToggleButtonsonFrame1.
ForEachtoggleInUserForm1.Frame1.Controls
'IfNameofToggleButtonmatchesnameofToggleButton
'thatwasclicked...
Iftoggle.Name=clickedThen
'...selectthebutton.
toggle.Value=True
Else
'...otherwisecleartheselectionofthebutton.
toggle.Value=False
EndIf
Next
EndSub
PrivateSubToggleButton1_MouseUp(ByValButtonAsInteger,_
ByValShiftAsInteger,ByValXAsSingle,ByValY
https://support.microsoft.com/eses/kb/829070
32/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
AsSingle)
clicked=ToggleButton1.Name
Application.OnTimeNow,"ExclusiveToggleButtons"
EndSub
PrivateSubToggleButton2_MouseUp(ByValButtonAsInteger,_
ByValShiftAsInteger,ByValXAsSingle,ByValY
AsSingle)
clicked=ToggleButton2.Name
Application.OnTimeNow,"ExclusiveToggleButtons"
EndSub
PrivateSubToggleButton3_MouseUp(ByValButtonAsInteger,_
ByValShiftAsInteger,ByValXAsSingle,ByValY
AsSingle)
clicked=ToggleButton3.Name
Application.OnTimeNow,"ExclusiveToggleButtons"
EndSub
Control TabStrip
Utilice un control TabStrip para ver diferentes conjuntos de informacin para un conjunto de
controles.
https://support.microsoft.com/eses/kb/829070
33/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
5. Agregar un control de imagen que cubre la base del control TabStrip , pero no cubre las
fichas.
6. En el panel Propiedades Image1, escribaDE & H000000FF & en la propiedad BackColor .
7. Haga doble clic en el control TabStrip Abrala ventana de cdigo para el control TabStrip .
8. En la ventana cdigo, escriba el siguiente cdigo en el evento Change TabStrip1 :
PrivateSubTabStrip1_Change()
DimiAsInteger
i=TabStrip1.SelectedItem.Index
SelectCasei
Case0
'IfTab1isselected,changethecolorofImagecont
roltoRed.
Image1.BackColor=RGB(255,0,0)
Case1
'IfTab2isselected,changethecolorofImagecont
roltoGreen.
Image1.BackColor=RGB(0,255,0)
EndSelect
EndSub
Control multiPage
Utilizar un control MultiPage para trabajar con mucha informacin que pueda clasificarse en
varias categoras. Un control MultiPage se compone de uno o ms pgina objetos que cada uno
contiene un conjunto de controles diferente. Puede establecer la pgina activa mediante
programacin estableciendo la propiedad Value del control MultiPage .
34/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubMultiPage1_Change()
SelectCaseMultiPage1.Value
'IfactivatingPage1...
Case0
Label1.Caption=TextBox2.Text
TextBox1.Text=""
'IfactivatingPage2...
Case1
Label2.Caption=TextBox1.Text
TextBox2.Text=""
EndSelect
EndSub
PrivateSubUserForm_Initialize()
'ForcePage1tobeactivewhenUserFormisdisplayed.
MultiPage1.Value=0
Label1.Caption=""
EndSub
https://support.microsoft.com/eses/kb/829070
35/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubUserForm_Initialize()
WithMultiPage1
'Thenext2linesdisablePage2&Page3.
.Pages(1).Enabled=False
https://support.microsoft.com/eses/kb/829070
36/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
.Pages(2).Enabled=False
'MakePage1theactivepage.
.Value=0
EndWith
'SetthecaptionontheCommandButtons.
CommandButton1.Caption="<Back"
CommandButton1.Enabled=False
CommandButton2.Caption="Next>"
EndSub
'Procedureforthe"<Back"button
PrivateSubCommandButton1_Click()
SelectCaseMultiPage1.Value
Case1'IfPage2isacti
ve...
WithMultiPage1
.Pages(0).Enabled=True'EnablePage1.
.Value=MultiPage1.Value1'Moveback1pag
e.
.Pages(1).Enabled=False'DisablePage2.
EndWith
CommandButton1.Enabled=False'DisableBackbut
ton.
Case2'IfPage3isacti
ve...
WithMultiPage1
.Pages(1).Enabled=True'EnablePage2.
.Value=MultiPage1.Value1'Moveback1pag
e.
.Pages(2).Enabled=False'DisablePage3.
CommandButton2.Caption="Next>"
EndWith
EndSelect
EndSub
'Procedureforthe"Next>"button
PrivateSubCommandButton2_Click()
SelectCaseMultiPage1.Value
Case0'IfPage1isact
ive...
WithMultiPage1
.Value=MultiPage1.Value+1'Moveforward1
page.
.Pages(1).Enabled=True'EnablePage2.
.Pages(0).Enabled=False'DisablePage1.
EndWith
https://support.microsoft.com/eses/kb/829070
37/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
CommandButton1.Enabled=True'EnableBackbut
ton.
Case1'IfPage2isact
ive...
WithMultiPage1
.Value=MultiPage1.Value+1'Moveforward1
page.
.Pages(2).Enabled=True'EnablePage3.
.Pages(1).Enabled=False'DisablePage2.
EndWith
CommandButton2.Caption="Finish"'ChangeNextbut
tontoFinish.
Case2'IfPage3isact
ive...
MsgBox"Finished!"'UserisFinishe
d.
UnloadMe'UnloadtheUser
Form.
EndSelect
EndSub
Control ScrollBar
Puede utilizar un control de barra de desplazamiento cuando desea cambiar el valor mostrado
por el otro control, como un control de etiqueta .
https://support.microsoft.com/eses/kb/829070
38/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
PrivateSubScrollBar1_Change()
Label1.Caption=ScrollBar1.Value
EndSub
Control SpinButton
Con frecuencia se utiliza un control SpinButton , como un control de barra de desplazamiento
para aumentar o reducir el valor de otro control, como un control de etiqueta . La propiedad
SmallChange determina cunto el valor de un control SpinButton cambia cuando se hace clic.
Cmo agregar un control SpinButton que incrementa o disminuye una fecha en la que se
almacena en un control TextBox
Para agregar un control SpinButton que incrementa o disminuye una fecha en la que se almacena
en un control TextBox , siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregar un control SpinButton para el formulario UserForm.
5. Agregue un control TextBox en el formulario UserForm.
6. Haga doble clic en el control SpinButton control elabierta la ventana de cdigo para el
control SpinButton .
7. En la ventana cdigo, escriba el siguiente cdigo para el evento SpinUp SpinButton1 :
PrivateSubSpinButton1_SpinUp()
https://support.microsoft.com/eses/kb/829070
39/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
TextBox1.Text=DateValue(TextBox1.Text)+1
EndSub
PrivateSubSpinButton1_SpinDown()
TextBox1.Text=DateValue(TextBox1.Text)1
EndSub
PrivateSubUserForm_Initialize()
TextBox1.Text=Date
EndSub
Control RefEdit
El control RefEdit imita el comportamiento de los cuadros de referencia que estn integradas en
Excel. Puede utilizar la propiedad Value para obtener la direccin de la celda actual que se
almacenan en un control RefEdit .
https://support.microsoft.com/eses/kb/829070
40/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Cmo rellenar un rango de celdas basndose en el rango seleccionado con el control RefEdit
Para utilizar el control RefEdit para rellenar las celdas, siga estos pasos:
1. Inicie Excel y, a continuacin, abra un nuevo libro en blanco.
2. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
3. En el men Insertar , haga clic enUserForm para insertar un UserForm en el libro.
4. Agregue un control RefEdit en el formulario UserForm.
5. Agregue un control CommandButton en el formulario UserForm.
6. Haga doble clic en el CommandButton control elabierta la ventana de cdigo para el
control CommandButton .
7. En la ventana cdigo, escriba el siguiente cdigo para el evento Click de CommandButton1
:
PrivateSubCommandButton1_Click()
DimMyRangeAsString
MyRange=RefEdit1.Value
Range(MyRange).Value="test"
UnloadMe
EndSub
41/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Control de imagen
Es el propsito del control Image mostrar una imagen en un formulario de usuario. Para asignar
una imagen a un control de imagen en tiempo de ejecucin, utilice la funcin LoadPicture .
PrivateSubImage1_Click()
DimfnameAsString
'DisplaytheOpendialogbox.
fname=Application.GetOpenFilename(filefilter:=_
"BitmapFiles(*.bmp),*.bmp",Title:="SelectImageTo
Open")
'IfyoudidnotclickCancel...
Iffname<>"False"Then
'LoadthebitmapintotheImagecontrol.
Image1.Picture=LoadPicture(fname)
'RefreshtheUserForm.
Me.Repaint
EndIf
EndSub
https://support.microsoft.com/eses/kb/829070
42/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Informacin adicional
El Examinador de objetos
Una lista completa de todas las propiedades y mtodos para un comando especfico est
disponible en el Examinador de objetos. Para encontrar esta informacin en Excel, siga estos
pasos:
1. En el men Herramientas , elijaMacroy, a continuacin, haga clic en BasicEditor Visual.
2. En el men Ver , haga clic en ObjectBrowser.
3. En el cuadro Buscar texto , escriba el nombre del control que desee y, a continuacin, haga
clic en Buscar.
Para obtener ms informacin acerca de cmo utilizar el Examinador de objetos en el Editor de
Visual Basic, haga clic en Ayuda de Microsoft Visual Basic en el men Ayuda , escriba
Examinador de objetos en el Ayudante de Office o el Asistente para Ayuda y, a continuacin, haga
clic en Buscar para ver el tema.
Para obtener informacin adicional acerca de cmo instalar la Ayuda de Microsoft Excel en el
equipo, haga clic en el nmero de artculo siguiente para verlo en Microsoft Knowledge Base:
231946 OFF2000: Cmo agregar o quitar un nico programa de Office o un componente
Propiedades
Id. de artculo: 829070 ltima revisin: 07/25/2015 11:02:00 Revisin: 22.0
La informacin de este artculo se refiere a:
Microsoft Office Excel 2003
https://support.microsoft.com/eses/kb/829070
43/44
3/8/2015
CmoutilizarVisualBasicparaAplicaciones(VBA)paracambiarlosformulariosdeusuarioenExcel
Soporte tcnico
Seguridad
Trminos de uso
Privacidad y cookies
https://support.microsoft.com/eses/kb/829070
Marcas comerciales
2015 Microsoft
44/44