Manual Basico Visual Basic para Excel
Manual Basico Visual Basic para Excel
Manual Basico Visual Basic para Excel
* * ROGLE
Reengineering Operations
GroupWork Logistics Excellence
ndice
1.
2.
OBJETIVOS................................................................................................ 4
3.
3.2.
3.3.
3.4.
4.
5.
CONCLUSIONES..................................................Error! Marcador no
definido.
6.
6.1.1.
Option Explicit:.........................................................................24
6.1.2.
6.2.
6.2.1.
Select Case............................................................................... 25
6.3.2.
Do While... Loop........................................................................26
6.3.3.
Cambiar criterios.........................................................de
ordenacin:
29
6.6.
Mens.............................................................................................. 29
Reengineering Operations
GroupWork Logistics Excellence
Para Ordenar................................................................................... 30
6.8.
* * ROGLE
Reengineering Operations
GroupWork Logistics Excellence
Temporizador:...............................................................................30
6.11.
Funciones:.................................................................................... 30
6.12.
Zoom de la ventana:....................................................................31
6.13.
6.14.
6.15.
6.16.
6.17.
6.18.
6.19.
Borrar Menu:................................................................................32
6.20.
Crear Rango:................................................................................ 32
6.21.
Entero y Logaritmo:......................................................................32
6.22.
6.23.
Pregunta un nmero:...................................................................33
6.24.
Ventana de mensajes:..................................................................33
6.25.
6.26.
6.27.
6.28.
6.29.
Clculo de Mximo:......................................................................33
6.30.
6.31.
6.32.
6.33.
6.34.
6.35.
Comodines de bsqueda:.............................................................36
6.36.
definido.
2
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
6.37.
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Reemplazar un carcter en una variable:.................................... 37
6.38.
6.39.
definido.
6.40.
6.41.
6.42.
definido.
6.43.
6.44.
6.45.
6.46.
6.47.
6.48.
definido.
6.49.
6.50.
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
2.
OBJETIVOS
* * ROGLE
Reengineering Operations
GroupWork Logistics Excellence
20 de febrero de
2014
[MANUAL
BSICO
PARA EMPEZAR A TRABAJAR CON MACROS
DESARROLLO
DE LOS
EJEMPLOS
DE VISUAL BASIC PARA EXCEL
3.
HOLA
3
4_|
1
2
Botn 1
61
Para ello, en primer
lugar, se instalar en el documento de Microsoft Excel, el men
Programador (Men Archivo -> Opciones -> Personalizar cinta de
Guardar como
Guardar
Adobe PDF
como
Imprimir
Compartir
Exportar
d
opciones y se selecciona la casilla Programador).
Una vez hecho esto, aparecer la pestaa Desarrollador desde la que se
pueden aadir los botones dentro de la pestaa.
En l se tomar el icono que representa a un botn, desplegndose en la
Hoja1, por ejemplo, del documento Excel. De los dos botones que hay (tanto
en formularios como en ActiveX), se seleccionar el de Controles de
ActiveX, ya que de este modo se podr cambiar el color y otras opciones del
propio botn.
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
JLAS
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE DATOS
VISUAL BASIC
PARA
EXCEL DESARROLLAD OR A
REVISAR
VISTA
E*
nentos
M
|g|i0p
cdigo
Insertar Modo
T
[j] Ejecutar cuadro de dilogo
Diseo
Controles de formulario
1011
?| A
1 Sil
ntroles ActiveX
n P1 lbil
AQ
gir
Una vez hecho esto, se pulsar dos veces sobre dicho botn para acceder as
al Editor de Visual Basic, con el que se realizar el pequeo programa
requerido, tal y como sigue:
| Com man d Button 1
End Siib
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA
AETRABAJAR CON MACROS
ABC EMPEZAR
D
DE
VISUAL
BASIC
PARA
EXCEL
HaLAHOLAHOLAHOLAHOLA
HOLA
3
4
5
6
CommandButtanl
End Slb
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
L [BIENVENIDO
BIENVENIDO
3 BIENVENIDO
glfhiuminn
BIENVENI
1
DO
;
Lommanatsuuoni
5 BIENVENIDO
BIENVENI
3
DO
BIENVENIDO
7 BIENVENIDO
1
BIENVENIDO
)0
BIENVENIDO
BIENVENIDO
BIENVENIDO
BIENVENIDO
BIENVENIDO
BIENVENIDO
0
3.4. Jugando con las series de Fibonacci.
En este caso, vamos a desarrollar cdigo que cumplir las siguientes
caractersticas:
Utilizacin de una serie de Fibonacci de nmeros aleatorios.
Se tomarn exclusivamente la cifra de unidades de los nmeros
de la serie anterior.
Se ordenarn estos valores de mayor a menor (para poder trabajar con
ellos).
Se mostrar cmo realizar el diagrama de barras correspondiente
a la serie anterior (cada barra con el tamao y el color
correspondiente al nmero de la serie).
Y en l, se utilizarn adems las funciones y opciones del Editor de Visual
Basic / Microsoft Office siguientes:
- Cambio de nombre de un botn.
- Utilizacin y grabacin de macros.
- Utilizacin de la funcin Call para llamar a una funcin definida en otro lugar.
- Cambio de color.
La serie de Fibonacci cumple que cada elemento de la serie es el resultado
de la suma de los dos precedentes, es decir: an+2 = an+1 + an
As, se introducir la frmula anterior mediante la utilizacin de un bucle Do
While...Loop (una de las opciones posibles), previa definicin de los dos
valores iniciales. De esta forma, se van a definir estos valores iniciales como
aleatorios; para ello, se va a utilizar la funcin de generacin de nmeros
aleatorios rnd (tal y como se ve en el programa). Se evitan nmeros
excesivamente grandes o en coma flotante, tomando la variable como int,
para evitar la aparicin de decimales. Adems, se ve cmo se utiliza la
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
funcin With, para definir la seleccin de color. Este cdigo se ha tomado del
de la macro grabada a partir del cambio de color de una celda cualquiera
(mediante la utilizacin de la opcin del men Cambio de color).
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Hajal.Cells(1, 2 )
Int(Rnd() * 10)
1=1
Do While i < 2 1
Hojal.Cells(i +2 , 2 ) = Hojal.Cells(i + 1, 2 ) + Hojal.Cells(i, 2 )
Hojal.Cells (i, 2 ).Select With Selection.Interior
.Colorlndex = Int(Rnd() * 10)
.Pattern = xlSolid End Witn i =
i + 1 If (i = 21) lien
Hajal.Cells(21, 2 ).Select Witn
Selection.Interior
.Colorlndex = Int(Rnd() * 10)
.Pattern = xlSolid End Witn
10
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE
BASIC PARA EXCEL
SabVISUAL
Macros()
I
Macros Macro
Reengineering Operations
GroupWork Logistics Excellence
11
* * ROGLE
DISEO DE PAGINA
ilativas
FORMULAS
DATOS
c? EJ
ft
Complementos Complementos
ros
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Insertar
COM
Modo
Diseo
Controles
Complementos
IL
CommandB. CommandBut - I
Alfabtica | por categoras |
(Name) ______ CommandButt
i
Accelerator
1 Autoload
False
=INCRUSTAR("Forms.CommandButton.l";'"')
CommandButtonl
Propiedades
<3s
Cortar
(F[3) Copiar
QJ
ve^ooigo
[H| Propiedades
Objeto
Botn
de
comando
Agrupar
Ordenar
^ Formato de control...
AutoSize
BackColor
False
&H800000(
Backs tyle
Caption
Enabled
Font
ForeColor
1 - fmBackStyl
CommandButt
i
True
Calibri
&H800000
Height
Left
Locked
Mouselcon
MousePointer
Picture
PicturePosition
Placement
45
135,75
True
(Ninguno)
0
fmMousePc
(Ninguno)
7
fmPicturePi
2
PrintObject
True
Shadow
False
[TakeFocusOnCliTrue
Top
39
Visible
True
Width
154,5____
Wordwrap
False
jL] |ciick
I
End Sub
Reengineering Operations
GroupWork Logistics Excellence
12
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL
BASIC
PARA EXCEL
Fibonacci, tal y como
ya se ha
explicado,
y acto seguido, se reduce cada uno
de los nmeros de dicha serie a su cifra de unidades. Esta sera el resto
obtenido de dividir dicho nmero de la serie original, por 10.
Esto se consigue con la utilizacin de la funcin mod. Todo ello dentro de su
C
A
7C
7 5
5
12
17
29
46
75
121
196
317
513
S30
1343
2173
3516
5689
9205
14894
24099
38993
63092
102085
7
9
6
5
1
6
7
3
0
3
3
6
5
4
9
3
2
1. Genera serie Fibonacci
5
Reengineering Operations
GroupWork Logistics Excellence
13
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO
PARA
A TRABAJAR
CON
MACROS
B_________C
D
E EMPEZAR
F
G
h
DE
O VISUAL BASIC PARA EXCEL
0
0
1
1
2
3
4
3
5
5
5
1. Genera serie Fibonacci
6 ___________________
^
3
7
2. Genera serie reducida en la Unidad (resto de dividir entre 10)
3
S
9
9
9
14
* * ROGLE
20 de febrero de
2014
se tuviera un cero.[MANUAL
Adems,BSICO
se define
queEMPEZAR
el color corresponda
PARA
A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Reengineering Operations
GroupWork Logistics Excellence
15
* * ROGLE
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
En este caso, vemos como una vez definida la serie de Fibonacci (de la misma
forma que ya se ha visto previamente en varias ocasiones, siguiendo el
mismo ejemplo), se introducen tres llamadas a otras tantas funciones
Reengineering Operations
GroupWork Logistics Excellence
15
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC
PARA
EXCEL
independientes previamente
definidas
(como
se ha visto en las transparencias
precedentes), mediante la funcin call.
As, una vez calculada mediante el bucle Do While la serie de Fibonacci, se
llamara inicialmente a la funcin Reducir. sta, como ya se ha visto, tomara
el resultado anterior, "reducindolo" a la cifra de unidades correspondiente a
cada uno de los elementos de la serie anterior.
Se vera, de la misma forma que se vea en un punto anterior, como con la
utilizacin de la funcin resto mod, entre 10, conseguimos tomar o "reducir"
la cifra correspondiente a las unidades de los elementos de la serie de
Fibonacci previamente calculada.
Reengineering Operations
GroupWork Logistics Excellence
16
* * ROGLE
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
20 de febrero de
2014
Prvate
Sjfc BorrarColorDiagrama
()
[MANUAL
BSICO PARA EMPEZAR
A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Borrar color del Gantt anterior
Range(Bl:J22}.Select
Selection.Interior.Colorlndex = xlNone
If 1 <> 0 Then
For j = 2 To x 4 1
Hojal. Cells (i, j).Select With
Selection.Interior .Colorlndex = x
4 2 .Fattern = xlSolid End With
Next j End If Next i
End Sib
4.
Una vez visto todo lo realizado previamente, se va a pasar a describir estos nuevos
ejemplos. En ellos, vamos a mostrar cmo hacer dos programas, el primero para
saber si un nmero es primo, y el segundo, para obtener listas de nmeros primos.
Para esto, en el primer programa, mostraremos qu funciones se deben utilizar para
declarar mens de trabajo, y cmo trabajar con ellas, adems de cmo llamar a otras
funciones sin utilizar la funcin que se haba visto previamente para este propsito
(funcin call). En el segundo programa, veremos de qu forma se podrn declarar
listas de nmeros primos, en un nmero indicado previamente por nosotros mismos.
Vamos a ver ahora qu es lo que deberemos hacer para poder declarar y utilizar
mens de trabajo, aplicndolo de manera prctica para poder declarar si un nmero
dado al programa es primo o no.
CornmandButtorl
Reengineering Operations
GroupWork Logistics Excellence
18
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
Function esprimo(x) As Boolean
DE VISUAL BASIC PARA EXCEL
Como se puede ver en la pantalla anterior del Editor de Visual Basic, el
programa previamente descrito se ha dividido en dos partes. En la parte que
vemos aqu (declarada a partir del botn) mediante la funcin InputBox, se
declarar un men que se ver en la pgina de la Hoja de Clculo del Microsoft
Excel, presentando el texto "DIME UN NUMERO", identificado con la variable
numero definida como string. Esta cadena (que recibe el nmero que se
introducira desde teclado) mediante la funcin Val, registrar el valor numrico
deseado que se pasara a la otra funcin (la que calculara si dicho nmero es
primo o no).
Esto tambin se podra haber conseguido de una manera un poco ms simple,
declarando nicamente valor como entero y guardando el nmero introducido
en la InputBox directamente como entero como se puede ver en la siguiente
captura:
(General)
Una vez hecho esto, dentro de una condicin if, y utilizando la funcin MsgBox
(esta funcin, al igual que la previamente definida InputBox, tiene como misin
el mostrar en pantalla un mensaje en forma de men de Windows, pero ahora
presentando un resultado determinado y definido desde programa) se mostrara
un mensaje sobre la Hoja de Clculo, diciendo si el nmero previamente
introducido es primo o no.
Tal como se ha visto previamente, tomando el valor de la variable valor se llama
a la funcin esprimo (x), donde la variable x equivale al valor enviado valor.
As, definiendo esta funcin como Boolean, la cual dara como resultado una
respuesta verdadera o falsa (true o false), se entrara en un bucle Do While
(que utiliza como condiciones que el nmero introducido es
Reengineering Operations
GroupWork Logistics Excellence
19
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DEpara
VISUAL
BASIC
EXCEL
inicialmente primo,
entrar
en PARA
el bucle,
y que el ltimo nmero por el que se
dividir el introducido, para comprobar si es primo o no, deber ser menor o igual
a la raz cuadrada del introducido). En este bucle, dentro se pondra una condicin
if, en la que indica que para que un nmero no sea primo, el resto de dividirlo por
otro menor que l debe ser cero.
End Sufc
Function esprirr.o (x) As Boolean
Dirr. n As Integer esprirr.o =
True n = 2
Do While esprirr.o And n <= Sqr (x)
If (x Mod n = 0) Tien esprirr.o =
False End If n = n 4 1
Loop
End Function
Microsoft Excel
DIME UN NUMERO
Aceptar
Nmero primo?
Cancelar
fi
Reengineering Operations
GroupWork Logistics Excellence
20
* * ROGLE
20 de febrero de
2014
Ahora se van a definir los dos programas necesarios para obtener un nmero
determinado de nmeros primos, siguiendo el mismo esquema previamente
definido. Primero se ve cmo se define con la funcin InputBox, un nuevo men
en el que se pide el nmero de nmeros primos deseado. Adems, se incluye una
lnea de cdigo para poder borrar el listado previo de nmeros primos cada vez
que se haga clic sobre el botn (para que salga un nuevo men).
|commardButtor1
Esta llamada mediante la funcin Call, se hace a una macro grabada mientras se
seleccionaba toda la columna A y se borraba su contenido, como se puede ver.
21
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL
BSICO programa,
PARA EMPEZAR
A TRABAJAR
CON MACROS
Aqu se puede observar
el segundo
llamado
por el primero,
y pasndole
DE
VISUAL
BASIC
PARA
EXCEL
el nmero de nmeros primos a generar (tamao de la lista) empezando por el 2.
Function espriir.a (x}
Diir. n As Integer
Diir. num As Integer
cont = 1 n = 2
Do While cont <= x
priir.o = True
j=2
Loop
End Function
Reengineering Operations
GroupWork Logistics Excellence
22
* * ROGLE
AAl
1
2
3
4
E
8
S
10
11
12
13
14
IE
16
17
13
19
2
3
5
20 de febrero de
7
2014
11
13
[MANUAL BSICO PARA EMPEZAR
6
A TRABAJAR
CON MACROS
7
17
DE VISUAL BASIC PARA EXCEL
10
20
21
5.
23
29
31
37
41
43
47
53
59
61
67
71
73
FINAL
Una vez presentados y explicados los ejemplos anteriores, esperamos que sirvan
de ayuda real a la realizacin de los problemas concretos.
Tambin, y porque no, esperamos que este pequeo manual pueda llegar a servir
como herramienta de inicio de otros posibles futuros trabajos encaminados en
esta materia.
Esperamos, de la misma forma, que la exposicin haya sido suficientemente sencilla y
clarificadora de lo que inicialmente se pretenda y se presentaba como objetivos.
6.
Antes de empezar con el anexo queremos incorporar una nota. Por un motivo que
desconocemos Excel ha empeorado su comportamiento desde algunas versiones
hacia aqu. Macros que funcionaban estupendamente se han convertido en muy
lentas. Tras una indagacin en la web parece que si se pega esto al principio de
las aplicaciones mejora el funcionamiento.
Application.screenupdating=False
Application.calculation=xlCalculationMa
nual Application.EnableEven ts=False
Hay que pegar esto al final antes del end sub:
Reengineering Operations
GroupWork Logistics Excellence
23
* * ROGLE
6.2.
If ... Then ... / If ... Then ... Else ... / If ... Then ... Elself ... Then ...
Cundo poner el EndIf?, cundo no?, cundo se deberan usar los ":" (dos puntos)?
Las instrucciones If...Then...Else se pueden presentar en varios formatos, con
unas caractersticas determinadas. Normalmente, se presentan anidadas en
tantos niveles como sea necesario. Esto, sin embargo, puede hacer menos legible
el cdigo, por lo que es aconsejable utilizar una instruccin Select Case en vez
de recurrir a mltiples niveles de instrucciones If...Then...Else anidadas
(nicamente en caso de que el excesivo nmero de anidamientos pudiera dar
problemas en la legibilidad del programa, o errores en la depuracin de ste).
As, si realizamos la condicin en varias lneas de cdigo, ser necesario cerrar el
anidamiento con un End If; instruccin que no se usara en caso de realizar la
condicin en un sola lnea (If Then, condicin cierta).
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
6.3.
Bucles: For... To ... Next/Do While... Loop/Do Loop... Until (Utilizacin
y posibles problemas):
Las estructuras de bucle tambin son conocidas por el nombre de estructuras de
control. Permitiendo la repeticin de determinadas acciones.
Uno de los errores ms comunes que se producen en la utilizacin de bucles de este
tipo, es la no inicializacin de las variables utilizadas como contadores de iteraciones.
As que habr que prestar una atencin especial en este punto. Una opcin para evitar
este posible error, sera la definicin al principio del programa, como primera lnea de
cdigo de ste, el ya comentado
Option Explicit.
A continuacin se presentan las diferentes opciones que permite el Visual Basic para
definir bucles, es decir, repeticin y/o acumulacin de acciones determinadas, entre
unos lmites definidos. La no definicin de estos lmites concretos, sera otro error
comn y ms problemtico, al producirse la entrada en bucles infinitos, que bloquean
el mdulo de clculo de nuestro ordenador.
6.3.1. Do... Loop Until
Esta estructura de control se puede usar para ejecutar un bloque de instrucciones un
nmero indefinido de veces. Las instrucciones se repiten hasta que una condicin
llegue a ser True.
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
20 de febrero de
2014
Un ejemplo podra ser el[MANUAL
siguiente:
BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE
VISUAL
BASIC PARA EXCEL
Sub ComPrimeroUntil ()
contador = 0 miNum = 20
Do Until miNum = 10
miNum = miNum - 1
contador = contador + 1
Loop
MsgBox "El bucle se ha repetido " &contador& " veces."
End Sub
6.3.2. Do While... Loop
Siguiendo lo explicado en el punto inicial, otro error comn sera el no introducir la
lnea de acumulacin del contador (por ejemplo: i = i + 1), con lo que el bucle entrara
cada vez en el clculo, quedndose colgado en este punto.
En este caso, las instrucciones se repiten mientras una condicin sea True (al
contrario que con el Do... Loop Until).
Este tipo de bucle se utilizara normalmente en caso de tener que cumplirse una
condicin marcada por el While. As, en este tipo de bucles, se puede dar el caso de
que no se entre desde el primer momento, debido al no cumplimiento de esta
condicin.
Ejemplo de utilizacin de esta funcin (hay que fijarse en la inicializacin previa de la
variable contador i):
i=5
Do While Hoja1.Cells(i, 2) <> ""
b = Hoja1.Cells(i, 5) c =
Hoja1.Cells(i, 6) d = (b A
2) + (c A 2) a = Sqr(d)
Hoja1.Cells(i, 7) = a i = i + 1
Loop
6.3.3. For... To... Next
Mediante la palabra clave Step, se puede aumentar o disminuir la variable contador
en el valor que se desee (For j = 2 To 10 Step 2).
Se pueden anidar bucles For...Next, colocando un bucle For...Next dentro de otro.
Para ello, hay que proporcionar a cada bucle un nombre de variable nico como su
contador. La siguiente construccin es correcta:
For i = 1 To 10
For j = 1 To 10
26
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
6.4.
Coordenadas polares: Cmo pasar de coordenadas cartesianas (x,y) a
polares (r,a)?:
6.4.1. Radio (calculado a partir de las coordenadas x e y de los puntos en cuestin) r =
RaizCuadrada(xA2+yA2):
Para este caso, se definira la estructura de control siguiente (o bucle), definida
mediante la utilizacin de la funcin DoWhile... Loop. En ella se definiran una serie
de variables que acumularan los valores previamente definidos en celdas de la Hoja
de Clculo, para realizar la operacin de calcular la raz cuadrada de la suma de los
cuadrados de los catetos opuesto y contiguo del tringulo definitorio del ngulo a
calcular. Posteriormente, se le dara dicho valor a otra variable, que estara encargada
de ir dndole dichos valores a las celdas correspondientes de la Hoja de clculo
anterior.
i=5
Do While Hoja1.Cells(i, 2) <> ""
b = Hoja1.Cells(i, 5) c =
Hoja1.Cells(i, 6) d = (b A
2) + (c A 2) a = Sqr(d)
Hoja1.Cells(i, 7) = a i
=i+1
Loop
6.4.2. ngulo (calculado a partir de las coordenadas x e y de los puntos en cuestin)
a=Arctan (x/y):
Se considera el mismo proceso anterior, pero en este caso, y para poder presentar los
valores del ngulo correspondiente en grados entre 0 o y 360o, puesto que Excel slo
los presenta en valores entre 90o y -90o, se utiliza la estructura condicional que se
puede observar en el programa.
i=5
Do While Hoja1.Cells(i, 2) <> ""
b = Hoja1.Cells(i, 5) c
= Hoja1.Cells(i, 6) d =
c/b
a = (180 / PI) * Atn(d)
If b > 0 And c > 0 Then
Hoja1.Cells(i, 8) = a
Else
Reengineering
Reengineering Operations
GroupWork Logistics Excellence
R0GLE
IfHoja1.Cells(i,
b > 0 And c 8)
<0
= a + 180
360
ThenIf
Else
End
End If
[MANUAL BSICO
i = i PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
+1
20 de febrero de
2014
Loop
Hay que darse cuenta de que se utiliza la condicin anidada If... Then ... Else ...
End If, porque Excel, da valores de ngulo en el plano de las X positivas (1 er y 4
cuadrantes), por lo que para poder tener una visin clara de la posicin de cada punto
en funcin de su ngulo (tenerlo marcado de 0 o a 360o), se debera sumar 180 a los
valores de ngulo obtenidos de los puntos situados en el 2 y 3 er cuadrantes, y 360 a
aquellos situados en el 4 cuadrante.
6.6. Mens...
Se definen mens especficos tomndolos como variables definidas como barras de
comandos de control, o de otros tipos, y dndoles a su vez los nombres
correspondientes a estos mens de trabajo.
Dim MenuAyuda As CommandBarControl Dim
MenuNuevo As CommandBarPopup Dim Plan As
CommandBarControl Call BorrarMenu
Set MenuAyuda = CommandBars(1).FindControl(ID:=30010)
If MenuAyuda Is Nothing Then
Set MenuNuevo =
CommandBars(1).Controls.Add(Type:=msoControlPopup,
Temporary:=True)
Else
Set MenuNuevo =
CommandBars(1).Controls.Add(Type:=msoControlPopup,
Before:=MenuAyuda.Index, Temporary:=True)
20 de febrero de
2014
End If
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL
PARA EXCEL
MenuNuevo.Caption
= "PlanBASIC
de Recuento"
Set Plan = MenuNuevo.Controls.Add(Type:=msoControlButton)
Plan.Caption = "Plan de Recuento"
Plan.OnAction = "CalculaPlan"
6.10. Temporizador:
Funcin encargada de dar un intervalo de tiempo, previamente a la obtencin de un
resultado, o por otra razn necesitada por el programador.
Dim ppio As Single ppio = Timer
Do While ppio + 10 > Timer Loop
6.11. Funciones:
Definicin de funciones (con la forma que se requiera, sea Integer para entero, o de
cualquier otro tipo), dentro del programa, en el Editor de Visual Basic, con la
intencin de tenerlas
30
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
ROGLE
Reengineering Operations
GroupWork Logistics Excellence
Reengineering Operations
GroupWork Logistics Excellence
ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
6.23. Pregunta un nmero:
DE VISUAL BASIC PARA EXCEL
Otra nueva utilizacin de los cuadros de mensaje para captacin de datos (o mens)
del tipo Inputbox, para, en este caso capturar una cantidad determinada con la que
el programa en cuestin realizar los clculos deseados.
InputBox ("Dime un nmero")
33
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
activo o seleccionado en
su interior),
unos
valores
determinados
de grado
de color, y
[MANUAL
BSICO
PARA
EMPEZAR
A TRABAJAR
CON MACROS
DE
VISUAL
BASIC
PARA
EXCEL
de formato de texto.
Selection.Interior.ColorIndex=34
Selection.Interior.Pattern=xlsolid
34
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
puede
utilizar
esta
funcin
de
T.Shuttleworth
con
algunas
Reengineering Operations
GroupWork Logistics Excellence
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Reengineering
ROGLE
=MCONCAT(TRIV(STXT(A1;SIGUIENTE(NBCAR(A1);1);1);;1))
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Al introducir texto mediante una macro en una celda, se pretende que este
texto sea cortado cada 100 caracteres, pero sin cortar las palabras.
El texto en cuestin podra ser truncado con la macro siguiente:
Function Corte(TxTronque As String, LgMax As Integer) As
String Dim i As Integer Dim p As Integer Dim FinLigne As
Long p = 1 i = 0
Do While i < Len(TxCorte)
FinLigne = InStr(p, TxCorte, Chr(10))
If FinLigne > LgMax Then i
= i + LgMax
Else: i = FinLigne + LgMax
End If
Do While Mid(TxCorte, i, 1) <> " "
i=i-1
If i = 0 Then
If FinLigne = 0 Then i = p + LgMax: Exit
Do i = FinLigne + LgMax: Exit Do End If Loop
Mid(TxCorte, i, 1) = vbCr i
= i + LgMax p = i + 1
Loop
Corte = TxCorte End Function
Excel
para reemplazar
los
caracteres
en una
bsqueda.
El operador "*" puede reemplazar un grupo de caracteres, y el comodn "?" uno solo.
La utilizacin en la funcin bsqueda de "*" y de ?" puede causar desrdenes
importantes en los ficheros. As, si se busca por ejemplo la palabra "completndola" y
se quieren recuperar todas las posibilidades de escritura con los acentos o no, se
utilizaran los comodines "*" y "?" de la siguiente forma "complet?ndola" o
"complet*a"
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL
PARAde
EXCEL
El mtodo siguiente reemplaza
el BASIC
contenido
todas las celdas seleccionadas por la
palabra de reemplazamiento:
- Seleccionar una columna de textos
- Reemplazar todas las palabras "ejemplo" por "*"^ OK
- Despus, reemplazar todos los "*" por la palabra "ejemplo" ^ borrando todas
las celdas conteniendo el "*" y reemplazndolo por la palabra "ejemplo".
Se debe sealar que la forma ms rpida para vaciar una hoja es reemplazar "*" por
"" (se puede probar aunque sin grabarlo).
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
6.38. Suprimir espacios:
BASIC
EXCEL
Macro para suprimir DE
los VISUAL
espacios
quePARA
se encuentran
delante de las cifras
cortadas/pegadas a partir de una web.
Sub EliminarEspacios()
Dim celda As Range
For Each cellule In ActiveSheet.UsedRange cell.Value =
LTrim(cell.Value)
Next
End Sub
38
Reengineering Operations
GroupWork Logistics Excellence
* * ROGLE
20 de febrero de
2014
[MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
6.41. Quitar los nmeros
de una cadena de caracteres:
DE VISUAL BASIC PARA EXCEL
Es posible, en una celda, eliminar la cifra que sigue a un nombre?
Por ejemplo: en una tabla, se tienen los nombres siguientes con un nmero
(sin espacio) ZAZA1, ZAZA2 etc.
El objetivo es el de encontrar ZAZA, quitando los nmeros y sabiendo que a
veces se pueden encontrar tambin ZAZA11, ZAZA252 y hasta ZA345ZA.
Function SoloTexto(s As String)
For a = 1 To Len(s)
If Mid(s, a, 1) <= 9 Then Else
SoloTexto = SoloTexto + Mid(s, a, 1)
End If Next
End Function
Atencin: si una cifra se encuentra en el medio de la palabra igualmente se suprime.
O incluso: (aqu se conserva en lugar de quitar)
Range("B1")= Left(Range("A1"),4)
20 de febrero de
2014
End If Loop [MANUAL BSICO PARA EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA EXCEL
Se querra cortar una frase, sin cortar las palabras, de tal manera que cada
trozo de frase, puesto en celdas adyacentes, no comportara ms de 20
caracteres.
Public Sub Parse20PerCell()
Dim bigString As String
Dim tempStr As String Dim
cell As Range Dim pos As
Integer Set cell =
Range("A1") bigString =
cell.Text Do While bigString
<> ""
Set cell = cell.Offset(0, 1)
If Len(bigString) < 21 Then
cell.Value = Trim(bigString)
bigString = ""
Else
tempStr = Right(StrReverse(bigString),
21) pos = InStr(tempStr, " ")
If pos = 0 Then
MsgBox "More than 20 contiguous characters between spaces."
Else
cell.Value = Trim(StrReverse(Mid(tempStr, pos + 1, 255)))
bigString = Mid(bigString, 22 - pos, 255)
End If End If Loop
End Sub
Otra solucin:
El nmero mximo de caracteres de la frase es, en este ejemplo, inferior a 1000 y el
nmero de celdas en las que el texto se tiene que repartir se supone inferior a 100.
Sub test1()
Set Rng = Sheets(1).Range("A1")
iTotal = Mid(Rng, k + 1, 1000) & " "
For j = 2 To 100 For i = 21 To 1
Step -1 If Mid(iTotal, i, 1) = " "
Then
k = i Exit
For End If
Next
Rng(1, j).Value = Mid(iTotal, 1, k - 1)
iTotal = Mid(iTotal, k + 1, 1000)
40
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
20 de febrero de
2014
Next
[MANUAL BSICO PARA
EMPEZAR A TRABAJAR CON MACROS
DE VISUAL BASIC PARA
EXCEL
End Sub
7. Pequeos Ejercicios
1- Activar la pestaa Desarrollador/Programador que habilita el uso de
Macros/Visual Basic.
2- Aadir un botn permitiendo que se le cambie el texto, el tipo de letra y el
color del botn desde Propiedades.
3- Grabar un vdeo en el que se muestre cmo mostrar la palabra "HOLA" en la
celda A1 del Excel al pulsar sobre el botn.
4- Grabar un vdeo en el que se muestre cmo mostrar una acumulacin de
"HOLA"s seguidos en la celda A1 del Excel al pulsar sobre el botn.
5- Grabar un vdeo en el que se muestre cmo mostrar una acumulacin de
"HOLA"s en varias diagonales seguidas.
41
Reengineering Operations
GroupWork Logistics Excellence
* * R0GLE
Reengineering Operations
GroupWork Logistics Excellence
R0GLE
Reengineering Operations
GroupWork Logistics Excellence