Post on 08-Jul-2016
description
CENTRO DE ENSEÑANZA TÉCNICA INDUSTRIAL
IMPLEMENTACIÒN DE UN SISTEMA DE CONTROL APLICANDO UN SOFTWARE PARA CALCULO Y
BALANCEO DE LINEAS ELÈCTRICAS DE MEDIA Y BAJA TENSIÒN.
TITULACIÓN:
PROYECTO O PRACTICAS PROFESIONALES.
SUSTENTANTES:
AYALA RODRÍGUEZ JOSÉ HÉCTOR SAÚL
ASESOR: ING. JOSE DEL CARMEN AGUILAR MORANTE
ASESOR TECNICO: ING. JOSÈ MARTIN IBARRA RAMIREZ
1
Introducción...................................................................................................................................................................4
Tema 1.Analisis de la función de la norma..........................................................................................................4
Tema 2.- características del programador.........................................................................................................21
Cómo se... (referencia de VBA para Excel)....................................................................................................................22
Libros y hojas de cálculo...........................................................................................................................................22
..................................................................................................................................................................................22
Macros y el Editor de Visual Basic.........................................................................................................................23
..................................................................................................................................................................................23
Ficha Programador...............................................................................................................................................23
Para habilitar la ficha Programador......................................................................................................................23
Problemas de seguridad.......................................................................................................................................24
Editor de Visual Basic............................................................................................................................................24
Para crear un nuevo libro en blanco.....................................................................................................................24
Un ejemplo real........................................................................................................................................................26
..................................................................................................................................................................................26
Aprendizaje sobre objetos....................................................................................................................................26
Uso de la grabadora de macros............................................................................................................................27
Para usar la grabadora de macros como punto de inicio de la solución...............................................................27
Para grabar una macro que cambie el nombre de una hoja de cálculo................................................................28
Modificación del código grabado..............................................................................................................................29
..................................................................................................................................................................................29
Función de bucle...................................................................................................................................................29
Cambio de nombre útil.........................................................................................................................................31
Búsqueda de celdas vacías....................................................................................................................................32
Declaraciones de variables...................................................................................................................................33
2
Comentarios.........................................................................................................................................................34
Más cosas que se pueden hacer con VBA.................................................................................................................34
..................................................................................................................................................................................34
Importancia de una actitud abierta......................................................................................................................34
Gráficos.................................................................................................................................................................35
UserForms............................................................................................................................................................38
¿Qué sigue?..............................................................................................................................................................39
..................................................................................................................................................................................39
Preguntas sobre Visual Basic 6.0..............................................................................................................................43
Objetos y clases............................................................................................................................................................46
Reutilizar el código...................................................................................................................................................46
..................................................................................................................................................................................46
Clases........................................................................................................................................................................46
..................................................................................................................................................................................46
Varias instancias.......................................................................................................................................................47
..................................................................................................................................................................................47
Para crear un objeto a partir de una clase............................................................................................................47
Controles Estándar de Visual Basic...........................................................................................................................47
Descripción del control PictureBox...............................................................................................................................48
Propiedad Picture.........................................................................................................................................................49
Propiedad Autosize.......................................................................................................................................................50
Usar el PictureBox como contenedor...........................................................................................................................51
Propiedad Container - Insertar controles en tiempo de ejecución...............................................................................53
Propiedad Autoredraw.................................................................................................................................................54
Guardar la imagen del picturebox como BMP..............................................................................................................56
Propiedad Image..........................................................................................................................................................57
Dibujar en un picturebox con los métodos gráficos.....................................................................................................59
Enlaces relacionados....................................................................................................................................................59
3
Descripción...................................................................................................................................................................60
Propiedades..................................................................................................................................................................60
Propiedad Caption....................................................................................................................................................61
Propiedad Autosize...................................................................................................................................................62
Propiedad Aligment..................................................................................................................................................62
Otras propiedades del control son :.........................................................................................................................63
Ejemplo para cambiar propiedades en tiempo de ejecución....................................................................................64
Eventos del control Label:............................................................................................................................................67
Ejemplo utilizando el evento MouseMove...............................................................................................................67
Recorrer los labels del formulario con un bucle For Each next.....................................................................................69
Texto con sombra usando dos controles Label.............................................................................................................70
Simple botón................................................................................................................................................................71
Control ListBox..........................................................................................................................................................71
Ejemplo simple para agregar y eliminar elementos de un control List.................................................................74
Propiedad Sorted:.....................................................................................................................................................76
Eliminar elementos con el método Clear..................................................................................................................76
Propiedad ListCount.................................................................................................................................................76
Propiedad List...........................................................................................................................................................77
Otras propiedades del control ListBox son:..............................................................................................................78
Eventos del control ListBox.......................................................................................................................................79
Control ComboBox.......................................................................................................................................................80
Propiedad DataField y DataSource...........................................................................................................................82
Propiedad Multiline..................................................................................................................................................85
Propiedad PasswordChar..........................................................................................................................................86
Propiedad ScrollBars.................................................................................................................................................86
Propiedad Locked.....................................................................................................................................................87
Propiedad Maxlength...............................................................................................................................................87
Propiedad SelStart y SelLength.................................................................................................................................87
Algunos ejemplos del Uso del control TextBox.........................................................................................................88
Hacer que un textBox admita solo números y algunos otros caracteres indicados..................................................90
Ejemplo para cargar el contenido de un archivo de texto en un TextBox Multiline.................................................92
Redimensionar un TextBox al ancho y alto del formulario.......................................................................................95
4
Cambiar color de borde............................................................................................................................................95
Pasar el foco entre Textbox al presionar la tecla enter.............................................................................................98
Borrar todos los textbox de un formulario.............................................................................................................100
Enlaces relacionados..............................................................................................................................................101
Ejemplos básicos sobre el control CommandButton de visual basic.......................................................................101
Descripción del control...............................................................................................................................................102
Propiedades................................................................................................................................................................104
Métodos y funciones..................................................................................................................................................113
Eventos principales del control CommandButton......................................................................................................115
Tomar la apariencia de los temas de windows para los botones................................................................................119
Propiedad Value del OptionButton.........................................................................................................................120
Otro ejemplo del control OptionButton:................................................................................................................121
Ejemplo para crear un OptionButton con gráficos..................................................................................................123
Enlaces relacionados..............................................................................................................................................124
Tema 3.- funcionamiento de módulos...............................................................................................................124
Tema 4.- Alcances posibles...............................................................................................................................158
Tema 5.- obtención de resultados.....................................................................................................................158
Conclusiones:.......................................................................................................................................................158
Bibliografía:...........................................................................................................................................................158
5
Implementación de un sistema de control aplicando un software para calculo y balanceo de líneas eléctricas de media y baja tensión
Introducción
Tema 1.Analisis de la función de la norma.La Norma Oficial Mexicana para el acondicionamiento de Instalaciónes eléctricas NOM-001-
SEDE-2001 es una norma que te permite adecuar los materiales eléctricos de manera precisa mediante acuerdos hechos por Investigaciónes de area científica que permiten al usuario
construir establecimientos con condiciones eléctricas según acuerdos entre distintas compañías del ramo eléctrico las cuales son las siguientes:
Nota: cabe aclarar que debido a lo extenso que es la norma, solo se tomaran los elementos necesarios en los que se alcanzó a hacer nuestro programa para lo que la empresa
TECNÓLOGOS CONSTRUCTORES S.A. DE C.V. solicitó, debido a que es un proyecto de largo alcance, solo se mencionara los logros de nuestro trabajo como fase beta.
- Asociación Mexicana de Directores Responsables de Obra y Corresponsables, AMDROC
- Asociación Mexicana de Empresas del Ramo de Instalaciones para la Construcción, AMERIC
- Asociación de Normalización y Certificación, A.C., ANCE - Cámara Nacional de la Industria de Desarrollo y Promoción de Vivienda, CANADEVI
- Cámara Nacional de la Industria de la Transformación, CANACINTRA - Cámara Nacional de Manufacturas Eléctricas, CANAME
10 (Primera Sección-Vespertina) DIARIO OFICIAL Jueves 29 de noviembre de 2012
- Confederación de Cámaras Nacionales de Comercio, Servicios y Turismo, CONCANACO
- Comisión Federal de Electricidad, CFE - Comisión Nacional para el Uso Eficiente de la Energía, CONUEE - Confederación de Cámaras Industriales de los Estados Unidos Mexicanos,
CONCAMIN
- Comisión Nacional de Vivienda, CONAVI
6
- Federación de Colegios de Ingenieros Mecánicos y Electricistas de la República Mexicana, FECIME - Instituto de Investigaciones Eléctricas, IIE
- Instituto Politécnico Nacional, IPN - Petróleos Mexicanos, PEMEX
- Procuraduría Federal del Consumidor, PROFECO
- Secretaría de Economía, SE
- Secretaría de Gobernación, SEGOB
- Secretaría de Salud, SALUD
- Secretaría del Trabajo y Previsión Social, STPS
- Secretaría de Turismo, SECTUR.
La Norma tiene especificaciones para los siguientes tipos de materiales eléctricos:
TITULO 5. ESPECIFICACIONES
CAPITULO 1 Disposiciones Generales
Artículo 100 Definiciones
Artículo 110 Requisitos de las instalaciones eléctricas
CAPITULO 2 Alambrado y Protección
Artículo 200 Uso e identificación de los conductores puestos a tierra
Artículo 210 Circuitos derivados
Artículo 215 Alimentadores
Artículo 220 Cálculo de los circuitos derivados, alimentadores y acometidas
Artículo 225 Circuitos derivados y alimentadores exteriores
Jueves 29 de noviembre de 2012 DIARIO OFICIAL (Primera Sección-Vespertina) 11
Artículo 230 Acometidas
Artículo 240 Protección contra sobrecorriente
Artículo 250 Puesta a tierra y unión
Artículo 280 Apartarrayos de más de 1000 volts
Artículo 285 Supresores de sobretensiones transitorias de 1000 volts o menos (SSTT)
7
CAPITULO 3 Métodos de Alambrado y Materiales
Artículo 300 Métodos de alambrado
Artículo 310 Conductores para alambrado en general
Artículo 312 Gabinetes, cajas de desconexión y bases para medidores
Artículo 314 Cajas, cajas de paso y sus accesorios, utilizadas para salida, empalme, unión o jalado Artículo 320 Cable armado Tipo AC
Artículo 322 Ensambles de cable plano Tipo FC
Artículo 324 Cable de conductor plano Tipo FCC Artículo
326 Cable con separador integrado de gas Tipo IGS
Artículo 328 Cable de media tensión
Artículo 330 Cable con armadura metálica Tipo MC
Artículo 332 Cable con aislamiento mineral y cubierta metálica Tipo MI
Artículo 334 Cable con forro no metálico Tipos NM, NMC y NMS
Artículo 336 Cables de fuerza y control para charola Tipo TC
Artículo 338 Cables de acometida Tipos SE y USE
Artículo 340 Cables para alimentadores y circuitos derivados subterráneos Tipo UF
Artículo 342 Tubo conduit metálico semipesado Tipo IMC
Artículo 344 Tubo conduit metálico pesado Tipo RMC
Artículo 348 Tubo conduit metálico flexible Tipo FMC
Artículo350 Tubo conduit metálico flexible hermético a los líquidos Tipo LFMC
Artículo 352 Tubo conduit rígido de policloruro de vinilo Tipo PVC
Artículo 353 Tubo conduit de polietileno de alta densidad Tipo HDPE
Artículo 354 Tubo conduit subterráneo no metálico con conductores Tipo NUCC
Artículo 355 Tubo conduit de resina termofija reforzada Tipo RTRC
Artículo 356 Tubo conduit no metálico flexible hermético a los líquidos Tipo LFNC
Artículo 358 Tubo conduit metálico ligero Tipo EMT
Artículo 360 Tubo conduit metálico flexible ligero Tipo FMT
Artículo 362 Tubo conduit no metálico Tipo ENT
8
Artículo 364 Tubo conduit de polietileno
Artículo 366 Canales auxiliares
Artículo 368 Electroductos o ductos con barras (Busway)
Artículo 370 Canalizaciones prealambradas
Artículo 372 Canalizaciones en pisos celulares de concreto
Artículo 374 Canalizaciones en pisos metálicos celulares
Artículo 376 Ductos metálicos
Artículo 378 Ductos no metálicos
Artículo 380 Ensamble multicontacto
Artículo 382 Extensiones no metálicas
Artículo 384 Canalizaciones de canal de tipo vigueta
Artículo 386 Canalizaciones metálicas superficiales
Artículo 388 Canalizaciones no metálicas superficiales
Artículo 390 Canalizaciones bajo el piso
Artículo 392 Charolas portacables
Artículo 394 Alambrado oculto sobre aisladores de porcelana y tubo
Artículo 396 Alambrado sostenido por cable mensajero
Artículo 398 Alambrado abierto sobre aisladores
Artículo 399 Conductores aéreos en exteriores de más de 600 volts
12 (Primera Sección-Vespertina) DIARIO OFICIAL Jueves 29 de noviembre de 2012
CAPITULO 4 Equipo de Uso General
Artículo 400 Cables y cordones flexibles
Artículo 402 Cables para artefactos
Artículo 404 Desconectadores
Artículo 406 Contactos, conectores de cordón y clavijas de conexión
Artículo 408 Tableros de distribución y tableros de alumbrado y control Artículo
409 Tableros de control industrial
9
Artículo 410 Luminarias, portalámparas y lámparas
Artículo 411 Sistemas de alumbrado que funcionan a 30 volts o menos
Artículo 422 Aparatos
Artículo 424 Equipo eléctrico fijo para calefacción de ambiente
Artículo 426 Equipo eléctrico fijo para descongelar y derretir nieve
Artículo 427 Equipo eléctrico fijo para calentamiento de tuberías y recipientes
Artículo 430 Motores, circuitos de motores y controladores
Artículo 440 Equipos de aire acondicionado y de refrigeración
Artículo 445 Generadores
Artículo 450 Transformadores y bóvedas para transformadores (incluidos los enlaces del secundario)
Artículo 455 Convertidores de fase
Artículo 460 Capacitores
Artículo 470 Resistencias y reactores
Artículo 480 Baterías de acumuladores
Artículo 490 Equipos de más de 600 volts nominales
Como determinamos el tipo de calibre en base a la norma.
Todo entra en una tabla.
La Norma 310-16 es la indicada para poder determinar en base a la capacidad de corriente y se calcula de la siguiente manera.
SELECCIÓN DEL CALIBRE DE UN CONDUCTOR ELÉCTRICO EN TUBERÍA (CONDUIT) DE ACUERDO CON LA NORMA DE
INSTALACIONES ELÉCTRICAS NOM-001-SEDE-2005
10
La transmisión de energía eléctrica en forma segura y eficiente depende de una correcta selección del calibre del conductor.
La capacidad de conducción de corriente de los conductores eléctricos depende de muchos factores, entre los cuales podemos mencionar los siguientes: tipo de instalación (Conduit, charola, ducto subterráneo, etc.), del arreglo de los conductores (plano, trébol, etc.), de la temperatura de operación de los conductores seleccionados, de la longitud del circuito, etc. Debido a lo anterior, se debe realizar un estudio completo de la instalación eléctrica diseñada.
A continuación se indica como calcular la capacidad de conducción de corriente para conductores eléctricos en tubería conduit de acuerdo con la norma de instalaciones eléctricas NOM-001-SEDE-2005, la cual no intenta ser una guía de diseño, ni un manual de instrucciones para personas no calificadas.
1. Elegir el tipo de producto requerido en función de su aplicación, materiales, construcción y temperatura del conductor. Se recomienda consultar el catálogo Latincasa de Alambres y Cables de Baja Tensión para Construcción y Distribución.
2. Determinar la corriente nominal de la carga, utilizando las fórmulas indicadas en la tabla siguiente, de acuerdo con el tipo de sistema eléctrico (de corriente continua, de corriente alterna monofásico o trifásico) y del tipo de carga (motores, alumbrado u otras cargas).
11
12
Donde:
CP (HP) = Caballos de fuerza o potencia del motor kW = Potencia en kilowatt
V = Tensión nominal del sistema en Volts = Eficiencia del motor (Valor típico 0,8)
fp = Factor de potencia (Valor típico 0,9)
NOTA: Para conductores que alimenten un solo motor, la corriente nominal a plana carga se
multiplicará por 1,25 (artículo 430-22). En el caso de varios motores, a la suma de la corriente a plena
carga de los motores se le sumará el 25% de la corriente del motor más grande (artículo 430-24).
3. Seleccionar el calibre del conductor de acuerdo con su capacidad de conducción de corriente del cable, que depende del tipo del aislamiento, de la temperatura de operación y del método de instalación, utilizando la Tabla 1.
NOTA: De acuerdo al artículo 110-14 de la NOM-001-SEDE-2005, si la corriente en el circuito es mayor a 100 A, se elige la capacidad de corriente a una temperatura de operación del conductor de 75°C. Si la corriente del circuito es menor de 100 A, se elige la capacidad de corriente a una temperatura de operación del conductor de 60°C.
13
Tabla 1. Capacidad de conducción de corriente (A) permisible de conductores aislados para 0 a 2000 V nominales y 60°C a 90°C. No más de tres conductores portadores de corriente en una
canalización o directamente enterrados, para una temperatura ambiente de 30°C.
Temperatura nominal del conductor
Calibre Área de 60°C 75°C 90°C 60°C 75°C 90°C
la sección TW THW, RHW RHH, RHW-2 UF RHW RHW-2
transversal TWD THW-LS THHN, THW-2 XHHW XHHW
AWG nominal CCE THWN THHW-LS, XHHW-2
O
mm2
XHHW XHHW-2 DRS
Kcmil Cobre Aluminio
14 2,08 20* 20* 25* - - -
12 3,31 25* 25* 30* - - -
10 5,26 30 35* 40* - - -
8 8,37 40 50 55 - - -
6 13,3 55 65 75 40 50 60
4 21,2 70 85 95 55 65 75
2 33,6 95 115 130 75 90 100
1/0 53,5 125 150 170 100 120 135
2/0 67,4 145 175 195 115 135 150
3/0 85,0 165 200 225 130 155 175
4/0 107 195 230 260 150 180 205
250 127 215 255 290 170 205 230
300 152 240 285 320 190 230 255
350 177 260 310 350 210 250 280
400 203 280 335 380 225 270 305
14
500 253 320 380 430 260 310 350
600 304 355 420 475 285 340 385
750 380 400 475 535 320 385 435
1000 507 455 545 615 375 445 500
* A menos que se permita otra cosa específicamente en otro lugar de esta norma, la protección contra sobrecorriente de los conductores marcados con un asterisco (*), no se debe superar 15 A para 14 AWG, 20 A para 12 AWG y 30 A para 10 AWG, todos de cobre.
15
4. Una vez elegido el calibre del conductor, corregir la capacidad de conducción de corriente tomada de la Tabla 1, en función de la temperatura ambiente del lugar de instalación, para ello se multiplica por el factor de corrección que se indica en la Tabla 2.
Tabla 2. Factores de corrección por temperatura
Temperatura ambiente en el
lugar de la instalación 60°C 75°C 90°C
°C
21 – 25 1,08 1,05 1,04
26 – 30 1,00 1,00 1,00
31 – 35 0,91 0,94 0,96
36 – 40 0,82 0,88 0,91
41 – 45 0,71 0,82 0,87
46 – 50 0,58 0,75 0,82
51 – 55 0,41 0,67 0,76
5. Si existen más de 3 conductores en tubería (conduit) portadores de corriente, corregir la capacidad de conducción de corriente multiplicando ésta por los factores de la Tabla 3.
16
Tabla 3. Factores de ajuste para más de tres conductores portadores
de corriente en una canalización o cable
Cantidad de conductores Factor de corrección por
portadores de corriente eléctrica agrupamientoDe 4 a 6 0,80
De 7 a 9 0,70
De 10 a 20 0,50
De 21 a 30 0,45
De 31 a 40 0,40
De 41 y más 0,35
17
6. Calcular la caída de tensión de la instalación utilizando las fórmulas siguientes:
Circuitos Monofásicos Circuitos Trifásicos
= x 100 = √ x 100Donde:
V = Caída de tensión en el cable, en %
I = Corriente eléctrica que circula a través del conductor, en A L = Longitud total del circuito, en km
Vo = Tensión de fase a neutro, en V Vff = Tensión entre fases, en V
Z = Impedancia eléctrica del cable, en /km
La impedancia eléctrica del cable Z, expresada en ohm/km, está dada por la siguiente fórmula:
Z = RCos + XLSen
En forma aproximada sin considerar el factor de potencia (fp) la impedancia (Z) puede ser calculada con la fórmula siguiente:
18
Z = R2 + XL2
Donde:
R = Resistencia del conductor a la c.a. y a la temperatura de operación, en /km XL = Reactancia inductiva del conductor, en /km
fp = Cos
= Es el ángulo del factor de potencia (fp)
19
La siguiente tabla contiene la resistencia en corriente alterna a 75°C, la reactancia inductiva y la impedancia para cables de 600 V. Tres cables monopolares en un mismo tubo (conduit).
Tabla 4. Parámetros electricos generales de cables en tubo (conduit)
Ohms al neutro / km
Reactancia inductiva Resistencia a la c.a. Resistencia a la c.a. Impedancia (Z) de Impedancia (Z) de
Calibre
(XL) para todos los a 75°C de conductores a 75°C de conductores conductores de cobre conductores de aluminio
conductores de cobre de aluminio fp=0,9 fp=0,9
AWG
Ohm/km Ohm / km Ohm / km Ohm / km Ohm / km
Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit Conduit
o de PVC o de de de de de de de de de de de de de
kcmil aluminio acero PVC aluminio acero PVC aluminio acero PVC aluminio acero PVC aluminio acero
14 0.190 0.240 10.2 10.2 10.2 — — — 9.3 9.3 9.3 — — —
12 0.177 0.223 6.6 6.6 6.6 — — — 6.0 6.0 6.0 — — —
10 0.164 0.207 3.9 3.9 3.9 — — — 3.6 3.6 3.6 — — —
8 0.171 0.213 2.56 2.56 2.56 — — — 2.38 2.38 2.40 — — —
6 0.167 0.210 1.61 1.61 1.61 2.66 2.66 2.66 1.52 1.52 1.54 2.47 2.47 2.49
4 0.157 0.197 1.02 1.02 1.02 1.67 1.67 1.67 0.99 0.99 1.00 1.57 1.57 1.59
2 0.148 0.187 0.62 0.66 0.66 1.05 1.05 1.05 0.62 0.66 0.68 1.01 1.01 1.03
1/0 0.144 0.180 0.39 0.43 0.39 0.66 0.69 0.66 0.41 0.45 0.43 0.66 0.68 0.67
2/0 0.141 0.177 0.33 0.33 0.33 0.52 0.52 0.52 0.36 0.36 0.37 0.53 0.53 0.55
3/0 0.138 0.171 0.253 0.269 0.259 0.43 0.43 0.43 0.288 0.302 0.308 0.45 0.45 0.46
4/0 0.135 0.167 0.203 0.22 0.207 0.33 0.36 0.33 0.242 0.257 0.259 0.36 0.38 0.37
250 0.135 0.171 0.171 0.187 0.177 0.279 0.295 0.282 0.213 0.227 0.234 0.310 0.324 0.328
300 0.135 0.167 0.144 0.161 0.148 0.233 0.249 0.236 0.188 0.204 0.206 0.269 0.283 0.285
20
350 0.131 0.164 0.125 0.141 0.128 0.200 0.217 0.207 0.170 0.184 0.187 0.237 0.252 0.258
400 0.131 0.161 0.108 0.125 0.115 0.177 0.194 0.180 0.154 0.170 0.174 0.216 0.232 0.232
500 0.128 0.157 0.089 0.105 0.095 0.141 0.157 0.148 0.136 0.150 0.154 0.183 0.197 0.202
600 0.128 0.157 0.075 0.092 0.082 0.118 0.135 0.125 0.123 0.139 0.142 0.162 0.177 0.181
750 0.125 0.157 0.062 0.079 0.069 0.095 0.112 0.102 0.110 0.126 0.131 0.140 0.155 0.160
1000 0.121 0.151 0.049 0.062 0.059 0.075 0.089 0.082 0.097 0.109 0.119 0.120 0.133 0.140
La NOM-001-SEDE-2005 indica que la caída de tensión máxima permitida en la instalación tomando en consideración los cables del circuito alimentador y del circuito derivado, no debe ser mayor del 5%.
Para el caso del circuito derivado, la caída de tensión no deberá ser mayor de 3% y debe considerarse una caída de tensión máxima de 2% para el circuito alimentador.
Si la caída de tensión resultante del cálculo es mayor a lo anterior, debemos considerar un calibre mayor, volver a realizar los cálculos y verificar que se cumplan los porcentajes de caída de tensión sugeridos.
21
7. De acuerdo a NOM-001-SEDE-2005 es necesario instalar el conductor de puesta a
tierra de equipos en todos los alambrados. Para seleccionar el calibre de puesta a
tierra de equipos nos basaremos en la Tabla 5, la cual indica el calibre mínimo para la
puesta a tierra de canalizaciones y equipos.
Tabla 5. Tamaño nominal mínimo de los conductores de puesta a tierra para canalizaciones y equipos
Capacidad o ajuste del dispositivo
Tamaño nominal mm2automático de protección contra
sobrecorriente en el circuito antes (AWG o kcmil)
de los equipos, canalizaciones, etc.
Sin exceder de
(A) Cable de Cobre Cable de Aluminio15 2,08 (14) --
20 3,31 (12) --
30 5,26 (10) --
40 5,26 (10) --
60 5,26 (10) --
100 8,37 (8) 13,3 (6)
200 13,3 (6) 21,2 (4)
22
300 21,2 (4) 33,6 (2)
400 33,6 (2) 42,4 (1)
500 33,6 (2) 53,5 (1/0)
600 42,4 (1) 67,4 (2/0)
800 53,5 (1/0) 85,0 (3/0)
1000 67,4 (2/0) 107 (4/0)
Nota: Los conductores de puesta a tierra de los equipos podrían ser de mayor tamaño que lo especificado en esta tabla.
Este conductor de puesta a tierra de equipos puede ser conductor desnudo o aislado. Si es aislado, el color de identificación del aislamiento debe ser verde.
Tema 2.- características del programador.
Como funciona:
Es un lenguaje de fácil aprendizaje pensado tanto para programadores principiantes como expertos, guiado por eventos, y centrado en un motor de
formularios que facilita el rápido desarrollo de aplicaciones gráficas. Su sintaxis, derivada del antiguo BASIC, ha sido ampliada con el tiempo al agregarse las
características típicas de los lenguajes estructurados modernos. Se ha agregado una implementación limitada de la programación orientada a objetos (los propios
formularios y controles son objetos), aunque sí admite el polimorfismo mediante el uso de los Interfaces, no admite la herencia. No requiere de manejo de punteros y posee un manejo muy sencillo de cadenas de caracteres. Posee varias bibliotecas para manejo de bases de datos, pudiendo conectar con cualquier base de datos a través de ODBC (Informix, DBase, Access, MySQL, SQL Server, PostgreSQL ,etc)
a través de ADO.
Es utilizado principalmente para aplicaciones de gestión de empresas, debido a la rapidez con la que puede hacerse un programa que utilice una base de datos
sencilla, además de la abundancia de programadores en este lenguaje.
23
El compilador de Microsoft genera ejecutables que requieren una DLL para que funcionen, en algunos casos llamada MSVBVMxy.DLL (acrónimo de "MicroSoft
Visual Basic Virtual Machine x.y", siendo x.y la versión) y en otros VBRUNXXX.DLL ("Visual Basic Runtime X.XX"), que provee todas las funciones implementadas en el lenguaje. Además existen un gran número de bibliotecas
(DLL) que facilitan el acceso a muchas funciones del sistema operativo y la integración con otras aplicaciones. Sin embargo esto sólo es una limitación en
sistemas obsoletos, ya que las bibliotecas necesarias para ejecutar programas en Visual Basic vienen de serie en todas las versiones de Windows desde Windows
2000.1
Cómo se... (referencia de VBA para Excel)Office 2013
Este tema contiene vínculos a tareas de programación (temas del tipo "Cómo..." y guía paso a paso) para escenarios comunes de Excel.
Los temas de procedimientos son la puerta de enlace a temas importantes basados en tareas relacionadas con la programación y el desarrollo de aplicaciones mediante Excel. En este tema se incluyen las principales categorías de las acciones que se pueden realizar en Excel. Estos vínculos dirigen a temas de Ayuda importantes basados en procedimientos.
Libros y hojas de cálculo
Agregar una tabla de contenido a un libro o Describe cómo añadir una hoja de cálculo de tabla de contenido a un libro.
Crear etiquetas de direcciones desde una hoja de cálculo o Describe cómo tomar una lista de direcciones dispuestas como una dirección
por fila y disponerlas para que entren en etiquetas de direcciones para imprimir.
Crear un libro de calendario de programación o Describe cómo usar información en un libro para crear un libro de
calendario de programación que contiene un mes por hoja de cálculo y que puede incluir festivos y días de la semana.
Procedimientos para crear un libro o Se explica cómo crear un libro con Excel.
Crear o reemplazar una hoja de cálculo o Describe cómo crear o reemplazar una hoja de cálculo en un libro existente.
Nombrar una hoja de cálculo con un valor de celda o Describe cómo nombrar una hoja de cálculo según el valor de una celda.
Procedimientos para hacer referencia a varias hojas
24
o Se explica cómo hacer referencia a más de una hoja en Excel. Procedimientos para hacer referencia a hojas por número de índice
o Explica cómo hacer referencia a hojas por número de índice. Procedimientos para hacer referencia a las hojas por nombre
o Explica cómo hacer referencia a hojas por nombre. Ordenar las hojas de cálculo alfabéticamente por nombre
o Describe cómo ordenar hojas de cálculo en un libro de forma alfanumérica por nombre.
Macros y el Editor de Visual Basic
Ahora que ya conoce en parte cómo Microsoft Excel 2010 expone su modelo de objetos, puede intentar llamar a los métodos de un objeto y establecer las propiedades del objeto. Para hacerlo, debe escribir el código en un lugar y de una manera que Office pueda comprender; generalmente, mediante el uso del Editor de Visual Basic. Aunque se instala de forma predeterminada, muchos usuarios ni siquiera saben que está disponible hasta que no se habilita en la cinta de opciones.
Ficha Programador
Todas las aplicaciones de Office 2010 usan la cinta de opciones. La ficha Programador es una de las fichas incluidas en la cinta de opciones, donde se puede tener acceso al Editor de Visual Basic y a otras herramientas de programador. Debido a que Office 2010 no muestra la ficha Programador de manera predeterminada, debe habilitarla mediante el siguiente procedimiento:
Para habilitar la ficha Programador
1. En la ficha Archivo, elija Opciones para abrir el cuadro de diálogo Opciones de Excel.
2. Haga clic en Personalizar cinta de opciones en el lado izquierdo del cuadro de diálogo.
3. En Comandos disponibles en:, en el lado izquierdo del cuadro de diálogo, seleccione Comandos más utilizados.
4. En Personalice esta cinta de opciones, en el lado derecho del cuadro de diálogo, seleccione Fichas principales y, a continuación, active la casilla de verificación Programador.
5. Haga clic en Aceptar.
Después de que Excel muestre la ficha Programador, observe la ubicación de los botones Visual Basic, Macros y Seguridad de macros en la ficha.
25
Figura 1. Ficha Programador en Excel 2010
Problemas de seguridad
Haga clic en el botón de Seguridad de macros para especificar qué macros pueden ejecutarse y en qué condiciones. Aunque el código de macros de sistemas no confiables puede dañar gravemente el equipo, las condiciones de seguridad que impiden ejecutar macros útiles pueden disminuir en gran medida la productividad. La seguridad de macros es un tema complejo que se debe estudiar y comprender, si se trabaja con macros de Excel.
Para el propósito de este artículo, tenga en cuenta que si la barra Advertencia de seguridad: las macros se han deshabilitado aparece entre la cinta de opciones y el libro, cuando abre un libro que contiene una macro, puede hacer clic en el botón Habilitar contenido para habilitar las macros.
Además, como medida de seguridad, no puede guardar una macro en el formato de archivo predeterminado de Excel (.xlsx); debe guardar la macro en un archivo con extensión especial (.xlsm).
Editor de Visual Basic
El siguiente procedimiento muestra cómo crear un nuevo libro en blanco donde se almacenarán las macros. A continuación, podrá guardar el libro con el formato .xlsm.
Para crear un nuevo libro en blanco
1. Haga clic en el botón Macros, de la ficha Programador.2. En el cuadro de diálogo Macro que aparece, escriba Hello en Nombre de macro.3. Haga clic en el botón Crear para abrir el Editor de Visual Basic que incluirá los
esquemas de una nueva macro ya escritos.
VBA es un lenguaje de programación completo y, en consecuencia, tiene un entorno de programación completo. En este artículo solo se estudian las herramientas que se usan para empezar a trabajar en programación sin incluir la mayoría de las herramientas del Editor de Visual Basic. Realizada esta salvedad, cierre la ventana Propiedades en el lado izquierdo del Editor de Visual Basic e ignore las dos listas desplegables que aparecen sobre el código.
26
Figura 2. Editor de Visual Basic
El Editor de Visual Basic contiene el siguiente código.
VB
Sub Hello()
End Sub
Sub se refiere a Subrutinaque, por el momento, se puede definir como "macro". Al ejecutar la macro Hello se ejecuta cualquier código que se encuentre entre Sub Hello() y End Sub.
Ahora, edite la macro para que tenga un aspecto similar al siguiente código.
VB
Sub Hello() MsgBox ("Hello, world!")End Sub
Vuelva a la ficha Programador en Excel y haga clic de nuevo en el botón Macros.
Seleccione la macro Hello en la lista que aparece y, a continuación, haga clic en Ejecutar para mostrar un cuadro de mensaje pequeño que contiene el texto "Hello, world!".
Acaba de crear e implementar correctamente código de VBA personalizado en Excel. Haga clic en Aceptar en el cuadro de mensaje para cerrarlo y terminar de ejecutar la macro.
Si no aparece el cuadro de mensaje, compruebe la configuración de seguridad de la macro y reinicie Excel.2
27
Un ejemplo real
Supongamos que tiene un libro que contiene listas en una gran cantidad de hojas de cálculo y que desea cambiar el nombre de cada hoja de cálculo para que coincida con el encabezado de la lista de esa hoja de cálculo. No todas las hojas de cálculo contienen una lista. Si una hoja de cálculo tiene una lista, el encabezado está en la celda B1, de lo contrario, si no tiene una lista, la celda B1 está en blanco. Los nombres de hojas de cálculo sin listas no deben modificarse.
Normalmente, esto podría tratarse de una tarea compleja que implica ver cada hoja de cálculo para saber si tiene una lista, copiar el nombre de la lista en caso de que exista, hacer clic en la ficha de hoja de cálculo y luego pegar el nuevo nombre. En lugar de realizar todos estos pasos manualmente, use VBA de Excel para cambiar el nombre de las hojas de forma automática.
Aprendizaje sobre objetos
Para resolver un problema de programación de VBA, primero debe saber qué objetos manipulará el código. Para investigar y conocer esa información, una herramienta esencial es la referencia del modelo de objetos de Excel, que forma parte de la referencia del programador de Excel 2007 en Microsoft Developer Network (MSDN).
Estos materiales de referencia se actualizarán para Excel 2010 cuando la herramienta esté disponible al público; sin embargo, la referencia del programador de Excel 2007 se adecua a la mayoría de los casos de Excel 2010.
Figura 3. Referencia del modelo de objetos de Excel en MSDN
28
El primer paso consiste en averiguar cómo manipular los objetos concretos con los que necesita trabajar para llevar a cabo su tarea; por ejemplo, hojas de cálculo, nombres de hoja de cálculo, celdas y contenidos de celdas. En Excel, hay al menos dos formas de enfocar el problema:
Ir directamente a la referencia del modelo de objetos. Grabar algunas de las acciones que se desean automatizar, ver cómo el código
grabado manipula los objetos y, a continuación, ir a la referencia del modelo de objetos para obtener más información.
Las opiniones varían con respecto a qué enfoque es preferible, pero por ahora, intente primero usar la grabadora de macros.
Uso de la grabadora de macros
A veces una simple macro grabada es todo lo que se necesita; en estos casos, incluso, no es necesario mirar el código. Por lo general, la grabación por sí sola no es suficiente, pero sí, un punto de inicio en el siguiente proceso.
Para usar la grabadora de macros como punto de inicio de la solución
1. Grabe las acciones que desea codificar.2. Revise el código y busque las líneas que realizan esas acciones.3. Elimine el resto del código.
29
4. Modifique el código grabado.5. Agregue variables, estructuras de control y otro código que la grabadora de macros
no pueda grabar.
Comience su investigación con la grabación de una macro que cambie el nombre de una hoja de cálculo a New Name. Después podrá usar la macro grabada para crear su propia macro que cambie el nombre de varias hojas de cálculo según su contenido.
Para grabar una macro que cambie el nombre de una hoja de cálculo
1. Haga clic en Grabar macro en la ficha Programador.2. Coloque el nombre RenameWorksheets a la macro, cambie el nombre Sheet1 a New
Name y, a continuación, haga clic en Detener grabación. 3. Vaya a la ficha Programador o Ver, haga clic en el botón Macros y elija Editar para
abrir el Editor de Visual Basic.
En el Editor de Visual Basic, el código debe verse similar al siguiente.
VB
Sub RenameWorksheets()'' RenameWorksheets Macro'' Sheets("Sheet1").Select Sheets("Sheet1").Name = "New Name"End Sub
Las primeras cuatro líneas que aparecen después de la línea Sub son comentarios. Toda línea que comienza con un apóstrofe es un comentario y no tiene efecto alguno sobre la acción que ejecuta la macro. Los principales usos de los comentarios son los siguientes:
Facilitar la comprensión del código, no solo para usted, sino para cualquier persona que necesite modificarlo en el futuro.
Deshabilitar temporalmente una línea de código (se denomina marcar como comentario).
Los cuatro comentarios en esta macro grabada no cumplen ningún propósito, por lo tanto, elimínelos.
La siguiente línea usa el método Select para seleccionar el miembro Sheet1 del objeto de la colección Sheets. En el código de VBA, por lo general, no es necesario seleccionar objetos antes de manipularlos, aunque eso es lo que hace la grabadora de macros. En otras palabras, esta línea de código es redundante, por lo tanto, puede eliminarla.
30
La última línea de la macro grabada modifica la propiedad Nombre del miembro Sheet1 de la colección Sheets. Esta es la línea que debe conservar.
Después de realizar los cambios, el código grabado ahora debe ser similar al siguiente.
VB
Sub RenameWorksheets() Sheets("Sheet1").Name = "New Name"End Sub
Vuelva a cambiar la hoja denominada New Name a Sheet1 de forma manual y, a continuación, ejecute la macro. El nombre debe volver a cambiar a New Name.
Modificación del código grabado
Ahora ha llegado el momento de investigar la colección Sheets que la grabadora de macros usó. El tema Sheets en la referencia del modelo de objetos incluye el siguiente texto.
"La colección Sheets puede contener los objetos Chart o Worksheet. Si necesita trabajar con hojas de un solo tipo, consulte el tema de objetos para ese tipo de hoja".
Como está trabajando solo con Worksheets, entonces, cambie el código para que se vea de la siguiente forma.
VB
Sub RenameWorksheets() Worksheets("Sheet1").Name = "New Name"End Sub
Función de bucle
Una limitación del código en este punto es que solo realiza el cambio en una hoja de cálculo. Se puede agregar otra línea para cada hoja de cálculo cuyo nombre desea cambiar, pero ¿qué sucede si desconoce cuántas hojas de cálculo hay o cuáles son sus nombres actuales? Se necesita una forma de aplicar alguna regla para cada hoja de cálculo del libro.
VBA tiene una construcción denominada bucle For Each que es ideal. El bucle For Each examina cada elemento en un objeto de colección, como Worksheets, y se puede usar para llevar a cabo una acción (como cambiar un nombre) en algunos o en todos esos elementos.
31
Para obtener más información acerca del bucle For Each, consulte la referencia del lenguaje de VBA. Haga clic en la sección sobre los temas conceptuales de Visual Basic y, a continuación, en el tema sobre el uso de instrucciones For Each...Next. Además, tenga en cuenta que la referencia del lenguaje de VBA, como la referencia del modelo de objetos, compensará ampliamente el tiempo que invierta examinándola, ya que es un lugar excelente para buscar ideas si se estanca cuando trabaja con código.
Use el tercer ejemplo del tema sobre el uso de instrucciones For Each...Next para modificar la macro con el fin de que tenga un aspecto similar al siguiente código.
VB
Sub RenameWorksheets()For Each myWorksheet In Worksheets myWorksheet.Name = "New Name"NextEnd Sub
myWorksheet es una variable, es decir, lo que representa varía. En este caso, la variable myWorksheet representa sucesivamente cada hoja de cálculo en la colección Worksheets. No es necesario usar myWorksheet; se puede usar "x", "ws", "HojaCalculoCambiarNombreAlContenidoCeldaB1" o (con algunas restricciones) prácticamente cualquier nombre que se desee. Una buena regla es usar nombres de variables que sean lo suficientemente extensos como para que recuerden a qué se refieren, pero no tan extensos que puedan recargar el código.
Si ejecuta la macro en su estado actual, se produce un error porque Excel requiere que cada hoja de cálculo de un libro tenga un nombre único. Sin embargo, la línea siguiente indica a Excel que asigne a todas las hojas de cálculo el mismo nombre.
VB
myWorksheet.Name = "New Name"
Para corregir la línea y comprobar si el bucle For Each funciona, cambie la línea de la siguiente manera.
VB
myWorksheet.Name = myWorksheet.Name & "-changed"
32
En lugar de intentar dar el mismo nombre a cada hoja de cálculo, esta línea cambia el nombre actual de cada hoja de cálculo (myWorksheet.Name) anexando la palabra "-changed" al nombre actual.
Cambio de nombre útil
La macro se está acercando a lo que podría ser la solución para el problema que tiene en este momento. Lo que necesita ahora es tomar información de las hojas de cálculo, específicamente de la celda B1 de cada hoja, y colocar esa información en los nombres de las hojas de cálculo.
Esta vez, en vez de usar la grabadora de macros para averiguar cómo referirse a una celda, pruebe y vea si usando el objeto Cell logra su objetivo. Es un buen intento, pero si abre la referencia del modelo de objetos y busca el objeto Cell, notará que no existe ningún objeto Cell. En cambio, hay un objeto CellFormat.
El tema del objeto CellFormat incluye el siguiente código en el primer ejemplo de código.
VB
' Set the interior of cell A1 to yellow. Range("A1").Select
Resulta ser que usa Range para especificar un rango de celdas o simplemente una celda individual. Nuevamente, no es necesaria la parte .Select, pero sí es necesario averiguar cómo hacer referencia a los contenidos del objeto Range, en oposición al mismo objeto Range. Si se dirige al tema del objeto Range, puede leer que Range tiene Methods y Properties. Los contenidos de Range constituyen una cosa, no una acción, por lo que probablemente sea una Property. Si busca hacia abajo en la lista, podrá ver la propiedad Value. Por lo tanto, intente lo siguiente.
VB
Sub RenameWorksheets()For Each myWorksheet In Worksheets myWorksheet.Name = myWorksheet.Range("B1").ValueNextEnd Sub
Obtendrá un error si ejecuta esto en un libro que contiene hojas de cálculo donde la celda B1 está vacía, porque Range vacío tiene un valor de "" (una cadena de texto vacía), que no es un nombre de hoja de cálculo válido. De todas formas, ya es momento de crear algunos datos de ejemplo. Haga que las tres hojas de cálculo del libro tengan un aspecto similar al de la siguiente figura y, a continuación, ejecute la macro.
33
Figura 4. Datos de ejemplo para la macro RenameWorksheets
Los nombres de las hojas de cálculo deben cambiar en consecuencia.
Búsqueda de celdas vacías
Como mencionamos anteriormente, la macro genera un error si alguna de las celdas B1 en el libro está vacía. En lugar de revisar manualmente todas las hojas de cálculo, puede codificar la macro para que haga esto por usted. Antes de la línea myWorksheet.Name, agregue la siguiente línea de código.
VB
If myWorksheet.Range("B1").Value <> "" Then
Después de la línea myWorksheet.Name agregue el texto siguiente.
VB
34
End If
Esto se denomina una instrucción If…Then. La instrucción If…Then indica a Excel que haga lo que se indica entre la línea If y la línea End, pero solo si se cumple la condición en la línea If. En el ejemplo, la siguiente línea especifica la condición que se debe cumplir.
VB
myWorksheet.Range("B1").Value <> ""
La línea <> significa "no es igual a" y las comillas sin contenido en su interior representan una cadena de texto vacía, es decir, no hay texto en absoluto. Por lo tanto, cualquier línea de código que esté entre If y End se ejecutará únicamente si el valor de la celda B1 no es igual a nada, es decir, si hay texto en la celda B1.
Para obtener más información acerca de la instrucción If…Then, consulte la referencia del lenguaje de VBA. (El nombre completo de la instrucción es "If…Then…Else", donde Else es un componente opcional).
Declaraciones de variables
Otra mejora que debe hacer en la macro es poner una declaración de la variable myWorksheet al principio de la macro.
VB
Dim myWorksheet As Worksheet
Dim es la abreviatura de "Dimension" y Worksheet es el tipo de esta variable en particular. Esta instrucción indica a VBA qué tipo de entidad myWorksheet representa. Observe que después de escribir As, el Editor de Visual Basic muestra una ventana emergente que incluye todos los tipos de variables disponibles. Eso es un ejemplo de la tecnología IntelliSense; es decir, que el Editor de Visual Basic responde a lo que determina que se está intentando hacer y ofrece una lista de opciones apropiadas. Puede elegir una opción de la lista o seguir escribiendo.
Aunque las declaraciones de variables no son necesarias en VBA, su uso es muy recomendable. Estas declaraciones hacen que el seguimiento de variables y errores en el código sean más fáciles de realizar. Asimismo, tenga en cuenta que si declara una variable con un tipo de objeto (como Worksheet), IntelliSense mostrará una lista adecuada de propiedades y métodos asociados con ese objeto si usa esa variable de objeto más adelante en la macro.
35
Comentarios
La macro es lo suficientemente compleja ahora y se necesitarían incluir algunos comentarios que recuerden lo que hace el código. La cantidad de comentarios que se va a usar en parte se debe a una cuestión de estilo personal, pero, en general, es mejor que sean más que menos. El código generalmente necesita modificaciones y actualizaciones con el tiempo. Sin comentarios, podría ser difícil comprender lo que sucede en el código, especialmente si la persona que lo modifica no es la misma persona que lo escribe en primer lugar. Al agregar comentarios para la condición If y para la línea que cambia el nombre de las hojas de cálculo, se obtiene el siguiente código.
VB
Sub RenameWorksheets()Dim myWorksheet As WorksheetFor Each myWorksheet In Worksheets 'make sure that cell B1 is not empty If myWorksheet.Range("B1").Value <> "" Then 'rename the worksheet to the contents of cell B1 myWorksheet.Name = myWorksheet.Range("B1").Value End IfNextEnd Sub
Para probar la macro, vuelva a cambiar el nombre de las hojas de cálculo a Sheet1, Sheet2 y Sheet3, y elimine los contenidos de la celda B1 en una o más hojas de cálculo. Ejecute la macro para comprobar si cambia los nombres de las hojas de cálculo que tienen texto en la celda B1 y si deja las otras hojas sin modificaciones. La macro funciona para cualquier cantidad de hojas de cálculo, con cualquier combinación de celdas B1 llenas y vacías.
Más cosas que se pueden hacer con VBA
Esta sección estudia algunas otras cosas que se pueden hacer con VBA en Excel 2010. Los ejemplos de esta sección están diseñados para proporcionar una idea de las funciones de VBA en lugar de centrarse en escenarios reales específicos. A medida que trabaja con los ejemplos, quizá le resulte útil repasar información sobre los objetos en cada paso. Puede encontrar esta información en la referencia del modelo de objetos.
Importancia de una actitud abierta
Una buena forma de aprender programación en general, y VBA de Excel en particular, es adoptar una estrategia que implique intentar algo, ver si funciona y preguntarse cosas como:
¿Qué podría intentar hacer a continuación?
36
¿Qué deseo aprender en primer lugar según el uso que necesito darle a VBA? ¿Qué puede ser simplemente divertido o interesante saber? ¿Qué despierta mi curiosidad?
Se recomienda encarecidamente al lector que investigue todos los caminos que se abren hacia la ruta del conocimiento.
Gráficos
Una tarea común en Excel es crear un gráfico basado en un rango de celdas. Cree una nueva macro llamada AssortedTasks y, a continuación, escriba el siguiente texto en el Editor de Visual Basic.
VB
Dim myChart As ChartObject
Agregue una línea para crear el objeto de gráfico y asígnele la variable myChart.
VB
Set myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)
Los números en los paréntesis determinan la posición y el tamaño del gráfico. Los primeros dos números son las coordenadas de la esquina superior izquierda y los segundos dos números corresponden al ancho y alto.
Cree una nueva hoja de cálculo en blanco y ejecute la macro. El gráfico que se crea no sirve porque no tiene datos. Elimine el gráfico que acaba de crear y agregue las siguientes líneas al final de la macro.
VB
With myChart .Chart.SetSourceData Source:=SelectionEnd With
Este es un patrón común en la programación de VBA. Primero crea un objeto, le asigna una variable y, a continuación usa la construcción With…End With para realizar tareas con el objeto. El código de ejemplo le indica al gráfico que use la selección actual para sus datos. (Selection es un valor para el parámetro Source del método SetSourceData, no un valor de
37
una propiedad del objeto; por lo tanto, la sintaxis de VBA requiere que use dos puntos y el signo igual [:=] en lugar de usar solo el signo igual [=] para asignar el valor.)
Escriba algunos números en las celdas A1:A5, seleccione las celdas y, a continuación, ejecute la macro. El gráfico se muestra como el tipo predeterminado, un gráfico de barras.
Figura 5. Gráfico de barras creado mediante VBA
Si no le gusta el gráfico de barras, puede cambiar a algún otro tipo de gráfico usando código similar al siguiente.
VB
With myChart .Chart.SetSourceData Source:=Selection .Chart.ChartType = xlPieEnd With
xlPie es un ejemplo de una constante integrada, también conocida como constante enumerada. Toda la aplicación Excel tiene varias de estas constantes que se encuentran muy bien documentadas. Para obtener más información acerca de las constantes integradas,
38
consulte la sección sobre enumeraciones de la referencia del modelo de objetos. Por ejemplo, las constantes para tipos de gráfico se indican en la sección sobre enumeraciones XlChartType.
Los datos se pueden modificar. Por ejemplo, intente agregar esta línea justo después de la declaración de variable.
VB
Application.ActiveSheet.Range("a4").Value = 8
Puede obtener una entrada de usuario y usar esa entrada para modificar los datos.
VB
myInput = InputBox("Please type a number:")Application.ActiveSheet.Range("a5").Value = myInput
Por último, agregue las líneas siguientes al final de la macro.
VB
ActiveWorkbook.SaveActiveWorkbook.Close
La macro completa debería ser similar a la siguiente.
VB
Sub AssortedTasks()Dim myChart As ChartObjectApplication.ActiveSheet.Range("a4").Value = 8myInput = InputBox("Please type a number:")Application.ActiveSheet.Range("a5").Value = myInputSet myChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)With myChart .Chart.SetSourceData Source:=Selection .Chart.ChartType = xlPieEnd WithActiveWorkbook.SaveActiveWorkbook.CloseEnd Sub
39
Compruebe que las celdas A1:A5 sigan estando seleccionadas, ejecute la macro, escriba un número en el cuadro de entrada y, a continuación, haga clic en Aceptar. El código guarda y cierra el libro. Vuelva a abrir el libro y observe el cambio en el gráfico circular.
UserForms
La sección anterior mostraba cómo usar un cuadro de entrada sencillo para obtener una entrada de usuario. Además del correspondiente cuadro de mensaje que muestra información, VBA proporciona amplias funcionalidades que puede usar para crear cuadros de diálogo personalizados, para codificar controles que se colocan directamente en las hojas de cálculo o para manipular los cuadros de diálogo que están integrados en Excel. Para obtener más información acerca de estas funcionalidades, consulte controles, cuadros de diálogo y formularios en la referencia del programador de Excel 2007.
Esta sección completa la introducción a VBA en Excel presentando un panorama general de UserForms.
En la ficha Programador, haga clic en el botón Visual Basic para abrir el Editor de Visual Basic y, a continuación, vaya al menú Insertar y elija UserForm para abrir la vista Diseño de UserForm.
Verá dos ventanas. Una representa el UserForm que está creando y la otra, el Cuadro de herramientas, muestra los distintos controles que puede agregar a su UserForm; por ejemplo, botones de comandos, botones de opciones, casillas de verificación, entre otros. Puede mover el mouse sobre un control del Cuadro de herramientas para ver qué tipo de control crea.
Cree un UserForm muy sencillo con un solo botón que ejecute la macro Hello que creamos al comienzo de este artículo. En el Cuadro de herramientas, presione el control CommandButton y, a continuación, arrástrelo al UserForm para crear un botón de comando. Haga clic con el botón secundario en el botón de comando y elija Ver código.
La Sub que aparece es un esqueleto para un procedimiento de evento que se ejecuta cuando se produce un evento en particular. En este caso, como el nombre de Sub indica, el evento que ejecuta el código es un Click en CommandButton1. Agregue la siguiente línea al procedimiento de evento.
VB
Run("Hello")
El Editor de Visual Basic debe ser ahora similar al siguiente.
Figura 6. Procedimiento de evento CommandButton1_Click
40
Guarde el libro, vaya al menú Ventana y elija UserForm1 (UserForm) para volver a mostrar el UserForm. Haga clic en la flecha verde de la barra de herramientas para ejecutar el UserForm. Cuando aparece el cuadro de diálogo, haga clic en el botón de comando para ejecutar la macro Hello, que muestra el cuadro de mensaje "Hello, world!". Cierre el cuadro de mensaje para volver al UserForm que se ejecuta y, a continuación, cierre el UserForm que se ejecuta para volver a la Vista Diseño.
¿Qué sigue?
Es posible que la información que se brinda en este artículo, combinada con un poco de experimentación y tiempo de estudio de la referencia del modelo de objetos y la referencia del lenguaje de VBA, le resulte lo suficientemente útil como para lograr cualquier tarea que lo impulsa a empezar a aprender sobre VBA. Si es así, excelente. De lo contrario, un buen paso es ampliar sus expectativas hacia un conocimiento más general de VBA.
Una manera de aprender más sobre VBA es estudiar código activo. Además de los ejemplos proporcionados en la referencia del modelo de objetos y la referencia del lenguaje de VBA, hay una cantidad enorme de código de VBA en Excel disponible en distintas fuentes en línea, incluidos los artículos en MSDN, sitios web desarrollados por los profesionales más valiosos de Microsoft (MVP) que se especializan en Excel y otros sitios web que puede encontrar mediante una búsqueda rápida en Web.
El código de estos recursos puede ayudarlo a resolver problemas inmediatos de programación y proporcionarle ideas para proyectos que ni siquiera ha pensado aún.
Si prefiere realizar un estudio más sistemático de VBA, pueden encontrar varios libros sobre VBA, así como varias revisiones de cada uno de estos libros disponibles en Web que pueden ser útiles para elegir su mejor forma de aprendizaje.
Características principales de Visual Basic
41
La facilidad que nos da este programa es el de arrastrar todos los objetos que necesitemos incluir en nuestros programas, así nos evitamos el trabajo de programar algo más, lo único que tenemos que hacer es declar que es lo que tiene que hacer nuestro objeto.
Componentes, características físicas o entorno de Visual Basic
Unos de los componentes de Visual Basic es la barra de título, donde nos muestra el nombre del proyecto y del formulario que se está haciendo.
La barra de menús, es donde se agrupan los menús de Visual Basic.
La barra de herramientas estándar de Visual Basic es otro componente de Visual Basic es donde tienen agrupaos los botones utilizados con frecuencia, así evitando poner en menú, archivo, etc.
La barra de herramientas no estándar, dentro de visual Basic es donde se agrupan la gran mayoría de objetos y controles que se incluirán en nuestro proyecto.
La ventana de propiedades dentro de lo que es Visual Basic es donde podemos ver las características modificables y no modificables del mismo.
42
La ventana de posición de los formularios, ahí podemos ver la ubicación de cada uno de los formularios al momento de la ejecución del programa, los podemos ubicar a nuestro gusto modificando su lugar al momento del diseño.
La ventana de ayuda o Help que dispone Visual Basic 0.6 excelente, al igual que en todos los demás programas de Microsoft, tiene una funcionalidad muy buena ya que tan solo al señalar un objeto y luego oprimir la tecla F1 saldrá información sobre el objeto señalado, algo muy práctico.
La Ventana de proyectos, nos deja ver los elementos involucrados dentro del proyecto, como formularios, módulos, controles OCX, etc.
43
El editor de código es un componente de Visual Basic 0.6 muy importante, es donde nosotros ingresamos nuestro código para así generar un evento. Utiliza varios colores para las líneas de código, como el negro que es escrito por el usuario, las palabras claves con azul, los comentarios con verde, los errores con color rojo.
44
Preguntas sobre Visual Basic 6.0
¿Qué es un evento?
Un evento es una acción que realiza el usuario hacia un objeto, asi como cuando hacemos un click sobre un botón y la acción de hacer click sobre el botón se llama “evento click” Cada vez que se produce un evento sobre un determinado control, se pasa a el procedimiento que realiza la acción programada por el usuario para ese evento concreto.
Private Sub Command1_Click
End Sub
¿Qué es método?
Los métodos son también funciones que son llamadas desde el programa, que en diferencia con los procedimientos no son programadas por el usuario. Cada tipo de objeto o de control tienen sus propios métodos, asi como también tienen propiedades y eventos.
¿Qué son los controles?
Un control es un elemento grafico que forma parte de una aplicación asi como: botones, cajas de texto, los graficos y muchos mas son controles para Visual Basic. Cada control tiene su nombre del cual se lo puede diferenciar dentro del programa, ya vienen por defecto con sus nombres respectivamente pero los usuarios podemos modificar o cambiar sus nombres.
¿Qué son las propiedades?
Todo control u objeto dentro de Visual Basic tiene sus propias propiedades, unas distintas de otras. Por lo general las propiedades de un objeto son datos que tiene valores lógicos (true, false). En fin son cualidades propias de cada control u objeto.
¿Qué es un objeto?
A los controles que colocamos en un formulario que poseen propiedades, métodos y eventos, se les llaman objetos y a las características propias de esos objetos se les llaman propiedades.
¿Qué es una función de Visual Basic 6.0?
Existen varias funciones de cadena, que ya vienen en visual Basic 6.0 y solo hay que llamarlas y utilizarlas.
45
Funciones de cadenas
Se podría decir que “Cadena” es una sucesión de caracteres. Una cadena puede tener uno o varios caracteres numéricos como también con letras (Alfanumérico).
Str ---> (número) Convierte un número a una cadena en numeración decimal.
Val --> (cadena numérica) convierte un valor sea texto, y lo toma como valor numérico
Un número tiene un valor, pero también tiene una presentación escrita. El valor es algo que estará en el ordenador como una sucesión de bits.
Funciones con números
Visual Basic también puede operar con números. Los operadores que utiliza para las operaciones básicas son:
+ --> Suma
- --> Resta
* --> Multiplicación
/ --> División
\ --> División sin decimales
Mod --> Resto de una división o residuo
^ --> Eleva a un exponente
Otras Funciones
Sqr --> Raíz cuadrada Devuelve la raíz cuadrada de un número
Exp --> Exponenciación Devuelve el número elevado al exponente indicado
Log --> Logaritmo Devuelve el logaritmo natural de ese número
Como sabemos Visual Basic solo admite dos resultados, True (Verdadero) o False (Falso) Estos operadores son:
= --> Igual que
<> --> No igual que
46
< --> Mayor que
<= --> Mayor o igual que
> --> Menor que
Funciones Trigonométricas
Sin --> Seno Devuelve el valor del seno de un ángulo.
Cos --> Coseno Devuelve el coseno de un ángulo (En radianes)
Tan --> Tangente Devuelve la tangente de un ángulo
Arc Tang.--> Arco Tang. Devuelve un arco cuya tangente sea el número (Angulo en radianes) (n-1) --> arco tangente
Numeros Aleatorios
Randomize --> (Numero)
Ejercicios
Aquí veremos la utilización de algunos controles.
* Botón de comando o CommandButton.
1.Utilizaremos el evento click -> ocurre cuando el usuario presiona el botón. Una vez estando en el formulario, procedemos a poner un botón de comando o command Button, hacemos doble click sobre el botón de comando y en la parte superior derecha seleccionamos el evento click .Escriba la siguiente línea de código:
Private Sub command1_Click( )
Msgbox (“Hola como estas..?”)
End Sub
Después de haber hecho lo propuesto, presionamos F5 y hacemos click sobre el botón. Saldrá un mensaje diciendo Hola como estas..?
47
Objetos y clases
Un objeto es una combinación de código y datos que puede tratarse como una unidad. Un objeto puede ser una porción de una aplicación, como un control o un formulario. Una aplicación entera también puede ser un objeto.
Reutilizar el código
Los objetos permiten declarar variables y procedimientos una vez y utilizarlos siempre que sean necesarios. Por ejemplo, si desea agregar un corrector ortográfico a una aplicación, puede definir todas las variables y funciones auxiliares para proporcionar funcionalidad de corrección ortográfica. Si crea el corrector ortográfico como una clase, puede volver a utilizarlo en otras aplicaciones mediante la inclusión de una referencia en el ensamblado compilado. Aún mejor, tal vez pueda ahorrarse trabajo mediante el uso de una clase de corrector ortográfico que otra persona ya haya desarrollado.
Clases
Cada objeto de Visual Basic está definido por una clase. Una clase describe las variables, propiedades, procedimientos y eventos de un objeto. Los objetos son instancias de clases; pueden crearse tantos objetos como sean necesarios una vez que se defina una clase.
Para comprender la relación entre un objeto y su clase, piense en los moldes de hacer galletas y en las galletas. El molde es la clase. Define las características de cada galleta, por ejemplo, el tamaño y la forma. La clase se utiliza para crear objetos. Los objetos son las galletas.
Dos ejemplos en Visual Basic podrían ayudar a ilustrar la relación entre las clases y objetos.
Los controles en el Cuadro de herramientas de Visual Basic representan las clases. Cuando se arrastra un control del Cuadro de herramientas a un formulario, se está creando un objeto; una instancia de una clase.
El formulario con el que se trabaja en tiempo de diseño es una clase. En tiempo de ejecución, Visual Basic crea una instancia de la clase del formulario, es decir, un objeto.
48
Varias instancias
Los objetos recientemente creados a partir de una clase son a menudo idénticos. Una vez que existen como objetos individuales no obstante, sus variables y propiedades se pueden cambiar independientemente de las demás instancias. Por ejemplo, si agrega tres casillas de verificación a un formulario, cada objeto de botón de casilla de verificación es una instancia de la clase CheckBox. Los objetos CheckBox individuales comparten un conjunto de características y funciones comunes (propiedades, variables, procedimientos y eventos) definidos por la clase. No obstante, cada uno tiene su propio nombre, puede habilitarse y deshabilitarse por separado, y puede colocarse en una ubicación diferente en el formulario.
Para crear un objeto a partir de una clase
1. Determine en qué clase desea crear un objeto.2. Escriba Instrucción Dim (Visual Basic) para crear una variable a la que puede
asignar una instancia de clase. La variable debe ser del tipo de la clase deseada.
Dim nextCustomer As customer
3. Agregue la palabra clave New (Visual Basic) para inicializar la variable a una nueva instancia de la clase.
Dim nextCustomer As New customer
4. Puede tener acceso a los miembros de la clase ahora a través de la variable de objeto.
nextCustomer.accountNumber = lastAccountNumber + 1
Controles Estándar de Visual Basic
PictureBox - Cajas de Imagen
Label - Etiquetas
49
TextBox - Cajas de texto
Frame - Marcos
CommandButton - Botones de comando
CheckBox
OptionButton - Botones de opción
ListBox y Control ComboBox
HScrollBar y VScrollBar - Barras de desplazamiento
Timer - Temporizadores
DriveListBox , FileListBox y DirListBox
Image - Control de imagen
Data
Data - 2
-- Indice :
Descripción del control PictureBox
Propiedad Picture
Propiedad AutoSize
Usar el PictureBox como contenedor
Propiedad Container
Propiedad Autoredraw
Guardar la imagen del picturebox como BMP
Propiedad Image
Dibujar en un picturebox con los métodos gráficos
Enlaces relacionados
Descripción del control PictureBox
El control PictureBox se utiliza para mostrar y cargar archivos de imagen, también para dibujar figuras mediante los métodos gráficos , y también como control contenedor de otros controles, como los controles Frame
50
Vista de un picturebox con un gráfico cargado
Vista de un PictureBox con un dibujo hecho por nosotros, en este caso un rectángulo :
Propiedad Picture
La principal propiedad del control PictureBox se llama precisamente Picture.
Esta propiedad es la que indica el gráfico que estará cargado. Para cargar un gráfico en visual basic desde el disco, se usa la función LoadPicture . A Esta función le debemos indicar como parámetro la ruta del fichero
51
Por ejemplo si quisiera cargar un archivo de imagen llamado paisaje.jpg que está ubicado en la unidad c:, y que se cargue cuando le damos un click a un CommandButton, tendriamos que hacer esto:
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command1_Click() 4. ' -- Le indicamos al método LoadPicture la ruta del gráfico 5. With Picture1 6. .Picture = LoadPicture("c:\paisaje.jpg") 7. End With 8. End Sub
De esta manera estamos cargando el archivo en tiempo de ejecución. Se dice tiempo de ejecución ya que el archivo lo estamos cargando cuando está corriendo el programa. En cambio si quisiéramos cargar el archivo gráfico en tiempo de diseño, tendríamos que seleccionar el control Picture que colocamos en el formulario, ir a la ventana de propiedades de Visual basic, buscar la propiedad Picture, y seleccionar mediante un cuadro de diálogo de windows, buscarlo en la Pc, y cargar el archivo que queramos. Luego de hacer esto, automáticamente se cargaría la imagen en el control.
Nota : El archivo de imagen, Debe ser obligatoriamente un gráfico gif, jpg, bmp, ico, cur . No asi otros formatos, como por ejemplo el PNG, o Tiff. ( Aunque se puede leer estos formatos, pero mediante otras técnicas, utilizando el api de windows )
Propiedad Autosize
Esta propiedad lo que hace es adaptar o ajustar el control a las dimensiones del gráfico cargado.
52
Option Explicit
Private Sub Command1_Click() ' -- Le indicamos al método LoadPicture la ruta del gráfico With Picture1 .Picture = LoadPicture("c:\paisaje.jpg") End WithEnd Sub
Los posibles valores que le podemos dar son True o False. Si le pasamos True el control se autoajusta al tamaño de la imagen, si le pasamos False el control queda con el ancho y alto sin autoajustarse al gráfico
Esta captura muestra esto mismo, el Picture de la izquierda tiene la propiedad Autosize en False, mientras que el otro la tiene en True.
Usar el PictureBox como contenedor
El control PictureBox también funciona como contenedor de otro controles. Esto quiere decir que podemos colocar controles TextBox, botones etc..., dentro del control , y estos estarán contenidos.
Ejemplo : Colocar un Picture1 en el formulario con 2 CommandButton de la siguiente manera:
53
En la propiedad caption del Command1 coloca "Ocultar PictureBox" y en el otro "Mostrar PictureBox"
Ahora selecciona los controles que quieras de la barra de controles y dibujalos dentro del Picture1. Asegurate que los dibujes dentro del mismo
Los botones Command1 y Command2 hacen lo mismo que el ejemplo anterior, es decir mediante la propiedad Visible del Picture1 , ocultan y hace visible nuevamente al PictureBox, utilizando el valor True o False respectivamente.
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command1_Click() 4. ' -- Ocultar el Picture 5. Picture1.Visible = False 6. End Sub 7. 8. Private Sub Command2_Click() 9. ' -- Mostrar el Picture1 10. Picture1.Visible = True 11. End Sub
Al ejecutar el program, a podés ver que cuando ocultás el PictureBox, todos los demás controles también se ocultan, es decir esto demuestra que el control Picture es el contenedor de los otros. Si no llegara a ocultarse todos los demás controles, es porque hiciste mal el paso de ubicarlos dentro del Picture. En este caso asegurate que al dibujarlos queden dentro del mismo. Otra forma de colocar controles dentro de un picture y que queden contenidos en él, es cortar el control con el comando Cortar (click derecho sobre el mismo) y seleccionar el Picture y cuando está seleccionado lo pegás, automáticamente de esta forma ya pasa a estar contenido.
Otro control que permite hacer de contenedor es el control Frame
54
Option Explicit
Private Sub Command1_Click() ' -- Ocultar el Picture Picture1.Visible = FalseEnd Sub
Private Sub Command2_Click() ' -- Mostrar el Picture1 Picture1.Visible = True
Propiedad Container - Insertar controles en tiempo de ejecución
El anterior ejemplo, mostraba como colocar los controles en tiempo de diseño, pero hay veces que es necesario por algún motivo hacerlo si o si en tiempo de ejecución.
Para poder colocar los controles dentro de un contenedor, podemos usar la propiedad Container .
Este simple ejemplo muestra como insertar un control TextBox y un Commandbuton dentro de un Picture1 al cargar el formulario, es decir en el evento FormLoad
Colocar en el form1 : Un Text1, command1 y un Picture1
Color el código fuente en el formulario
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Form_Load() 4. ' -- Inserta los controles ( El textbox y el botón ) 5. Set Text1.Container = Picture1 6. Set Command1.Container = Picture1 7. ' -- los posiciona 8. Text1.Move 0, 0, 1000 9. Command1.Move 0, (Text1.Top + Text1.Height + 10), 1000 10. 11. End Sub
55
Option Explicit
Private Sub Form_Load() ' -- Inserta los controles ( El textbox y el botón ) Set Text1.Container = Picture1 Set Command1.Container = Picture1 ' -- los posiciona Text1.Move 0, 0, 1000 Command1.Move 0, (Text1.Top + Text1.Height + 10), 1000
Propiedad Autoredraw
La propiedad AutoRedraw es una propiedad muy importante y muy utilizada cuando se usa un picturebox para dibujar sobre el control
Lo que permite hacer la propiedad Autoredraw, es que al estar activada (con el valor True), y utilizar los métodos gráficos, por ejemplo dibujar un círculo, una linea, o cualquier imagen / dibujo, cuando se repinte el control, la imagen no se pierda, es decir que se mantenga. De esta manera Visual basic automáticamente vuelve a dibujar la imagen. Esta propiedad por defecto se encuentra en false. Luego es posible borrar la imagen con el método Cls
Puedes ver un simple ejemplo de esto mismo en el siguiente código:
Esto dibuja una cuadrado en el picture1 al presionar un botón. Luego, podés minimizar y volver a maximizar la ventana del formulario y ver que el dibujo se mantiene ya que la propiedad AutoRedraw se ha establecido en True
Colocar un botón y un picturebox en el formulario ( Command1 y picture1 )
Texto plano Imprimir
1. Option Explicit 2. 3. ' -- Botón para dibujar el rectángulo 4. ' --------------------------------------------------------- 5. Private Sub Command1_Click() 6. With Picture1 7. .AutoRedraw = True 8. ' -- Dibujar un cuadradro 9. Picture1.Line (100, 100)-Step(400, 400), vbRed, B 10. End With 11. End Sub 12. 13. Private Sub Form_Load() 14. Command1.Caption = "Dibujar cuadrado" 15. End Sub 16.
56
Option Explicit
' -- Botón para dibujar el rectángulo' ---------------------------------------------------------Private Sub Command1_Click() With Picture1 .AutoRedraw = True ' -- Dibujar un cuadradro Picture1.Line (100, 100)-Step(400, 400), vbRed, B End With
Ahora, prueba este mismo código que es igual al anterior, pero se ha establecido la propiedad AutoRedraw en False. Al presionar el botón se dibujará el rectángulo de todas formas, pero si minimizas la ventana y la vuelves a maximizar, el dibujo se perderá
Colocar un botón y un picturebox en el formulario ( Command1 y picture1 )
Texto plano Imprimir
1. Option Explicit 2. 3. ' -- Botón para dibujar el rectángulo 4. ' --------------------------------------------------------- 5. Private Sub Command1_Click() 6. With Picture1 7. .AutoRedraw = False 8. ' -- Dibujar un cuadradro 9. Picture1.Line (100, 100)-Step(400, 400), vbRed, B 10. End With 11. End Sub 12. 13. Private Sub Form_Load() 14. Command1.Caption = "Dibujar cuadrado" 15. End Sub 16.
Nota. Cuando la propiedad AutoRedraw se encuentra en True, el evento Paint del picturebox nunca se ejecuta. En cambio cuando se encuentra en False, el evento Paint se ejecutará cada ves que se repinte el control, ya sea cuando se minimiza y maximiza el formulario, cuando se tapa un área del control mediante otra ventana de windows por ejemplo.
Este código muestra que se ejecuta el evento paint, ya que la propiedad AutoRedraw se encuentra en False
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Form_Load()
57
Option Explicit
' -- Botón para dibujar el rectángulo' ---------------------------------------------------------Private Sub Command1_Click() With Picture1 .AutoRedraw = False ' -- Dibujar un cuadradro Picture1.Line (100, 100)-Step(400, 400), vbRed, B End With
4. 5. Picture1.AutoRedraw = False 6. End Sub 7. 8. Private Sub Picture1_Paint() 9. 10. Static i As Integer 11. 12. i = i + 1 13. 14. Me.Caption = "se ejecutó Paint " & CStr(i) & " veces" 15. 16. ' -- Eliminar dibujo previo 17. Picture1.Cls 18. ' -- Dibujar un cuadradro 19. Picture1.Line (100, 100)-Step(400, 400), vbRed, B 20. End Sub
Ahora si en cambio colocas en el código anterior, la propiedad AutoreDraw en true, puedes comprobar que el evento Paint no se ejecuta nunca.
Guardar la imagen del picturebox como BMP
Utilizando método SavePicture de vb es posible grabar en disco un archivo BMP, con el gráfico cargado en el control ( propiedad Picture del PicBox). El uso de este método o función es muy simple. A SavePicture se le debe pasar dos parámetros:
La propiedad Picture es decir la imagen ( También es posible pasar la propiedad image si se ha dibujado con los métodos gráficos o con el uso de las apis de windows )
y el path donde se creará el archivo
Por ejemplo:
Texto plano Imprimir
58
Option Explicit
Private Sub Form_Load()
Picture1.AutoRedraw = FalseEnd Sub
Private Sub Picture1_Paint()
Static i As Integer
1. ' -- Cargar una imagen en el control 2. Picture1.Picture = LoadPicture(ruta) 3. 4. ' -- Grabar el archivo BMP en la ruta especificada 5. SavePicture Picture1.Picture, "C:\Imagen.BMP"
El código anterior genera un archivo BMP en la unidad c: llamado imagen.bmp
Nota: En este enlace hay tutorial básico con ejemplos que muestra como utilizar los métodos loadpicture, savepicture y paintpicture
Propiedad Image
La propiedad Image del control PicBox es una propiedad de solo lectura. Esta Devuelve un controlador o manipulador, proporcionado por Microsoft Windows, para un mapa de bits persistente. Esto quiere decir que, si hemos utilizado los métodos gráficos para crear figuras , imágenes o cualquier dibujo en el control, podemos acceder a la imagen mediante este Handle o controlador.
Este simple ejemplo muestra como grabar en disco un archivo de imagen de mapa de bits ( BMP ) , con el contenido del control utilizando el método savePicture. Pero a diferencia del ejemplo anterior, en el que se pasaba la propiedad Picture a SavePicture, en este caso se pasará como parámetro la propiedad Image, ya que la imagen no es un mapa de bits cargado en la propiedad picture, si no que el dibujo se encuentra realizado mediante los métodos gráficos.
Colocar dos botones ( Command 1 y Command 2) , y un picturebox llamado picture 1
59
' -- Cargar una imagen en el control Picture1.Picture = LoadPicture(ruta)
' -- Grabar el archivo BMP en la ruta especif icada SavePicture Picture1.Picture, "C:\Imagen.BMP"
Pegar el Código fuente en el formulario
Texto plano Imprimir
1. Option Explicit 2. 3. ' -- Botón para dibujar un texto en el picture 4. ' --------------------------------------------------------- 5. Private Sub Command1_Click() 6. ' -- establecer propiedades 7. With Picture1 8. .AutoRedraw = True 9. .ForeColor = vbRed 10. .BackColor = vbBlack 11. ' -- escribir el texto 12. Picture1.Print "Visual basic" 13. End With 14. 15. Command1.Enabled = False 16. Command2.Enabled = True 17. 18. End Sub 19. 20. Private Sub Command2_Click() 21. ' -- guardar mapa de bits enviando la propiedad image que
apunta al gráfico dibujado 22. SavePicture Picture1.Image, "c:\imagen.bmp" 23. MsgBox "La imagen se guardó en la unidad c:", vbInformati
on 24. ' -- salir del programa 25. End 26. End Sub 27. 28. Private Sub Form_Load() 29. Command1.Caption = "Escribir texto" 30. Command2.Caption = "Guardar imagen en el disco" 31. Command2.Enabled = False 32. End Sub
60
Dibujar en un picturebox con los métodos gráficos
En la siguiente página hay un tutorial básico con ejemplos para poder utilizar los métodos gráficos : ver tutorial
En este otro enlace hay un programa muy simple, que también muestra como utilizar dichos métodos en un PictureBox para poder dibujar figuras : Ver Programa de ejemplo
Enlaces relacionados
Dibujar texto con formato
recortar imagen con el mouse Hacer un picturebox redimensionable mediante el Api de windows
Colocar ScrollBars a un Picture
Insertar un formulario dentro de un picture
Dibujar con la api bitBlt en el control picture o un form
Crear picturebox redondo
Reproducir un archivo de video en el control
Efecto de animación con transparencia
Ejemplo de Drag Drop de gráficos
61
Option Explicit
' -- Botón para dibujar un texto en el picture' ---------------------------------------------------------Private Sub Command1_Click() ' -- establecer propiedades With Picture1 .AutoRedraw = True .ForeColor = vbRed .BackColor = vbBlack
Crear degradados
Crear botón transparente
Crear controles en tiempo de ejecución
Dibujar un thumbnail y escalar gráficos
Crear efecto de scroll
Crear un botón simple utilizando la función BitBlt
Dibujar y crear Scroll de texto
Picturebox con borde y estilo Flat
Mouseout
Capturar el HDC ( área cliente del control )
Hacer zoom a una imagen
Ocx FreeImage para leer otros formatos como PNG
Dibujar rectángulos usando funciones Api
Drag drop con la función de windows SendMessage
Descripción
El control Label o Etiqueta es un simple control que se utiliza para mostrar texto, descripciones, información para el programa.
Propiedades
62
Propiedad Caption
La propiedad Caption es la mas importante, y es la que se utiliza para establecer el texto que mostrará el control Label. Por ejemplo para mostrar el texto "Hola" agrega un label al formulario, coloca un Botón, hacé doble click en el mismo, escribe Label1 y presiona el ".", Visual Basic te desplegará la lista de propiedades y métodos del Label1.
Una vez colocada la propiedad Caption, se asigna el texto que va a mostrar de esta manera, por ejemplo para mostrar la palabra "Hola" en el control:
Texto plano Imprimir
1. Label1.Caption = "Hola"
Este fragmento de código, visualiza la hora actual, asignando a la propiedad Caption (dentro de un Timer), el valor devuelto por la función Now de vb.
Colocar un control Timer y un Label
Texto plano Imprimir
1. Option Explicit 2.
63
Label1.Caption = "Hola"
3. Private Sub Form_Load() 4. 5. ' \\ -- Configurar Timer 6. With Timer1 7. .Interval = 1000 ' -- 1 segundo 8. .Enabled = True 9. End With 10. 11. With Label1 12. .Caption = "" 13. .Width = 2000 14. End With 15. 16. End Sub 17. 18. Private Sub Timer1_Timer() 19. Label1.Caption = Now 20. End Sub
Propiedad Autosize
Si la propiedad Autosize del control se encuentra en True, las dimensiones del Label (ancho y alto) se ajustarán al largo y alto del texto que muestre. En cambio si se encuentra en False el ancho y alto del control será el que esté establecido en la propiedad Height y Width sin importar la longitud del texto.
Propiedad Aligment
Esta propiedad posee 3 valores. Si le establecemos el valor 0 el texto se alineará a la izquierda, si tiene el valor 1 se alineará a la derecha y si está con el valor 2, el texto se muestra en forma centrada, como muestra la imagen:
64
Option Explicit
Private Sub Form_Load() ' \\ -- Configurar Timer With Timer1 .Interval = 1000 ' -- 1 segundo .Enabled = True End With
Otras propiedades del control son :
Visible : Si está en True el control está visible si está en False está oculto
Backcolor : Determina el color del fondo de la etiqueta. Si la propiedad BackStyle está en transparente esta propiedad no se visualiza, es decir el color no se muestra
BackStyle: Determina si el fondo es transparente (valor 0) o si es opaco (Valor 1).
Name: es el nombre del control y sirve para hacer referencia al mismo en el código, como todos los controles
BorderStyle: determina si se muestra con borde o sin borde Enabled: Si está en True (Verdadero) el control está activado y se
puede utilizar normalmente, si se encuentra en False, el control está desactivado.
FontName: El nombre de la fuente que utilizará el texto del control. Podemos elegir las que tengamos instaladas en el sistema
Forecolor: Valor Hexadecimal o valor Rgb que indica el color del Texto Height y Width: Ancho y alto del Label ToolTipText: muestra el mensaje de descripción cuando pasamos el
mouse por encima del control.
65
Ejemplo para cambiar propiedades en tiempo de ejecución
Colocar 5 Command Button en un formulario: Command1, Command2, Command3, Command4 y Command5, y un control Label1 como está en la imagen:
Este básico ejemplo lo que hace es cambiar algunas propiedades de este control.
El Command1 que cambia el texto del Label, lo que hace es mostrar un InputBox que es una caja o cuadro de diálogo para ingresar un texto. Ese texto lo almacenamos en una variable y luego lo mostramos en el Label
El Command2 que cambia el Estilo del borde, es decir la propiedad BorderStyle, cuando se presiona, si el control Label tiene la propiedad BorderStyle en 0, lo pone con el valor 1, si está con el valor 1 lo establece en 0, es decir lo contrario.
El Command3 que activa y desactiva el control, lo que hace es cambiar el valor de la propiedad Enabled del Label. Cuando lo presionamos se ejecuta esta línea:
Label1.Enabled = Not Label1.Enabled
El operador Not lo que hace en este caso es cambiar el valor de la propiedad Enabled a su valor contrario. Es decir, si el valor de enabled está en True (Habilitado) Not Label1.Enabled lo que hace es deshabilitarlo, si está deshabilitado (False) el operador Not lo cambia a True, y el Label queda Habilitado. Esto se puede hacer con una claúsula If Then pero esta manera es mas simple.
El Command4 es igual que el Command1, por medio de un InputBox se pide que ingrese un texto, y se cambia el valor de la propiedad ToolTipText, que es la propiedad que muestra información de un objeto mediante un rectángulo amarillo cuando pasamos el mouse por encima, como los tipicos controles de windows de cualquier aplicación.
66
El Command5 es igual que el Command3, utiliza el operador Not para establecerle la propiedad Visible. Si el Label está Visible (True), se cambia a False (se oculta), si está en False se pone en True
Código fuente dentro del formulario
Texto plano Imprimir
1. Option Explicit 2. 3. ' \\ -- Caption 4. Private Sub Command1_Click() 5. Dim texto As String 6. 7. texto = InputBox("Escriba el texto a mostrar en el Label", "Eje
mplo") 8. 9. ' -- Acá se asigna la variable texto en el Label 10. Label1.Caption = texto 11. 12. End Sub 13. 14. ' \\ -- BorderStyle 15. Private Sub Command2_Click() 16. 'Si actualmente tiene el valor 0 entonces la colocamos a
1 17. If Label1.BorderStyle = 0 Then 18. Label1.BorderStyle = 1 19. 'Si tiene el valor 1 lo ponemos a 0 20. Else 21. Label1.BorderStyle = 0 22. End If 23. End Sub 24. 25. 26. ' \\ -- Enabled 27. Private Sub Command3_Click() 28. 29. ' -- Si la propiedad Enaled está en True se pone False, 30. ' -- si está en False se pone en TRue 31. Label1.Enabled = Not Label1.Enabled 32. 33. End Sub 34. 35. 36. ' \\ -- Tooltiptext 37. Private Sub Command4_Click() 38. Dim texto As String 39. texto = InputBox("Escribi el texto que mostrará la propiedad"
_
67
40. & "ToolTipText", "Ejemplo")
41. 42. ' -- Le asignamos el valor de la variable Texto al Label 43. Label1.ToolTipText = texto 44. 45. ' -- Mostramos un mensaje para indicar que pase el mouse
por 46. ' -- encima del control Label1 47. 48. MsgBox "Pasá el mouse por encima del Label" 49. 50. End Sub 51. 52. ' \\ -- Visible 53. Private Sub Command5_Click() 54. 55. ' -- Si el Label está visible entonces lo ocultamos, 56. ' -- si está oculto lo mostramos 57. Label1.Visible = Not Label1.Visible 58. 59. End Sub 60. 61. 62. Private Sub Form_Load() 63. Command1.Caption = "Cambiar texto" 64. Command2.Caption = "Cambiar borde" 65. Command3.Caption = "Enabled" 66. Command4.Caption = "ToolTipText" 67. Command5.Caption = "Enabled" 68. End Sub
68
Option Explicit
' \\ -- CaptionPrivate Sub Command1_Click() Dim texto As String
texto = InputBox("Escriba el texto a mostrar en el Label", "Ejemplo")
' -- Acá se asigna la variable texto en el Label Label1.Caption = texto
Eventos del control Label:
Evento Click: Se produce al hacer un click Evento DblClick: Se produce al hacer doble click evento MouseDown: Se produce al presionar el ratón cuando el mouse
está abajo Evento MouseMove: se produce al mover el cursor en el área del control Evento MouseUp: Se produce al hacer un Click justo después de soltar el
botón del mouse Evento Change: Se produce cuando cambia la propiedad Caption del
control. Este evento puede utilizarce para validar algún cambio
Ejemplo utilizando el evento MouseMove
Lo siguiente, muestra como simular un enlace, como el de una página web, de una forma sencilla
Al pasar el mouse por encima del Label, se cambian las propiedaes, es decir el color del texto y la propiedad FontUnderline en True para subrayar. Luego en el MouseMove del Formulario, se reestablece.
Código fuente
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Form_Load()
69
4. 5. With Label1 6. ' -- Estilo transparente 7. .BackStyle = 0 8. ' -- Ajustar el control al texto 9. .AutoSize = True 10. ' -- Asignamos un texto para la dirección url 11. .Caption = " http://www.google.com " 12. End With 13. End Sub 14. 15. Private Sub Form_MouseMove( _ 16. Button As Integer, _ 17. Shift As Integer, _ 18. X As Single, Y As Single) 19. 20. With Label1 21. If .FontUnderline Then 22. ' -- Color de la fuente del Label en negro 23. .ForeColor = vbBlack 24. 25. ' Quitamos el Subrayamos al Label 26. .FontUnderline = False 27. End If 28. End With 29. 30. End Sub 31. 32. 33. Private Sub Label1_MouseMove( _ 34. Button As Integer, _ 35. Shift As Integer, _ 36. X As Single, Y As Single) 37. 38. With Label1 39. If Not .FontUnderline Then 40. ' -- Color Azul como el de los enlaces clásicos 41. .ForeColor = QBColor(9) 42. 43. ' -- Subrayamos el Label 44. .FontUnderline = True 45. End If 46. End With 47. End Sub
70
Recorrer los labels del formulario con un bucle For Each next
Si en algún momento se desea poder recorrer todos los controles label que se encuentren en el formulario, por ejemplo para consultar el valor de propiedades o para modificarlas y no tener que hacerlo uno por uno, podés utilizar un bucle For Each y mediante el operador TypeOf de vb comprobar si es un Label
Este simple ejemplo muestra como recorrer todos los objetos del form actual, y si es de tipo Label, le establece un color aleatorio utilizando la función RND y la función RGB de Visual basic. Por supuesto en el bucle podés probar cambiar otras propiedades que quieras. Esto también es muy útil para deshabilitar y habilitar, o hacer visible o no visible controles del programa utilizando un simple bucle.
Colocar varios controles en el formulario, y también varios controles Label, por ejemplo 4 o 5
Colocar también un botón para poder ejecutar el código del bucle
Pegar el siguiente fragmento de código en el form principal
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command1_Click() 4. 5. Dim xLabel As Control 6. ' -- Recorrer controles coon un bucle 7. For Each xLabel In Me.Controls 8. ' -- Comprobar que el control actual es de clase Label
71
Option Explicit
Private Sub Form_Load() With Label1 ' -- Estilo transparente .BackStyle = 0 ' -- Ajustar el control al texto .AutoSize = True ' -- Asignamos un texto para la dirección url
9. If TypeOf xLabel Is Label Then 10. ' - Si lo es, cambiar la propiedad ForeColor 11. xLabel.ForeColor = RGB(CInt(Rnd * 255), CInt(Rnd
* 255), CInt(Rnd * 255)) 12. End If 13. Next 14. 15. End Sub 16. 17. Private Sub Form_Load() 18. Command1.Caption = "Cambiar color" 19. End Sub
Texto con sombra usando dos controles Label
Esto es muy simple y no requiere de código , solo colocar dos controles Label superpuestos, y el que esté debajo de color negro, como muestra el gráfico:
Nota: desde opciones > menú Herramientas, puedes especificar los valores para la cuadrícula del formulario, por defecto son 120 twips, colocando un valor
72
Option Explicit
Private Sub Command1_Click() Dim xLabel As Control ' -- Recorrer controles coon un bucle For Each xLabel In Me.Controls ' -- Comprobar que el control actual es de clase Label If TypeOf xLabel Is Label Then ' - Si lo es, cambiar la propiedad ForeColor
mas bajo, tendrás mas precición para colocar el control Label al arrastrarlo en el formualrio.
Simple botón
Este senciilo ejemplo muestra una forma de poder crear un botón utilizando dos controles label en un array de controles uno encima del otro. Y en el evento MouseDown , se oculta uno, y se visualiza el que está por debajo, y luego se vuelve a visualizar el otro en el evento mouseUp
Control ocx para usar Label con degradado
Control ListBox
El control ListBox permite añadir elementos en forma de lista y también poder seleccionar elementos de la misma para trabajar los datos.
Este control permite seleccionar un elemento solo o varios de ellos, utilizando la propiedad Multiselect. La imagen de la izquierda muestra un ListBox en el que se selecciona un solo elemento y a la derecha se seleccionan varios:
73
Para agregar elementos a un control ListBox en tiempo de diseño, se debe seleccionar el control Listbox, y desde la ventana de propiedades ubicarnos en la que se llama List. Al desplegarla podemos agregar y remover elementos.
Para esto se debe ingresar uno, luego mantener la tecla Ctrl presionada y presionar Enter, y agregar el siguiente y asi con los demás.
Para agregarlos en tiempo de ejecución, es decir mediante código, se utiliza un método llamado AddItem.
Por ejemplo si quisiéramos agregar un elemento a un control llamado List1 en el evento Click de un botón, debemos escribir el nombre del ListBox y presionar el ".". Visual Basic desplegará la lista de propiedades y métodos del control List, en ella buscamos el método AddItem, como muestra la imagen:
74
El método AddItem tiene 2 parámetros.
AddItem "Elemento que vamos a agregar", "Index (posición)"
El primer parámetro es obligatorio, y es el elemento que vamos a añadir al control List. El segundo parámetro no es obligatorio, es decir es opcional, y permite especificar el lugar donde añadir el elemento, es decir la posición. A este se le pasa un número entero, por ejemplo 0, 1, 5 etc...Si no se especifica una posición, el elemento que se agrega es añadido al final de la lista.
Por ejemplo, si quisiera agregar 5 nombres de países en un control llamado List1, cuando presionamos un Command1 :
Private Sub Command1_Click()
List1.AddItem "Brasil"List1.AddItem "Francia"List1.AddItem "Italia"List1.AddItem "Argentina"List1.AddItem "venezuela"
End Sub
Al probar lo anterior, Visual Basic no dió error al no indicar la posición o el parámetro Index, ya que como se dijo dicho parámetro es opcional.
Para eliminar un elemento se utiliza el método RemoveItem. Este método tiene un parámetro llamado Index en el cual debemos indicar la posición del elemento que vamos a eliminar.
Por ejemplo:
Private Sub Command2_Click()
'Eliminamos el elemento 2 de la listaList1.RemoveItem 2
End Sub
El ejemplo anterior eliminaría de la lista el elemento "Italia". Te preguntarás porque elimina a "Italia" si este está en la posición 3. En realidad está en la
75
posición 2, ya que se comienza el conteo desde el 0, es decir en la lista del ejemplo anterior, "Brasil" tiene el número 0, "Francia" el 1, "Italia" el 2 etc...
Importante: Al eliminar un elemento de la lista, el número relacionado al elemento o Item a eliminar, debe estar en la lista, ya que si no daría un error al querer eliminar un Item que no se encuentra.
Ejemplo simple para agregar y eliminar elementos de un control List
Para el siguiente ejemplo colocar los siguientes controles en un formulario como está en la imagen:
Un control Label1 y en el Caption escribir "Nombre". Un Command1 y en el Caption "Añadir". Al Command2 "Eliminar Seleccionado". Luego agrega un Text1 al lado del control Label1 y un control List1.
El elemento que escribamos en el Text1, cuando se presione " Añadir " se agregará al control List1, cuando presionemos el Command2 se eliminará de la lista el elemento que se encuentre seleccionado.
Colocar el código en el formulario:
Private Sub Command1_Click()If Text1 = "" Then MsgBox "Debe ingresar un nombre para poder agregar un elemento", vbQuestion + vbOKOnly, "Datos incompletos"
76
'Salimos de la rutina ya que no se ha ingresado nada en el control text1 Exit SubEnd If
'Agregamos el contenido del Text1 en el control List1List1.AddItem Text1End Sub
Private Sub Command2_Click()'Si la lista no está vacía entonces podemos eliminarIf List1.ListIndex <> -1 Then 'Eliminamos el elemento que se encuentra seleccionado List1.RemoveItem List1.ListIndexEnd IfEnd Sub
En el ejemplo anterior cuando se presiona añadir, antes de utilizar el método AddItem para añadir el contenido del Text1, se comprueba mediante un IF que el Text1 no está vacío. Si está vacío se muestra un mensaje de error y se sale de la rutina mediante Exit sub. Si se ha ingresado algún texto, ignora la cláusula IF Then y ejecuta la línea que añade el Item.
En el botón de Eliminar el elemento seleccionado se utilizan una propiedad que no se comentó llamada ListIndex. Esta propiedad nos devuelve el número del elemento que se encuentra seleccionado actualmente. Cuando el ListBox no tiene ningún elemento seleccionado, el valor de ListIndex es de -1. Para que no de error al querer eliminar un elemento que no se encuentre seleccionado, primero debemos comprobar que el valor de ListIndex es distinto a -1, por ejemplo
If List1.ListIdex <> -1 Then ....
Si el valor es distinto a -1 quiere decir que hay un elemento seleccionado, entonces se procede a la eliminación del mismo, utilizando el método RemoveItem pasándole como parámetro el número de ListIndex.
Propiedad Sorted:
Si quisiéramos ordenar el contenido, es decir los elementos del control List en forma alfabética, debemos utilizar la propiedad Sorted.
77
Esta propiedad no se puede utilizar en tiempo de ejecución, si no que la debemos establecer en tiempo de diseño desde la ventana de propiedades. Si la propiedad está en True, la lista de elementos se mostrará en forma ordenada, si está en False sin ordenar. Por defecto esta propiedad está con el Valor False.
Eliminar elementos con el método Clear
Para eliminar todo el contenido de un control ListBox se utiliza el método o función llamado Clear.
Por ejemplo:
Private Sub Command1_Click()
'Elimina todo el contenido del ListBoxList1.Clear
End Sub
Este método no necesita ningún parámetro, solo ejecutarlo para que todo el contenido del control sea eliminado. Tampoco produce un error si ejecutamos Clear y el ListBox no tiene elementos, es decir si los tiene los elimina, si no tiene elementos y se ejecuta Clear, no ocurre nada.
Propiedad ListCount
La propiedad ListCount devuelve la cantidad de elementos que contiene el control.
Por ejemplo, en las siguientes líneas, cuando se presiona un Command1, se agregan 3 elementos. Luego se muestra un mensaje, mediante un MsgBox, con la cantidad de elementos del control, consultando el valor de la propiedad ListCount :
Private Sub Command1_Click()
78
'Agregamos 3 elementos al listadoList1.AddItem "Enero"List1.AddItem "Febrero"List1.AddItem "Marzo"
'Mostramos medianete un mensaje la cantidad de elementos'del contenido del ListBox, en este caso devuelve 3MsgBox List1.ListCount
End Sub
Propiedad List
La propiedad List devuelve o establece los elementos contenidos en la lista del control.
Esta propiedad lleva un parámetro que indica el número del elemento que se quiere consultar.
Un ejemplo: si quisiera mostrar en un Label1 el texto del elemento que se selecciona, haríamos lo siguiente:
Colocar un List1 y un Label1. Pegar esto en el formulario:
Private Sub Form_Load()'Agregamos 3 elementos al listadoList1.AddItem "Enero"List1.AddItem "Febrero"List1.AddItem "Marzo"End Sub
Private Sub List1_Click()'Cuando hacemos Click en un elemento del List1 _mostramos en el Label1 el texto del elementoLabel1 = List1.List(List1.ListIndex)End Sub
79
En el código anterior, cuando carga el formulario en el evento Load, se agregan 3 elementos cualquiera. El restante código se encuentra en el evento Click del control List, por eso se ejecutará cada vez que hagamos un Click en el mismo, y utilizando la propiedad List y pasándole otra propiedad ya vista " ListIndex ", obtenemos el texto del elemento actualmente seleccionado.
Si pasáramos un número, nos mostraría el texto del elemento que corresponde a ese número dentro del ListBox. Siguiendo el ejemplo anterior en el que teníamos 3 elementos, si se hiciera esto
Private Sub List1_Click()Label1 = List1.List(2)End Sub
...el control Label1 mostraría el texto del elemento 2, que sería "Marzo". Esto como ya se indicó antes es porque el primer elemento en la lista es el 0, que en este caso corresponde a "Enero", el segundo elemento es el 1, en este caso "Febrero" , etc...
Otras propiedades del control ListBox son:
Propiedad Backcolor : Establece el color de fondo del control Propiedad Enabled : Permite habilitar o deshabilitar el control ListBox -
Valores True y False Propiedad Font : Establece el tipo de fuente, tamaño estilo etc... de los
elementos Propiedad ForeColor : Establece el color de la fuente de los elementos Propiedad Height y Width : Establece el ancho y alto del control Propiedad MultiSelect : Permite indicar si el ListBox se podrá
seleccionar mas de un elemento Propiedad Visible : Si está en True el control será visible si está en False
estará oculto
80
Eventos del control ListBox
Los eventos principales del control son:
Evento Click: Ocurre cuando el usuario presiona y libera un botón del mouse encima de un objeto.
Evento DblClick: Ocurre cuando el usuario presiona y libera un botón del mouse y después lo vuelve a presionar y liberar sobre un objeto.
Evento DragDrop: Ocurre cuando finaliza una operación de arrastrar y colocar. en este enlace hay un ejemplo simple del uso de este evento: DragDrop entre dos listbox
Evento DragOver: Ocurre cuando una operación de arrastrar y colocar está en curso.
Evento GotFocus: Ocurre cuando el control recibe el enfoque. Evento LostFocus: Ocurre cuando un objeto Pierde el enfoque el control Evento ItemCheck: Ocurre cuando la propiedad Style de un control
ListBox es 1 (casillas de verificación) y la casilla de verificación de un elemento en el control ListBox está activada o desactivada.
Evento KeyDown: Ocurre cuando el usuario presiona una tecla mientras un objeto tiene el enfoque.
Evento KeyPress: Ocurre cuando el usuario presiona y libera una tecla ANSI.
Evento KeyUp: se produce cuando el usuario libera una tecla mientras el control tiene el enfoque.
Evento MouseDown: Ocurre cuando el usuario presiona el botón del mouse mientras un objeto tiene el enfoque.
Evento MouseMove: Ocurre cuando el usuario mueve el mouse.
81
Evento MouseUp: Ocurre cuando el usuario libera el botón del mouse mientras un objeto tiene el enfoque.
Evento Scroll: Ocurre cuando cambia la posición de un cuadro de desplazamiento en un control, es decir cuando se mueve la barra de Scoll
Evento Validate: Se produce cuando un control pierde el enfoque en favor de un control que produce una validación.
Control ComboBox.
Este control muy utilizado en los programas nos permite mediante una lista desplegable poder seleccionar elementos, como también es posible introducir elementos a la misma
Otro tipo de vistas del control ComboBox son las siguientes, que se modifican desde la propiedad Style del control
82
El primero DropDown es el estilo por defecto y se despliega la lista cuando pulsamos en la flecha. El segundo Simple Combo ya presenta la lista desplegada y no tiene un botón para desplegar los elementos. El tercero DropdownList , es igual que el DropDown, pero con la diferencia que no se puede ingresar un texto, solo se puede seleccionar elementos.
Este control es muy parecido al control List en lo que se refiere a las propiedades y métodos para manejar los datos, para agregar elementos se utiliza el método AddItem.
Por ejemplo , el siguiente código añade 50 elementos en un bucle For Next:
Dim Elemento As Integer
For Elemento = 0 To 50 'Agregamos el valor de la variable Elemento al Combo Combo1.AddItem iNext
Al igual que el control ListBox, para eliminar todo el contenido se usa el método Clear
83
'Eliminamos todo el contenidoCombo1.Clear
Al igual que el control List, para averiguar el valor de un determinado elemento se utiliza la propiedad List especificándole el número del elemento, ListCount (para saber el número de elementos), ListIndex (saber el elemento seleccionado), el Método RemoveItem (Elimina el elemento especificado) etc..
Propiedad DataField y DataSource
Estas dos propiedades presente en el control ListBox y el control ComboBox, además de varios otros controles de visual basic, como el Label, TextBox etc..., pemiten enlazar los controles a una base de datos.
DataField: Devuelve o establece un valor que enlaza un control con un campo del registro actual.
DataSource: Establece un valor que especifica el control de datos mediante el cual se enlaza el control actual a una base de datos
Por ejemplo, lo siguiente, enlaza un control Combo1, que previamente está asociado a un control Data1 mediante la propiedad DataSource, con el campo " Nombres " de una tabla llamada Clientes, de la base de datos Bd1.Mdb.
Data1.DatabaseName = App.Path & "\bd1.mdb"Data1.RecordSource = "Clientes"
Combo1.DataField = "Nombres"
El control TextBox o Caja de texto se utiliza para Ingresar y/o visualizar Texto ( es un control de entrada de datos )
84
Si en nuestros programas no vamos a introducir Texto, me refiero a solo mostrarlo, valores etc..., es preferible y mas lógico utilizar un control Label en cambio de un control TextBox , ya que consume menos recursos
La propiedad principal de este control se llama Text. Mediante ella podemos asignarle un texto ya sea en tiempo de diseño o tiempo de ejecución al control. Si es en tiempo de diseño, debemos seleccionar el TextBox e ir a la ventana de propiedades y seleccionar Text. Dentro de ella podemos escribir el texto a ser mostrado. Si es en tiempo de ejecución debemos escribir el nombre de el TextBox que queremos y al presionar el punto ".", vb despliega la lista de propiedades y métodos del TextBox, y ahí seleccionamos Text
Por ejemplo si quiero mostrar un texto en un control llamado Text1 se haría de esta forma:
85
Private Sub Form_Load()
Text1.Text = "Un texto cualquiera"
End Sub
Si quisiera mostrar el contenido de un control Label llamado Label1 en un control llamado text1 se haría así:
Private Sub Form_Load()
Text1.Text = Label1.Caption
End Sub
Nota , no es necesario escribir la propiedad Text seguida del nombre del control, ya que la propiedad Text es la propiedad por defecto, y Vb se daría automáticamente cuenta que al no poner ninguna propiedad la asuma como tal, por ejemplo esto es válido:
Private Sub Form_Load()
Text1 = "Un texto cualquiera"
End Sub
Esto de las propiedades por defecto lo tienen la mayoría de los controles, pero cada control tiene la suya, por ejemplo la propiedad default de un control Label es Caption, por lo que no es necesario escribirla, y Visual Basic no daría error:
Private Sub Form_Load()
Label1 = "Hola"
86
End Sub
Para un control Picture, la propiedad Picture es la que está establecida por defecto, y esto tampoco daría error y cargaría una imagen perfectamente en el control sin indicar explícitamente la propiedad.
Private Sub Form_Load()
Picture1 = LoadPicture("la ruta de una imagen")
End Sub
Propiedad Multiline
La propiedad Multiline o multilinea se utiliza para poder mostrar los saltos de carro o saltos de línea y que el texto se vea en varias y no todo en un única línea. Los valores que posee son True que está activada y en False quiere decir que está deshabilitada. Por defecto cuando añadimos un TextBox, la propiedad está en False, osea que tenemos que indicarle nosotros a vb, ya sea desde la ventana de propiedades poniéndola en true. Una cosa importante es que esto no lo podemos cambiar en tiempo de ejecución mediante código, si o si hay que establecerla desde la ventana de propiedades, ya que es una propiedad de solo lectura.
Propiedad PasswordChar
Esta propiedad tiene la función de ocultar el verdadero contenido del TextBox por el caracter que le indiquemos, por ejemplo los TextBox de ingresos de contraseña, donde el texto se oculta pero no se pierde, solo impide visualizarlo:
87
Nota : para establecer el caracter a mostrar solo debemos indicarlo en la propiedad PasswordChar, pero solo funciona cuando la propiedad Multiline del Text está en False.
Propiedad ScrollBars
Esta propiedad permite que el TextBox tenga o no tenga barras de Scroll cuando el texto sea superior a las dimensiones de la caja de texto. Los valores que puede tener son: 0 indica que el textBox no mostrará Barras de desplazamiento, en 1 Solo barra Horizontal, 2 Solo barra Vertical y 3 ambas barras de desplazamiento. En esta imagen se ve un TextBox con la propiedad Scrollbars en 2, solo Vertical
Propiedad Locked
Esta propiedad lo que hace es impedir que se pueda escribir en el TextBox, bloqueando la entrada de datos. Esta propiedad puede tener el Valor True o False, habilitado para el primero y False para el segundo. Por defecto está deshabilitada, es decir en False
88
Propiedad Maxlength
La propiedad MaxLength se usa para limitar la cantidad de caracteres que se podrán ingresar. Por ejemplo si en el TextBox tuviesemos el texto "Domingo" y hacemos esto:
Private Sub Command4_Click()Text1.Text = "Domingo"Text1.MaxLength = 3End Sub
El texto "Domingo" se podrá visualizar pero si intentamos escribir en la caja de texto, no se podrá ingresar mas de 3 caracteres. Es decir la propiedad recibe un número que identifica la longitud máxima permitida de letras a ingresar.
Propiedad SelStart y SelLength
La primera lo que hace es devolver o establecee el punto inicial del texto seleccionado. en cambio SelLength devuelve o establece el número de caracteres seleccionados.
El siguiente ejemplo utiliza estas dos propiedades, en conjunto con la propiedad Len de visual basic, para que al persionar la tecla Ctrl+A, se seleccione todo el contenido del TextBox
Private Sub Text1_KeyPress(KeyAscii As Integer)
89
If KeyAscii = 1 Then
Text1.SelStart = 0
'Selecciona Todo el contenido de la caja de texto
Text1.SelLength = Len(Text1.Text)
End If
End Sub
Algunos ejemplos del Uso del control TextBox
Supongamos que quisieramos mostrar el contenido de un Text1 en un Text2, cuando presionamos un Command1, haríamos asi:
Private Sub Command1_Click()'Copiamos el texto de Text1 en el Text2Text2 = Text1End Sub
Si quisieramos cambiar el color de fondo (propiedad Backcolor) del TextBox para que sea igual al color de fondo del formulario haríamos asi:
90
Private Sub Command1_Click()'Le asignamos el mismo color al textbox que el que tiene el formulario _utilizando la propiedad BackcolorText1.BackColor = Me.BackColorEnd Sub
Este simple ejemplo lo que hace es cuando se escribe en el Text1, automáticamente se imprime el mismo texto en un Text2. Para esto usamos el evento Change que significa cambio, es decir se ejecutará cada vez que el text1 cambie el contenido.
Agregar 2 Text, text1 y Text2, pegar lo siguiente y luego escribir un texto en el Text1.
Private Sub Text1_Change()'Le establecemos el contenido de Text1 en el control Text2Text2 = Text1End Sub
Este ejemplo lo que hace es cambiarle el color al fondo del control text en negro, el color de la fuente en verde, el tamaño de la fuente, establecerla en negrita, y luego le asigna un texto "hola mundo".
Colocar un Command1 y un Text1
91
Private Sub Command1_Click()With Text1
.ForeColor = vbGreen
.BackColor = vbBlack
.FontSize = 12
.FontBold = True
.Text = " Hola Mundo"
End WithEnd Sub
Hacer que un textBox admita solo números y algunos otros caracteres indicados
El siguiente ejemplo muestra como hacer , comprobando en el eventos KeyPress de un textbox, el valor del parámetro Keyascii, para que solo admita números, la coma, el punto y la tecla de retroceso. Cualquier otro valor que no sea estos, el mismo retornará el valor 0.
Colocar un Text1 y el siguiente código en el formulario:
Option Explicit
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Verificar_Tecla(KeyAscii)
92
End Sub
Function Verificar_Tecla(Tecla_Presionada)
Dim Teclas As String
'Acepta todos los números, la tecla Backspace, _
la tecla Enter, la coma y el punto
Teclas = "1234567890.," & Chr(vbKeyBack)
If InStr(1, Teclas, Chr(Tecla_Presionada)) Then
Verificar_Tecla = Tecla_Presionada
Else
' Si no es ninguna de las indicadas retorna 0
Verificar_Tecla = 0
End If
End Function
Esta función también puede ser utilizada en otros controles de entrada de datos, como por ejemplo los ComboBox, y la ventaja de utilizarlo, es que si tenemos muchos textbox o controles a los cuales deseamos verificar las teclas presionadas, no tenemos que escribir y repetir código en todos ellos, solo asignando al valor KeyAscii el valor retornado por la fuinción, para que el mismo acepte o no dichas teclas
93
Nota: también hay una función de visual basicllamada IsNumeric, para poder determinar si un valor es un número
Ejemplo para cargar el contenido de un archivo de texto en un TextBox Multiline
Este simple ejemplo carga en un control textBox el contenido de un archivo seleccionado de tipo txt. El control tiene la propiedad Multiline en True y la propiedad ScrollBar en Both.
Nota: en este enlace hay una descripción básica de las funciones de visual basic para el tratamiento de archivos, leer, guardar etc...
Colocar en un formulario un control Commondialog , un control textBox y un control Command1:
Nota: al control textBox en la propiedadMultiline colocarle true y también establecerle los ScrollBar
94
Código fuente en el formulario:
Private Sub Command1_Click()
With CommonDialog1
.DialogTitle = " Seleccionar archivo"
.Filter = "Archivos txt|*.txt"
' abre el cuadro de diálogo para seleccionar el txt
.ShowOpen
If .FileName = "" Then Exit Sub
'Carga el archivo en el control
Cargar_Txt .FileName
End With
End Sub
Private Sub Form_Load()
Command1.Caption = " Abrir archivo txt"
End Sub
Sub Cargar_Txt(path As String)
Dim linea As String
If path = vbNullString Then Exit Sub
Text1 = ""
Open path For Input As #1
While Not EOF(1)
95
'Lee la linea del archivo
Line Input #1, linea
'La carga en el textbox
Text1 = Text1 & linea
Wend
'Cierra el archivo abierto
Close
End Sub
Redimensionar un TextBox al ancho y alto del formulario
Este ejemplo simple lo que hace es que al redimensionar el formulario, o maximizarlo, el ancho y alto del control text, se adapte al ancho y alto del la ventana. Para ello el código debe estar ubicado en el evento Resize del formulario, y para redimensionar el textbox ( o cualquier otro control) se utiliza el método Move
Ejemplo:
Private Sub Form_Resize()
'Primer y segundo parámetro es el valor Left y Top
'Parámetro 3 y 4, el ancho y alto del text _
que en este caso es el ancho y alto del formulario
Text1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
End Sub
96
Cambiar color de borde
El textbox no tiene ninguna propiedad para cambiar el color de borde . El siguiente ejemplo muestra una forma simple de como simular esto utilizando controles Shape, como muestra la siguiente imagen donde los textbox son parecidos a los de estilo de windows xp
En el ejemplo, se recorren todos los controles del formulario mediante un bucle For each. Luego, se van creando los demás controles Shape en tiempo de ejecución, uno para cada textbox , usando el método Load que permite crear los controles en tiempo de ejecución a partir de uno que está agregado en el formulario formando un array de controles
Controles
Colocar en el formulario, un control Shape. Al control Shape especificarle en la propiedad Index el valor 0 pra formar el array de shape
Luego agregar algunos textbox en el formulario
Código fuente en el formulario
97
' Posiciona el shape junto al textbox para simular el borde
Sub Aplicar_Borde(Shape As Object, color_Borde As Long)
' Variable para recorrer todos los controles del formulario
Dim el_Control As Object
'Recorre todos los controles
For Each el_Control In Me
' .. si el control es un textbox
If TypeOf el_Control Is TextBox Then
Dim i As Integer
'Si el Textbox está dentro de un contenedor, _
como un frame o picturebox, coloca el Shape _
dentro del mismo contenedor
Set Shape(i).Container = el_Control.Container
'Propiedades para el shape
Shape(i).BackStyle = 0 ' Fondo transparente
Shape(i).BorderStyle = 1 ' Borde sólido
Shape(i).BorderWidth = 1 ' 0 Grosor del borde
' Ancho, alto, pos x y po y del shape
Shape(i).Top = el_Control.Top - 10
Shape(i).Left = el_Control.Left - 10
Shape(i).Width = el_Control.Width + 30
Shape(i).Height = el_Control.Height + 30
' Estilo flat para el extbox
el_Control.Appearance = 0
98
' Le quitamos le borde al textbox
el_Control.BorderStyle = 0
' color del borde del shape
Shape(i).BorderColor = color_Borde
' Lo hacemos visible
Shape(i).Visible = True
i = i + 1
' Crea un shape en forma dinámica
Load Shape(i)
End If
Next
End Sub
Private Sub Form_Load()
Call Aplicar_Borde(Shape1, &H8000000D)
End Sub
Nota. en este enlace hay un ejemplo para crear un listbox con borde personalizado también usando un control shape
Pasar el foco entre Textbox al presionar la tecla enter
Este ejemplo muestra una forma de poder, al presionar la tecla enter, pasarle el foco al siguiente textbox. Como en el ejemplo se utiliza la función SendKeys para enviar la pulsación de la tecla Tab, el control que reciba el enfoque lo determinará la propiedad TabIndex
Agregar un arreglo de controles textbox, por ejemplo Text1(0), Text1(1), Text1(2) etc...
99
Código fuente en el formulario
Sub PasarFoco(KeyCode As Integer)
' si es la tecla enter ...
If KeyCode = 13 Then
' envía la pulsación de tecla Tab y pasa el foco _
a la siguiente caja de texto
SendKeys "{TAB}"
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
' recorre la matriz de textbox
For i = 0 To Text1.Count - 1
' le especifica la propiedad tabIndex
Text1(i).TabIndex = i + 1
100
Next
End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
' anvia como parámetro el valor del código de la tacla
Call PasarFoco(KeyAscii)
End Sub
Borrar todos los textbox de un formulario
Si queremos eliminar el contenido de todas las cajas de texto de un formulario, podemos utilizar un bocle For Each y el operador Type Of
Ejemplo:
La rutina LimpiarTextBox, recibe como parámetro el formulario, por ejemplo para limpiar todo el contenido de todas las cajas de texto que hay en el el formulario actual, se ejecutaría la rutina de la siguiente forma:
Call LimpiarTextBox(Me)
Colocar en el formulario, un CommandButton y varios controles TextBox
Código fuente en el Form
Option Explicit
' recibe como argumento el formulario
''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub LimpiarTextBox(frm As Form)
101
' recorre todos los controles que hay en el formulario
For Each Control In frm.Controls
' verifica que el control es de tipo TextBox
If TypeOf Control Is TextBox Then
'... Si es un Textbox, entonces lo limpia
Control.Text = ""
End If
Next
End Sub
' botón que limpia todos los textbox
'''''''''''''''''''''''''''''''''''''
Private Sub Command1_Click()
Call LimpiarTextBox(Me)
End Sub
Enlaces relacionados
Control ocx para textbox estilo windows xp
Aplicar temas de xp con un archivo manifest
Ocx para cambiar de color al perder el foco
Ejemplos básicos sobre el control CommandButton de visual basic
102
-- -- Indice - Contenido
Descripción del control CommandButton
Propiedades
Métodos y funciones
Eventos principales del control
Tomar la apariencia de los temas de windows para los botones
Enalces relacionados
Descripción del control
Este control " Botón de comando ", nos permite ejecutar alguna rutina, función o procedimiento, generalmente en el evento click del mismo, para realizar de esta manera alguna tarea dentro del programa
Como se dijo, se utiliza generalmente en el evento Click par ejecutar alguna acción cuando se produce dicho evento, y es precisamente el evento Click, el que por defecto añade Visual Basic al control
Por ejemplo, si colocamos un control Command1 en un formulario, y le damos DobleClick para que se abra la ventana de código de visual basic, podemos ver la siguiente rutina:
103
Texto plano Imprimir
1. Private Sub Command1_Click() 2. 3. 4. End Sub
Todas las instrucciones que estén dentro de este procedimiento, llamado Command1_Click, se ejecutarán cuando presionemos el botón. Por ejemplo si ejecutamos el siguiente código, lo que haría sería mostrar la fecha del sistema en la barra de título del formulario, utilizando la función Date de Visual Basic
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command1_Click() 4. ' -- Establecemos en la barra de título del formulario la fecha
del Pc 5. Me.Caption = Date 6. 7. End Sub
Este otro ejemplo, al presionar el botón, termina el programa utilizando la función End de vb. Colocar un Botón en el form
Texto plano Imprimir
1. Option Explicit
104
Private Sub Command1_Click()
End Sub
Option Explicit
Private Sub Command1_Click() ' -- Establecemos en la barra de título del formulario la fecha del Pc Me.Caption = Date
End Sub
2. 3. Private Sub Command1_Click() 4. End 5. End Sub 6. 7. Private Sub Form_Load() 8. Command1.Caption = "Salir" 9. End Sub
Propiedades
Las propiedades que posee el control CommandButton son prácticamente las que poseen el resto de controles estandar de visual basic, salvo algunas exclusivas como la propiedad Style.
Propiedad Style
La propiedad Style tiene 2 valores, 0 - Standar y 1 - Graphical. La primera es del clásico botón y este valor es el asignado por defecto. En cambio Graphical permite utilizar CommandButton para poder mostrar imágenes, cambiarle el color del fondo, el tipo de fuente, y utilizando el Api de windows, se puede cambiar por ejemplo el color de la fuente, es decir el ForeColor que este control no lo posee.
Esta imagen muestra, en el Command1 , una imagen, por medio de la propiedad Picture que la puedes cargar desde la ventana de propiedades. El segundo, el Command2, no tiene imagen, pero muestra como se puede establecer el color de fondo, propiedad Backcolor, siempre y cuando la propiedad Style sea de tipo gráfico, ya que si está en estándar no surtirá efecto.
105
Option Explicit
Private Sub Command1_Click() EndEnd Sub
Private Sub Form_Load() Command1.Caption = "Salir"End Sub
Otro ejemplo sobre esta propiedad: Al pasar el mouse por encima del Commandbutton, se cambiará la fuente, en Negrita, el Subrayado, y el color de fondo, al salir el puntero fuera del botón, se reestablecerá a la fuente normal, y se restaurará el color de fondo usando el color por defecto que utiliza windows para los botones, mediante la constante VbButtonFace
Para el ejemplo, colocar un Command1, colocar la propiedad Style en Graphical y pegar estas líneas en el formulario:
Texto plano Imprimir
1. Option Explicit 2. 3. ' -- Flag para que no se ejecute constantemente 4. ' -- el código del Form y del CommandButton 5. Dim Flag As Boolean 6. 7. Private Sub Command1_MouseMove(Button As Integer, Shift As Integer,
X As Single, Y As Single) 8. 9. ' -- Establecer la fuente del commandButton en negrita y con su
brayado 10. If Flag Then 11. Command1.Font.Bold = True 12. Command1.Font.Underline = True 13. Command1.BackColor = vbWhite 14. Flag = False 15. End If 16. 17. End Sub 18. 19. Private Sub Form_MouseMove(Button As Integer, Shift As Intege
r, X As Single, Y As Single) 20. ' -- Quita la negrita, el subrayado, y restaura el color
de fondo 21. If Flag = False Then 22. Command1.Font.Bold = False 23. Command1.Font.Underline = False
106
24. Command1.BackColor = vbButtonFace 25. Flag = True 26. End If 27. 28. End Sub
Propiedad Default
Esta propiedad es muy útil en ciertas locaciones, sobre todo en formularios y programas que utilizan bases de datos, y opciones para buscar.
Default puede tener dos valores , True o False. Si está en True, el botón será el botón por defecto que se ejecutará cuando se presione la tecla enter. Por ejemplo hagamos de cuenta que nuestro programa contiene un botón. Ese botón ejecuta un código para buscar datos en una base de datos. Si el usuario en un momento determinado, se encuentra escribiendo datos en un control textbox, y presiona la tecla Enter, el CommandButton al tener la propiedad Default en True, ejecutará el código que tenga en el evento click. En este caso , en el evento clic, contendría todo el código para realizar la búsqueda de registros.
Un simple ejemplo
Coloca: Un control TextBox, un CommandButton. Pega el siguiente código
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command1_Click() 4. MsgBox "Se ejecutó el evento Click del commandButton", vbInform
ation 5. End Sub 6. 7. Private Sub Form_Load() 8. ' -- Establecer propiedad Default 9. Command1.Default = True 10. 11. MsgBox "Coloca el cursor en un control textbox para que t
ome el foco, " & _
107
Option Explicit
' -- Flag para que no se ejecute constantemente' -- el código del Form y del CommandButtonDim Flag As Boolean
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single
' -- Establecer la fuente del commandButton en negrita y con subrayado If Flag Then
12. "y luego, presiona la tecla enter, y verás como de todas formas " & _
13. "se ejecutó el evento click ya que es el control por defecto del" & _
14. "formulario. ( Nota .Solo puede haber un solo botón con la propiedad " & _
15. "Default en un formuario)", vbInformation 16. 17. End Sub
Propiedades de posición
Las propiedades de posición son las que permiten cambiar el tamaño y la posición en el objeto que lo contiene. estas propiedades son cuatro : Left, Top, Height y Width.
El siguiente ejemplo muestra como usar estas propiedades. Supongamos que nuestro formulario contiene un botón "Salir" en la parte inferior:
Ahora bien ¿ como hacer para que al presionar el botón de maximizar del formulario o cambiar de tamaño el formulario, el botón continúe situado en la esquina inferior derecha ? Para ello hay que modificar la propiedad Left y Top del botón. ¿ Pero donde colocar el código? para ello se debe colocar en el evento Resize del formulario.
108
Option Explicit
Private Sub Command1_Click() MsgBox "Se ejecutó el evento Click del commandButton", vbInformationEnd Sub
Private Sub Form_Load() ' -- Establecer propiedad Default Command1.Default = True
Puedes probar este simple ejemplo con el siguiente código:
Texto plano Imprimir
1. Option Explicit 2. 3. ' Valores para márgenes - Prueba cambiando estos valores 4. Private Const MARGEN_IZQUIERDO As Single = 60 5. Private Const MARGEN_INFERIOR As Single = 60 6. 7. Private Sub Command1_Click() 8. Unload Me 9. End Sub 10. 11. Private Sub Form_Load() 12. Command1.Caption = "Salir" 13. End Sub 14. 15. ' -- Posicionar el botón al cambiar de tamaño la ventana de f
ormulario 16. Private Sub Form_Resize() 17. Command1.Left = (Me.ScaleWidth - Command1.Width) - MARGEN
_IZQUIERDO 18. Command1.Top = (Me.ScaleHeight - Command1.Height) - MARGE
N_INFERIOR 19. End Sub
Propiedad Enabled
Esta propiedad lo que hace es habilitar o deshabilitar el botón. Es una propiedad que la poseen casi todos los controles, tanto los de Visual basic, como otros controles de terceros ( controles ocx o Activex )
Aquí puedes ver ver un pequeño ejemplo de su uso.
Supongamos que nuestro programa contiene un un control de texto donde se ingresan datos para buscar registros en una base de datos. Y también tenemos un botón que contiene el código que debe ejecutar para realizar la búsqueda
109
Option Explicit
' Valores para márgenes - Prueba cambiando estos valoresPrivate Const MARGEN_IZQUIERDO As Single = 60Private Const MARGEN_INFERIOR As Single = 60
Private Sub Command1_Click() Unload MeEnd Sub
dentro de la base de datos. Si en algún momento el control de texto no contiene datos, es decir no contiene texto valga la redundancia, no sería necesario que el botón se encuentre habilitado, por el contrario, deberíamos deshabilitarlo.
Puedes probar este simple ejemplo, colocando un control Textbox , un botón y pegando el siguiente código en el formulario principal
Texto plano Imprimir
1. Option Explicit 2. 3. 4. Private Sub Command1_Click() 5. MsgBox Text1.Text, vbInformation 6. End Sub 7. 8. Private Sub Form_Load() 9. Text1.Text = "" 10. Command1.Caption = "Buscar .." 11. End Sub 12. 13. ' -- El evento Change se produce cuando cambia el contenido 14. ' -- de la caja de texto 15. Private Sub Text1_Change() 16. If Text1.Text = "" Then 17. Command1.Enabled = False 18. Else 19. Command1.Enabled = True 20. End If 21. End Sub
110
Option Explicit
Private Sub Command1_Click() MsgBox Text1.Text, vbInformationEnd Sub
Private Sub Form_Load() Text1.Text = "" Command1.Caption = "Buscar .."
Modificar propiedades de varios controles
Si en el algún momento se necesita, por ejempo, habilitar o deshabilitar todos los botones que hay en el formulario, o por ejemplo camabiarle y establecerle otras propiedades que se deseen, puedes utilizar un bucle For Each para recorrer todos los controles del formulario,y utilizando el operador TypeOf de Visual basic, comprobar si el control dentro del bucle es de tipo CommandButton.
Nota. El ejemplo no tiene ninguna utilidad especifica, solo muestra el uso del ejemplo.
Debes colocar dos controles textBox. Text1 y Text2, y todos los botones que desees, por ejemplo 4 como mustra la imagen de abajo
Al colocar el cursor en el Text1 se habilitarán todos los botones, luego al colocar el cursor en el Text2, es decir cuando recibe el foco, se deshabilitarán todos los botones.
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Form_Load() 4. Command1.Caption = "Opción 1" 5. Command2.Caption = "Opción 2" 6. Command3.Caption = "Opción 3" 7. Command4.Caption = "Opción 4" 8. End Sub 9. 10. ' \\ -- Procedimiento para activar y desactivar los botones 11. Sub EnabledDisabled(ByVal bValue As Boolean) 12. 13. ' -- Recorrer todos los objetos y controles del form 14. Dim xCtrl As Control 15. For Each xCtrl In Me.Controls 16. ' xCtrl ¿ es un Command Button ? 17. If TypeOf xCtrl Is CommandButton Then 18. ' si lo es, entonces habilitarlo o deshabilitarlo 19. xCtrl.Enabled = bValue 20. End If
111
21. Next 22. End Sub 23. 24. '\\ -- Deshabilitar 25. Private Sub Text2_GotFocus() 26. Call EnabledDisabled(False) 27. End Sub 28. 29. '\\ -- Activar 30. Private Sub Text1_GotFocus() 31. Call EnabledDisabled(True) 32. End Sub
Propiedad MousePointer y Mouseicon
Estas dos propiedades son muy simples de usar y son comunes a la mayoría de objetos y controles de vb
Mousepointer devuelve o establece el tipo de puntero del mouse mostrado al pasar por encima de un objeto
MouseIcon establece un icono personalizado para el mouse
Ejemplo. Colocar un control ListBox y un botón. Pegar el siguiente código fuente en el formulario
Texto plano Imprimir
112
Option Explicit
Private Sub Form_Load() Command1.Caption = "Opción 1" Command2.Caption = "Opción 2" Command3.Caption = "Opción 3" Command4.Caption = "Opción 4"End Sub
' \\ -- Procedimiento para activar y desactivar los botones
1. Option Explicit 2. 3. Private Sub Form_Load() 4. 5. With Command1 6. ' -- Puntero de mouse personalizado - Pasar usar con íconos
7. .MousePointer = 99 8. ' -- usar el ícono del formulario ( Puedes especificar el q
ue desees cargandolo desde la ventana de propiedades o utilizando la función LoadPicture)
9. .MouseIcon = Me.Icon 10. End With 11. 12. ' -- Cargar la lista de punters de mouse para el botón 13. With List1 14. .AddItem "0 - Default" 15. .AddItem "1 - Arrow" 16. .AddItem "2 - Cross" 17. .AddItem "3 - Beam" 18. .AddItem "4 - Icon" 19. .AddItem "5 - Size Ne SW" 20. .AddItem "6 - Size Ne SW" 21. .AddItem "7 - Size N S" 22. .AddItem "8 - Size NW Se" 23. .AddItem "9 - Up Arrow" 24. .AddItem "10 - HourGlass" 25. .AddItem "Custom" 26. End With 27. 28. End Sub 29. 30. Private Sub List1_Click() 31. ' -- Cambiar la propiedad MousePointer 32. With List1 33. If .ListIndex <> -1 Then 34. Command1.MousePointer = .ListIndex 35. End If 36. If .ListIndex = .ListCount - 1 Then 37. Command1.MousePointer = 99 38. Command1.MouseIcon = Me.Icon 39. End If 40. End With 41. End Sub
113
Métodos y funciones
Este control prácticamente no contiene métodos o funciones. El mas importante y el mas utilizado es el método SetFocus, que también lo posen muchos otros controles.
Lo que hace el método setFocus, es poder establecer el enfoque a un objeto especifico, en este caso al botón. Su uso es muy simple, solo basta con ejecutarlo desde alguna parte de nuestro programa para que el Commandbutton pase a tener el foco.
Una cosa muy importante a tener en cuenta , es que para poder establecer el foco a cualquier control de visual basic, el objeto se debe encontrar visible, y también se debe encontrar habilitado. Es decir, si la propiedad Visible o la propiedad Enabled del objeto se encuentran en False, esto producirá un error en tiempo de ejecución. Por ello siempre se debe colocar una rutina de error para poder controlar esto, o comprobando estas propiedades mediante una instrucción If Then
Para recrear este error puedes ejecutar este código
Coloca dos botones
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command2_Click() 4. ' -- Esta instrucción generará un error, ya que le intentará pa
sar el foco 5. ' -- al command1, que se encuentra deshabilitado 6. Command1.SetFocus 7. End Sub 8. 9. Private Sub Form_Load() 10. ' -- Deshabilitamos el Command1 11. Command1.Enabled = False
114
Option Explicit
Private Sub Form_Load()
With Command1 ' -- Puntero de mouse personalizado - Pasar usar con íconos .MousePointer = 99 ' -- usar el ícono del formulario ( Puedes especif icar el que desees cargandolo .MouseIcon = Me.Icon End With
12. MsgBox "Presiona el Botón Command2", vbInformation 13. End Sub
Para solucionarlo, simplemente puedes hacer algo asi
Colocar dos botones
Texto plano Imprimir
1. Option Explicit 2. 3. Private Sub Command2_Click() 4. With Command1 5. ' -- Si está visible y esta habilitado, entonces .. pasar e
l foco 6. If .Visible And .Enabled Then 7. .SetFocus 8. End If 9. End With 10. End Sub 11. 12. Private Sub Form_Load() 13. MsgBox "Presiona el Botón Command2", vbInformation 14. End Sub
115
Option Explicit
Private Sub Command2_Click() ' -- Esta instrucción generará un error, ya que le intentará pasar el foco ' -- al command1, que se encuentra deshabilitado Command1.SetFocusEnd Sub
Private Sub Form_Load() ' -- Deshabilitamos el Command1
Option Explicit
Private Sub Command2_Click() With Command1 ' -- Si está visible y esta habilitado, entonces .. pasar el foco If .Visible And .Enabled Then .SetFocus End If End WithEnd Sub
Eventos principales del control CommandButton
Aparte del evento Click que se ejecuta cuando lo presionamos, otros eventos importantes son:
Evento GotFocus y LostFocus : Se disparan dichos eventos cuando el control recibe o pierde el foco
MouseMove, MouseDown y MouseUp: El primero se dispara cuando el puntero del mouse se mueve encima del botón, MouseDown cuando el botón está abajo y cuando está arriba MouseUp
Por ejemplo para probar el uso de los métodos GotFocus y LostFocus (recibe y pierde el foco) colocar 3 CommandButton, Command1, Command2 y Command3. Luego un Label1 que mostrará el control que recibe el foco (GotFocus) y un Label2 que mostrará el control que pierde el foco (LosFocus)
Luego de añadir los controles pegar el código siguiente en el formulario
Texto plano Imprimir
1. Private Sub Command1_GotFocus() 2. Label1 = "El foco lo tiene: " & Command1.Caption 3. End Sub 4. 5. Private Sub Command2_GotFocus() 6. Label1 = "El foco lo tiene: " & Command2.Caption 7. End Sub 8. 9. Private Sub Command3_GotFocus() 10. Label1 = "El foco lo tiene: " & Command3.Caption 11. End Sub 12. 13. Private Sub Command1_LostFocus() 14. Label2 = "Perdió el foco el: " & Command1.Caption 15. End Sub 16. 17. Private Sub Command2_LostFocus() 18. Label2 = "Perdió el foco el: " & Command2.Caption 19. End Sub 20. 21. Private Sub Command3_LostFocus() 22. Label2 = "Perdió el foco el: " & Command3.Caption 23. End Sub
116
Nota: en la ventana de código podés ver que tenés 2 combos o listas desplegables:
El combo de la izquierda muestra los objetos que tiene el formulario, es decir los controles, rutinas y funciones, y la lista de la derecha los eventos y métodos del objeto seleccionado en la lista izquierda.
En la captura del ejemplo anterior, se puede ver que cuando el cursor se encuentra dentro de la ventana de código está situado en un procedimiento determinado, las listas se actualizan mostrándote dicho objeto, por ejemplo el cursor está en el control u objeto llamado Command3 en el evento Gotfocus, y las listas desplegables muestran esto mismo.
Siguiendo el ejemplo anterior, para escribir código en el evento MouseMove del Command1 para que muestre un mensaje cuando pasa el mouse encima del botón, se tendría que seleccionar de la lista izquierda el Command1 de esta forma:
117
Private Sub Command1_GotFocus() Label1 = "El foco lo tiene: " & Command1.CaptionEnd Sub
Private Sub Command2_GotFocus() Label1 = "El foco lo tiene: " & Command2.CaptionEnd Sub
Private Sub Command3_GotFocus() Label1 = "El foco lo tiene: " & Command3.Caption
y después seleccionar el evento que se quiera utilizar disponible en el otro combo desplegable, en este caso el MouseMove
Al hacer esto en la ventana de código visual basic te agrega un procedimiento vacío:
118
Ahora el código que escribas dentro de este procedimiento se va a disparar cada vez que pases el mouse encima del Command1. Por ejemplo para mostrar un mensaje con la función MsgBox cada ves que pases el puntero encima, agrega lo siguiente:
Texto plano Imprimir
1. Option Explicit 2. 3. ' -- \\ Evento MouseMove 4. Private Sub Command1_MouseMove( _ 5. Button As Integer, _ 6. Shift As Integer, X As Single, Y As Single) 7. 8. MsgBox "Estás encima del botón", vbInformation 9. 10. End Sub
119
Option Explicit
' -- \\ Evento MouseMovePrivate Sub Command1_MouseMove( _ Button As Integer, _ Shift As Integer, X As Single, Y As Single) MsgBox "Estás encima del botón", vbInformation End Sub
Tomar la apariencia de los temas de windows para los botones
Por defecto el aspecto de los botones, no toma la apariencia del tema que tenga activo windows. Para poder hacer que los botones y el resto de los controles tengan la tengan, se puede utilizar un archivo Manifest.
En el siguiente enlace puedes ver un ejemplo de como implementarlo:
Tomar la apariencia de los temas de windows para los controles del programa
La función específica del control OptionButton es permitirle al usuario elegir entre diferentes opciones dentro de un grupo de opciones. Este control no se utiliza de a uno solo, si no que se debe tener por lo menos 2 de ellos, ya que sería ilógico utilizar uno solo.
En este grupo de opciones solo puede estar un solo botón de opción seleccionado al mismo tiempo
120
Luego, de acuerdo a la opción seleccionada, se utiliza en algún procedimiento o función para realizar alguna opción u operación.
Propiedad Value del OptionButton
Esta es la propiedad mas importante de este control. Los valores que puede tener la propiedad Value son de tipo boolean (Verdadero - Falso) es decir True y False.
Para probar un ejemplo muy fácil de como verificar el valor de la propiedad Value , agrega 3 OptionButton dentro de un control Frame como muestra la imagen anterior.
Mediante la propiedad Caption le cambias el texto de cada botón de opción. Luego Agrega un Command1 y en el caption escribe Aceptar.
Ahora pega este código en el formulario:
Private Sub Command1_Click()'Si está seleccionado el Option1 se ejecuta la siguiente condiciónIf Option1.Value = True Then MsgBox "Seleccionaste pagar en Efectivo"End If
'Si está seleccionado el Option2 estaIf Option2.Value = True Then MsgBox "Seleccionaste pagar con Tarjeta de crédito"End If
'Si está seleccionado el Option3 se ejecuta esta otraIf Option3.Value = True Then MsgBox "Seleccionaste pagar mediante Cheque"End If
End Sub
121
Al probar el ejemplo se puede ver que al seleccionar un botón de opción, y luego presionar el Command1, se evalúa mediante una condición If Then, el valor de los Option1, Option2 y Option3. El Optionbutton que se encuentre con el valor True en la propiedad Value , ejecutará la función MsgBox mostrando el mensaje correspondiente a la opción seleccionada.
Este control, al igual que control CommandButton y el control CheckBox, tiene la propiedad Style, que permite establecer la visualización del mismo en modo estándar o en modo gráfico. Los posibles valores son 0 - Standar o 1 - Graphical.
Las demás propiedades que posee son comunes a la mayoría de los otros controles del visual basic, como:
Propiedad Forecolor (color de la fuente) Propiedad Font ( para especificar el tipo de fuente, el estílo, el tamaño
etc...) Propiedad Enabled ( Para habilitar o deshabilitar el control ) Propiedad Hight y Width ( Ancho y alto del control ) Propiedad Backcolor ( color del fondo ) Propiedad ToolTipText ( Muestra un recuadro con información adicional
cuando el mouse está encima del control ) Propiedad Visible ( determina si el control estará visible - Los valores
son True y False )
Otro ejemplo del control OptionButton:
Coloca 2 controles OptionButton llamados Option1 y Option2 dentro de un control Frame (opcional). También colocar un control Label llamado Label1, como está en esta imagen:
122
Al Option1 en la propiedad Caption escribir " Mostrar la hora del sistema " y en el Option2 "Mostrar la Fecha del sistema".
Este ejemplo muy simple lo que hace es, cuando hacemos Click en el Option1, se visualizará la hora en el Label1 usando la función Time que devuelve la hora establecida del Pc. En cambio cuando hagamos Click en el Option2 se visualizará la Fecha, en este caso usamos la función Date del Visual Basic que recupera la Fecha.
Esto se realiza en el evento Click de cada OptionButton. El Evento Click es la propiedad por defecto. y desde la ventana de diseño al hacer un doble Click sobre el Option1, se abrirá la ventana de código con el procedimiento Click para este Option1, y todas las instrucciones de código que estén en ese procedimiento, entre Private Sub Option1_Click y End Sub, se ejecutarán cuando se le de un click a dicho botón de opción.
Pegar este código en el formulario:
Private Sub Form_Load()'Le establecemos en tiempo de ejecución algunas propiedades al control Label1'cuando carga el formulario
'Esto hace que el control Label se ajuste al textoLabel1.AutoSize = True'Esta línea cambia la propiedad Forecolor del Label en azulLabel1.ForeColor = vbBlueEnd Sub
Private Sub Option1_Click()'Mostramos en el Label1 la fecha del SistemaLabel1 = Date
123
End Sub
Private Sub Option2_Click()'Mostramos en el Label1 la Hora del sistemaLabel1 = TimeEnd Sub
Por último un detalle importante sobre el uso de los OptionButton
Por ejemplo supongamos que queremos en un mismo formulario, tener varios grupos de opciones .Para hacer esto se deben colocar el grupo de OptionButton contenidos en un control contenedor, por ejemplo un Frame, de esta manera cada grupo de OptionButton será único. Para que se entienda mejor un ejemplo.
Colocar 2 Controles Frame ( Frame1 y Frame2 ) . Dentro del Frame1 agregar 2 OptionButton (Option1 y Option2) y en el Frame2 otros 2 Option (Option3 y Option4)
Ahora puede haber varios Option Button seleccionados, cosa que no ocurriría si todos los OptionButton estarían en el mismo control contenedor.
Por último coloca el Option3 y Option4 dentro del Frame1. Ahora estos 2 son parte de un solo grupo dentro del Frame1, por lo tanto con esta prueba se ve que solo puede haber uno con la propiedad Value en True, es decir un solo botón de opción seleccionado al mismo tiempo.
Ejemplo para crear un OptionButton con gráficos
124
El siguiente ejemplo para descargar es muy simple, y es una idea para poder crear Controles OptionButton mediante gráficos cargados en controles Image por ejemplo:
Enlaces relacionados
Controles ocx para botones y ejemplos
Volver al índice
Tema 3.- funcionamiento de módulos.Modulo de cargar formulario
Para dar inicio se comenzó por buscar el logo de la empresa donde se tenía la firma de la compañía y se comenzó por cambiar el nombre al formulario, creando
una macro que se llamara ingresar clientes, la cual se grabo y se le asigno la macro a nuestra imagen.
125
Después, procedimos a diseñar nuestro formulario y darle nombre y editar cada una de sus partes como se pudo desarrollar en nuestra explicación de cómo
funciona nuestro programa.
Imagen donde se ve el diseño de nuestro formulario.
126
Imagen en la que se ve el cambio al formulario.
Antes de comenzar, se hizo el primer modulo el cual fue el que mediante en una imagen en Excel se pudiese cargar todo mi formulario y esto se logro mediante el
siguiente código.
El entorno de VBA para Microsoft Excel es un medio en el cual se unen dos grandes programas, uno es el programador Visual Basic y otro es el mismo Excel.
Este se puede programar con ciertas rutinas que se muestran al experimentar con el mediante una Macro, ya que al guardarla permite definir un código el cual
muestra al darle la opción de editar, para esto se muestra el siguiente ejemplo:
127
En esta figura se puede observar cuales son los botones con los cuales se piensa trabajar para desplegar las macros que hayamos guardado.
En esta figura están las macros que se han guardado y se muestran varios botones como es ejecutar, paso a paso, modificar, eliminar y opciones.
Si seleccionamos la opción de ejecutar, el código lo que hará será correr todo lo que se tenga programado en la rutina del código. Por ejemplo:
Si seleccionamos de nuestras macro la opción de uso de formulas la cual es la tercera y le damos ejecutar: automáticamente se ejecutara el siguiente código:
128
Para comenzar, es necesario destacar que el programa fue hecho a pasos mediante el programador de macros en Excel. Para esto nuestro primer objetivo fue programar la macro que me permitiera balancear las cargas de modo de que
sienia una tabla como la siguiente:
Imagen donde se puede ver un desbalance de mi sistema.
Lo que tiene que hacer mi programa en este caso es escribir varias opciones, donde me de la menor cantidad de porcentaje de desbalance, esto ayuda a que no toda la carga se vaya a una sola fase y se sobrecaliente y por ello llegue a haber
un cobro de luz muy caro por sobre calentamiento, ya que como sabemos el calentamiento hace que las moléculas internas de un conductor se agiten y por esta causa conduzca menos electricidad ya que los electrones chocan unos con
otros y no pueden viajar sin obstrucciones , como pasaría con una manguera cuando se obstruye por un doblez, el doblez seria el sobrecalentamiento que hace
que obstruya el paso de agua, el cual serían los electrónes.
Por lo cual se realizo el siguiente formulario:
129
En este cuadro se puede ver como pregunta mi programa por cuantas veces quiere que se cicle el codigo.
Aquí se puede ver como cambio la fases de modo de que de tener un desbalance de mas de 60% lo dejo en tan solo un 8,8%., Y Todavía se piensa en un futuro
bajar aún más el desbalance con el hecho de separar el numero de cargas. Nota: cabe aclarar que solo se llevara por mientras un balance de lo que ha metido el
usuario a la tabla de Excel.
Y el programa para este modulo de balanceo es:
Sub Procedimientobalancear(n As Integer)
Dim ncarateres, m As Integer
Dim a2, e2, f2(7) As Double
Dim d2(7) As String
130
'se inicializan mis variables donde e2 que es una variable que es parte de un arreglo que guarda todos los valores
' que se pueden anotar en la celda de balanceo de circuito
e2 = 0
a2 = Range("J" & ncolJ & "").Value
'se iguala m y n ya que es necesario cada vez que se actualiza el codigo decirle que la celda de mi respuesta sugerida, es
'igual a la respuesta minima encontrada en algun balanceo anterior o el primero
m = n
'ncarateres guarda cuantas fases son las que se estan contando y se empieza a tomar control mediante if´s
ncarateres = Range("E" & n).Value
If ncarateres = 1 Then
'aqui pertenece a tres opciones que puede haber por eso e2{0,1,2}, donde calcamos escribir {A,B,C}, y al final comparar
'cual fue el resultado mas bajo y guardarla en otra casilla y asi para las demas opciónes
For e2 = 0 To 2
If e2 = 0 Then
d2(e2) = "A"
'con Range se elige la celda D&n que es una celda que va cambiando de valor segun va cambiando n de nuestro procedi
'miento, donde se guarda el valor de la celda activa a una variabiable d2(e2) y se compara al final con f2(e2) qu
'e es el valor que nos retorno al escribir ya sea {A,B,C}. Y lo mismo pasa para las demás variables
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
131
If e2 = 1 Then
d2(e2) = "B"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
If e2 = 2 Then
d2(e2) = "C"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
'aqui se hace la comparación entre el valor que dio al entrar {A,B,C} Y lo que se tenia guardado de la variable
'al inicio y se guarda como opción de sugeriencia si fue menor en otra casilla la cual es la k&m
If f2(e2) <= a2 Then
Range("K" & m & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
a2 = Range("J" & ncolJ & "").Value
End If
'finalmente aqui se toma de las tres opciones cual la opción sugerida ideal y se deja la opcion en la casillaa D&n.
If e2 = 2 Then
Range("K" & m & "").Select
d2(e2) = ActiveCell.FormulaR1C1
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
132
End If
Next
End If
'Aqui sucede lo mismo que el parrafo anterior solo que es para dos fases {AB,AC,BC}
If ncarateres = 2 Then
For e2 = 3 To 5
If e2 = 3 Then
d2(e2) = "AB"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
If e2 = 4 Then
d2(e2) = "AC"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
If e2 = 5 Then
d2(e2) = "BC"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
End If
133
If f2(e2) <= a2 Then
Range("K" & m & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
a2 = Range("J" & ncolJ & "").Value
End If
If e2 = 5 Then
Range("K" & m & "").Select
d2(e2) = ActiveCell.FormulaR1C1
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
End If
Next
End If
'Y en este caso como es para tres fases y no se tiene una combinación pues simplemene se pone como sugeriencia y se
'agrega a la fila D la respuesta sin cambios.
If ncarateres = 3 Then
e2 = 6
d2(e2) = "ABC"
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
f2(e2) = Range("J" & ncolJ & "").Value
Range("K" & m & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
Range("D" & n & "").Select
ActiveCell.FormulaR1C1 = d2(e2)
End If
134
End Sub
Modulo de Balanceo de Linea.
Para este modulo lo único que hace es construir un balanceo de línea si ya se tienen capturados todos los datos requerido y no se desea agregar algo mas, en
esta pare se le pregunta cuantas veces se quiere balancear y si no se quiere balancear simplemente se sale del código, no iimportando que este lleno o vacio
alguna celda.
Private Sub CommandButton1_Click()
' se inicializan las variables, donde la columnaA es lo que va a contener mi celda que se va a verificar, que no sea
'igual a que diga principal, ya que principal es lo que me determina cuando debe detenerse y contabilizar en donde quedo mi
'cursor
columnaA = ""
'contar2 debe de iniciar en uno ya que no existe celda A0 como inicio, y bien sabemos que el inicio es A1.
contar2 = 1
'En este ciclo se cuenta cuantas veces tiene que bajar nuestra columna A2 por el incremento de contar2, donde es guardado,
'mediante un ciclo Do Loop, que significa hacer hast
Do
If columnaA = "PRINCIPAL" Then
Exit Do
End If
Range("A" & contar2 & "").Select
columnaA = ActiveCell.FormulaR1C1
contar2 = contar2 + 1
Loop
135
'se restan los primeros 12 renglones que se cuentan para el siguiente numero para que con esto podamos obtener el numero
'exacto de columnas a balancear o dicho de otra manera, solo cuenta los circuitos
contar2 = contar2 - 12
'se pone el lugar limite donde queremos balancear
limite = 10 + contar2
'se ingresa cuantas veces se desea repetir..para obtener un resultado mas exacto.
b = InputBox("ingresa cuantas veces quieres ciclar el for:", "desicion 2", "pon tu numero aqui:")
'se repite el numero de veces que se piensa repetir el ciclo volviendo a empezar en
For a = 1 To b
n = 11
ncolJ = contar2 + 12
For n = 11 To limite
Procedimientobalancear (n)
Next
Next
End Sub
136
Aquí se puede mostrar cual es el botón que indica nuestra función de balancear las líneas y todo lo anteriormente mostrado.
Modulo de agregar información y datos
Para este modulo se quizó agregar la información de los textbox que se fueran realizando
MODULO DE CONVERSIO DE CUALQUIER TIPO DE UNIDAD A WATTS
Resulta que mucho de el trabajo eléctrico que se realiza se tiene que trabajar en watts ya que es la unidad estándar de trabajo en el área eléctrica para esto se
tuvo que proceder a hacer uso de un combo box y de almacenar algunas opciónes en forma numérica para poder controlar mediante if´s y asi solo cambiar lo que
almacenaramos en una caja de texto para convertirla a watts directamente,
Los procedimientos fueron los siguientes
137
Figura donde se muestra el cambio de la selección por el nombre CONV.
Como se puede ver en la imagen, para poder hacer la base de datos para nuestro Combo Box1 primero se dio formato a la siguiente tabla hecha en Excel dándole
nombre de CONV. Donde después nosotros pudiéramos cambiar las propiedades del combo box que se llama Row Source y quedaría de la siguiente manera en el
programadador:
138
Cambio de formato de RowSource para que pueda cambiar la tabla dentro de los valores que se dieron a la Tabla con el nombre de CONV.
Para lo cual se tiene después un desplegado de todas las funciones que guardamos, como se puede observar en la siguiente imagen.
Después una breve explicación del código.:
139
'según el valor del dato que se halla asignado para dar valor a nuestro combobox si es igual a lo que esta escrito hara la
'función de convertirlo según su equivalencia.
If ComboBox1.Value = "H.P." Then
TextBox11.Value = TextBox4.Value * 745.7
End If
If ComboBox1.Value = "WATTS" Then
TextBox11.Value = TextBox4.Value * 1
End If
If ComboBox1.Value = "KILOWATTS" Then
TextBox11.Value = TextBox4.Value * 1000
End If
If ComboBox1.Value = "JULIO POR SEGUNDO" Then
TextBox11.Value = TextBox4.Value * 1
End If
If ComboBox1.Value = "CABALLO DE VAPOR" Then
TextBox11.Value = TextBox4.Value * 735.499
End If
If ComboBox1.Value = "ft lbf/s" Then
TextBox11.Value = TextBox4.Value * 1.355818
End If
If ComboBox1.Value = "BTU/h" Then
TextBox11.Value = TextBox4.Value * 0.29329722222222
End If
If ComboBox1.Value = "BTU/s" Then
TextBox11.Value = TextBox4.Value * 1055.87
End If
140
If ComboBox1.Value = "KILOCALORIA/h" Then
TextBox11.Value = TextBox4.Value * 1.1630555555556
End If
If ComboBox1.Value = "KILOCALORIA/s" Then
TextBox11.Value = TextBox4.Value * 4187
End If
End Sub
Private Sub ComboBox2_Change()
ComboBox2.RowSource = "OPCIONES"
End Sub
MODULO DE SITUACION DE LOS CONDUCTORES
Para este y otros módulos se tuvieron que cargar 4 tablas de la norma oficial la cual son de las más usadas para calcular calibres de los conductores.
Se realizo lo siguiente:
Se hizo una tabla para las primeras tres situaciones llamando a la hoja situación, que se refiere a mis tres tablas de diferentes artículos, como se ve a continuación.
141
La idea de esto es que mi código al detectar que sepa mi programa cargar las tres situaciones y a cada una le asigne un numero, como se puede ver en la imagen.
Y esto se carga con el siguiente código:
Modulo de conductor
Para este modulo es importante primero saber cómo definí su tabla, y la definí de la siguiente manera:
Para cada tipo de conductor le corresponde una situación, por ejemplo: si eligo la situación 1 en mi código de conductor me dara dos opciones ya sea la del cobre o
el aluminio, mas sin embargo si se elige la situación tres tengo tre opciones de
142
conductores, una va a ser el cobre, otro el níquel y el ultimo va a ser el aluminio, ahora queda analizar su código:
Private Sub cbosituacion_Change()
'primero se añade un numero a toda la lista de nuestro indice anterior sumandole 1 por que empieza en 0
IndiceSit = cbosituacion.ListIndex + 1
'se dimensiona un contador
Dim ii As Integer
'se limpia la caja del combobox del conductor
cboconductor.Clear
'se empieza a trabajar con la hoja de excel que se llama "Conductor
With Sheets("Conductor")
'se comienza a contar des de mi celda ii=2 hasta el final que es .Range("A" & Rows.Count).End(xlUp).Row
For ii = 2 To .Range("A" & Rows.Count).End(xlUp).Row
'si la celda ii de la columna 1 es igual a mi indice del inicio entonces se añade a la lista del combobox su valor
If .Cells(ii, 1) = IndiceSit Then
cboconductor.AddItem .Cells(ii, 3).Value
End If
'se continua contando
Next ii
End With
End Sub
En esta imagen vemos que es lo que se quiere lograr de opciones de las siguientes tablas…
143
enterrados a 30°C temp. Ambientetamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño nominal
mm2
60°C 75°C 90°C 60°C 75°C 90°C
AWGKcmil
Tipos Tipos Tipos Tipos Tipos TiposTW* RHW* RHH* UF* RHW* RHW-2
TWD* THHW* RHW-2 XHHW* XHHWCCE THW THHN* BM-AL XHHW-2
TWD-UV THW-LS THHW DRSTHWN* THHW-LSXHHW* THW-2*
TT XHHW*XHHW-2
Cobre Cobre Cobre Aluminio Aluminio Aluminio0,8235 --- --- 14 --- --- --- 18
1,307 --- --- 18 --- --- --- 162,082 20 20 25 --- --- --- 143,307 25 25 30 --- --- --- 12
5,26 30 35 40 --- --- --- 108,367 40 50 55 --- --- --- 8
13,3 55 65 75 40 50 60 621,15 70 85 95 55 65 75 426,67 85 100 110 65 75 85 333,62 95 115 130 75 90 100 242,41 110 130 150 85 100 115 153,48 125 150 170 100 120 135 1/067,43 145 175 195 115 135 150 2/085,01 165 200 225 130 155 175 3/0107,2 195 230 260 150 180 205 4/0
126,67 215 255 290 170 205 230 250152,01 240 285 320 190 230 255 300177,34 260 310 350 210 250 280 350202,68 280 335 380 225 270 305 400253,35 320 380 430 260 310 350 500304,02 355 420 475 285 340 385 600354,69 385 460 520 310 375 420 700380,03 400 475 535 320 385 435 750405,37 410 490 555 330 395 450 800456,04 435 520 585 355 425 480 900506,71 455 545 615 375 445 500 1000633,39 495 590 665 405 485 545 1250760,07 520 625 705 435 520 585 1500886,74 545 650 735 455 545 615 1750
1013,42 560 665 750 470 560 630 2000
144
enterrados a 30°C temp. Ambientetamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño nominal
mm2
60°C 75°C 90°C 60°C 75°C 90°C
AWGKcmil
Tipos Tipos Tipos Tipos Tipos TiposTW* RHW* RHH* UF* RHW* RHW-2
TWD* THHW* RHW-2 XHHW* XHHWCCE THW THHN* BM-AL XHHW-2
TWD-UV THW-LS THHW DRSTHWN* THHW-LSXHHW* THW-2*
TT XHHW*XHHW-2
Cobre Cobre Cobre Aluminio Aluminio Aluminio0,8235 --- --- 14 --- --- --- 18
1,307 --- --- 18 --- --- --- 162,082 20 20 25 --- --- --- 143,307 25 25 30 --- --- --- 12
5,26 30 35 40 --- --- --- 108,367 40 50 55 --- --- --- 8
13,3 55 65 75 40 50 60 621,15 70 85 95 55 65 75 426,67 85 100 110 65 75 85 333,62 95 115 130 75 90 100 242,41 110 130 150 85 100 115 153,48 125 150 170 100 120 135 1/067,43 145 175 195 115 135 150 2/085,01 165 200 225 130 155 175 3/0107,2 195 230 260 150 180 205 4/0
126,67 215 255 290 170 205 230 250152,01 240 285 320 190 230 255 300177,34 260 310 350 210 250 280 350202,68 280 335 380 225 270 305 400253,35 320 380 430 260 310 350 500304,02 355 420 475 285 340 385 600354,69 385 460 520 310 375 420 700380,03 400 475 535 320 385 435 750405,37 410 490 555 330 395 450 800456,04 435 520 585 355 425 480 900506,71 455 545 615 375 445 500 1000633,39 495 590 665 405 485 545 1250760,07 520 625 705 435 520 585 1500886,74 545 650 735 455 545 615 1750
1013,42 560 665 750 470 560 630 2000
145
Al aire libre temp.30°Ctamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño nominal
mm2
60°C 75°C 90°C 60°C 75°C 90°C
AWGKcmil
Tipos Tipos Tipos Tipos Tipos TiposTW RHW RHH UF RHW RHH
THHW RHW-2 XHHW RHW-2THW THHN USE-2
THW-LS THHW XHHTHWN THW-LS XHHWXHHW THWN-2 XHHW-2
XHHWXHHW-2
Cobre Cobre Cobre Aluminio Aluminio Aluminio0,8235 --- --- 18 --- --- --- 18
1,307 --- --- 24 --- --- --- 162,082 25 30 35 --- --- --- 143,307 30 35 40 --- --- --- 12
5,26 40 50 55 --- --- --- 108,367 60 70 80 --- --- --- 8
13,3 80 95 105 60 75 80 621,15 105 25 140 80 100 110 426,67 120 145 165 95 115 130 333,62 140 170 190 110 135 150 242,41 165 195 220 130 155 175 153,48 195 230 260 150 180 205 1/067,43 225 265 300 175 210 235 2/085,01 260 310 350 200 240 275 3/0107,2 300 360 405 235 280 315 4/0
126,67 340 405 455 265 315 355 250152,01 375 445 505 290 350 395 300177,34 420 505 570 330 395 445 350202,68 455 545 615 355 425 480 400253,35 515 620 700 405 485 545 500304,02 575 690 780 455 540 615 600354,69 630 755 855 500 595 675 700380,03 655 785 855 515 620 700 750405,37 680 812 920 535 645 725 800456,04 730 870 985 580 700 785 900506,71 780 935 1055 625 750 845 1000633,39 890 1065 1200 710 855 960 1250760,07 980 1175 1325 795 950 1075 1500886,74 1070 1280 1445 875 1050 1185 1750
1013,42 1155 1385 1560 960 1150 1335 2000
146
0 a 2000v, de 150°C a 250°C en canalización o cablestamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño nominal
mm2
150°C 200°C 250°C 150°C
AWGKcmil
TIPOS TIPOS TIPOS TIPOFEP FEP PFAH ZFEPB FEPB TFESF SF
COBRE NIQUEL O NIQUIEL RECUBIERTO DE COBRE ALUMINIO
0,8235 --- --- --- --- 181,307 --- --- --- --- 162,082 34 36 39 --- 143,307 43 45 54 --- 12
5,26 55 60 73 --- 108,367 76 83 93 --- 8
13,3 96 110 117 75 621,15 120 125 148 94 426,67 143 152 166 109 333,62 160 171 191 124 242,41 186 197 215 145 153,48 215 229 244 169 1/067,43 251 260 273 198 2/085,01 288 297 308 227 3/0107,2 332 346 361 260 4/0
126,67 --- --- --- --- 250152,01 --- --- --- --- 300177,34 --- --- --- --- 350202,68 --- --- --- --- 400253,35 --- --- --- --- 500304,02 --- --- --- --- 600354,69 --- --- --- --- 700380,03 --- --- --- --- 750405,37 --- --- --- --- 800456,04 --- --- --- --- 900506,71 --- --- --- --- 1000633,39 --- --- --- --- 1250760,07 --- --- --- --- 1500886,74 --- --- --- --- 1750
1013,42 --- --- --- --- 2000
147
Como se puede observar en las siguientes tablas primero esta la situación para la que fue hecha cada tabla y después temperaturas y tipo de material, ara lo cual estan diferentes entre cada una de ellas y también los tipos de aislantes para los
que puede trabajar cada parte de la tabla a lo que le corresponden ciertos amperajes y que a su vez le corresponden ciertos calibres en AWG ó Kcmil, para
esto son los combo box que pusimos en cada parte del formulario, como se puede ver en la siguiente figura.
Para la opción de tipo de temperatura no cambia mucho el código lo único que cambia es a que elemento vamos a llamar pero es el mismo procedimiento
148
Como se puede ver para elegir la temperatura es el mismo procedimiento que para elegir el conductor, lo único que cambia es el nombre de los combosboxes
que vamos a utilizar.
Private Sub cbotemperatura_Change()
IndiceTemp = cbotemperatura.ListIndex + 1
Dim jj As Integer
cboaislante.Clear
With Sheets("Aislamiento")
For jj = 2 To .Range("A" & Rows.Count).End(xlUp).Row
If .Cells(jj, 1) = IndiceSit And .Cells(jj, 2) = IndiceConduc And .Cells(jj, 3) = IndiceTemp Then
cboaislante.AddItem .Cells(jj, 5)
End If
Next jj
End With
End Sub
Pero eso si su base de datos es mas amplia como veremos en su diagrama de procedencia:
149
En este caso vemos que para cada temperatura existe dos o hasta tres tipos de conductores y para cada tipo de situación existen 2 o tres tipo de conductores y así es como se va ramificando nuestras opciones, para abarcar las 3 tablas que
tenemos.
Asi pues, cuando elegimos una situación, se activa un índice de la columna situación y cuando elegimos en otro combo box un conductorse activa un código
de conductor y nos despliega esa lista de opciones y finalmente elegimos la opción que nos da para elegir la temperatura, pero no acaba todo ahí, también se
debe elegir el aislante por lo cual se hizo la siguiente tabla.
CODIGO DE SITUACIÓN
CODIGO DE CONDUCTOR
CODIGOTEMPERATURA
CODIGO AISLAMIENTO
AISLAMIENTO
1 1 1 1 TW*1 1 1 2 TWD*1 1 1 3 CCE1 1 1 4 TWD-UV1 1 2 1 RHW*1 1 2 2 THHW*
150
1 1 2 3 THW1 1 2 4 THW-LS1 1 2 5 THWN*1 1 2 6 XHHW*1 1 2 7 TT1 1 3 1 RHH*1 1 3 2 RHW-21 1 3 3 THHN*1 1 3 4 THHW1 1 3 5 THHW-LS1 1 3 6 THW-2*1 1 3 7 XHHW*1 1 3 8 XHHW-21 2 1 1 UF*1 2 2 1 RHW*1 2 2 2 XHHW*1 2 2 3 BM-AL1 2 3 1 RHW-21 2 3 2 XHHW1 2 3 3 XHHW-21 2 3 4 DRS2 1 1 1 TW2 1 2 1 RHW2 1 2 2 THHW2 1 2 3 THW2 1 2 4 THW-LS2 1 2 5 THWN2 1 2 6 XHHW2 1 3 1 RHH2 1 3 2 RHW-22 1 3 3 THHN2 1 3 4 THHW2 1 3 5 THW-LS2 1 3 6 THWN-22 1 3 7 XHHW2 1 3 8 XHHW-22 2 1 1 UF2 2 2 1 RHW2 2 2 2 XHHW2 2 3 1 RHH2 2 3 2 RHW-22 2 3 3 USE-22 2 3 4 XHH2 2 3 5 XHHW2 2 3 6 XHHW-23 1 1 1 FEP3 1 1 2 FEPB
151
3 1 1 3 SF3 1 2 1 FEP3 1 2 2 FEPB3 1 2 3 SF3 2 1 1 PFAH3 2 1 2 TFE3 3 2 1 Z
Modulo de calculo de caliber, corriente e ITM
Se utilizo algunas funciones de Excel que me permiten el control y ubicación de un numero inmediato superior para selección de calibre y primero se extrajo la
corriente a la que debía de trabajar nuestro equipo debido a nuestra carga, voltaje, potencia, numero de fases y para que pudiera trabajar nuestras formulas
152
Figura donde se puede ver cómo funciona nuestra función coincidir anidada en índice para poder extraer el amperaje inmediato superior,
La función coincidir tiene la siguiente sintaxis COINCIDIR(valor_buscado,matriz_buscada, [tipo_de_coincidencia]) la función lo que me hace es devolver un valor que corresponda al tipo de coincidencia que yo desee en una matriz buscada, pero muchas de las veces devolviéndome el valor
de la posición vertical y no el valor y para ello se utiliza la función índice, la cual su sintaxis es la siguiente: INDICE(matriz; núm_fila; [núm_columna]), en este caso
como con la función coincidir ya tenemos el calibre exacto, lo único que procedemos es a encontrar que amperaje es con el el que se esta trabajando para
dar un amperaje inmediato superior.
Ahora para esto antes bien se tuvo que saber de que calibre era nuestro conductor y esto se hizo con la formula de coincidir, pero de otra manera.
153
Fórmula para encontrar el calibre que le corresponde según el amperaje.
Con esta fórmula lo que hacemos es de nuestro amperaje que estamos buscando buscar de todos nuestros amperajes el mayor que le sigue y contabilizarlo de
manera de fila para que nuestra función índice nos retorne que valor es el que le corresponde.
Es necesario invertir las tres tablas para que pueda funcionar nuestra función coincidir y pueda encontrar el mayor de toda la tabla.
Aquí una demostración de cómo quedaron las tablas:
enterrados a 30°C temp. Ambientetamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño
nominal
mm2
60°C 75°C 90°C 60°C 75°C 90°C
AWGKcmil
Tipos Tipos Tipos Tipos Tipos TiposTW* RHW* RHH* UF* RHW* RHW-2
TWD* THHW* RHW-2 XHHW* XHHWCCE THW THHN* BM-AL XHHW-2
TWD-UV THW-LS THHW DRSTHWN* THHW-LSXHHW* THW-2*
TT XHHW*XHHW-2
154
Cobre Cobre Cobre AluminioAluminio
Aluminio
BUSCAR84,7386363
6
COINCIDIR0,26136363
6INDICE
AMPERAJE DE MINIMA DIFERENCIA 85
AMPERAJE INMEDIATO SUPERIOR 85 85 95 85 90 85
#CALIBRE INMEDIATO SUPERIOR 3 4 4 1 2 3
1013,42 560 665 750 470 560 630 2000886,74 545 650 735 455 545 615 1750760,07 520 625 705 435 520 585 1500633,39 495 590 665 405 485 545 1250506,71 455 545 615 375 445 500 1000456,04 435 520 585 355 425 480 900405,37 410 490 555 330 395 450 800380,03 400 475 535 320 385 435 750354,69 385 460 520 310 375 420 700304,02 355 420 475 285 340 385 600253,35 320 380 430 260 310 350 500202,68 280 335 380 225 270 305 400177,34 260 310 350 210 250 280 350152,01 240 285 320 190 230 255 300126,67 215 255 290 170 205 230 250
107,2 195 230 260 150 180 205 4/085,01 165 200 225 130 155 175 3/067,43 145 175 195 115 135 150 2/053,48 125 150 170 100 120 135 1/042,41 110 130 150 85 100 115 133,62 95 115 130 75 90 100 226,67 85 100 110 65 75 85 321,15 70 85 95 55 65 75 4
13,3 55 65 75 40 50 60 6
155
8,367 40 50 55 0 0 0 85,26 30 35 40 0 0 0 10
3,307 25 25 30 0 0 0 122,082 20 20 25 0 0 0 141,307 0 0 18 0 0 0 16
0,8235 0 0 14 0 0 0 18
Al aire libre temp.30°Ctamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño
nominal
mm2
60°C 75°C 90°C 60°C 75°C 90°C
AWGKcmil
Tipos Tipos Tipos Tipos Tipos TiposTW RHW RHH UF RHW RHH
THHW RHW-2 XHHW RHW-2THW THHN USE-2
THW-LS THHW XHHTHWN THW-LS XHHWXHHW THWN-2 XHHW-2
XHHWXHHW-2
Cobre Cobre Cobre Aluminio Aluminio Aluminio
BUSCAR84,738636
4
AMPERAJE DE MINIMA DIFERENCIA 80
AMPERAJE INMEDIATO SUPERIOR 105 145 105 95 100 110
#CALIBRE INMEDIATO SUPERIOR 4 3 6 3 4 4
1013,42 1155 1385 1560 960 1150 1335 2000886,74 1070 1280 1445 875 1050 1185 1750760,07 980 1175 1325 795 950 1075 1500633,39 890 1065 1200 710 855 960 1250506,71 780 935 1055 625 750 845 1000456,04 730 870 985 580 700 785 900
156
405,37 680 812 920 535 645 725 800380,03 655 785 855 515 620 700 750354,69 630 755 855 500 595 675 700304,02 575 690 780 455 540 615 600253,35 515 620 700 405 485 545 500202,68 455 545 615 355 425 480 400177,34 420 505 570 330 395 445 350152,01 375 445 505 290 350 395 300126,67 340 405 455 265 315 355 250
107,2 300 360 405 235 280 315 4/085,01 260 310 350 200 240 275 3/067,43 225 265 300 175 210 235 2/053,48 195 230 260 150 180 205 1/042,41 165 195 220 130 155 175 133,62 140 170 190 110 135 150 226,67 120 145 165 95 115 130 321,15 105 25 140 80 100 110 4
13,3 80 95 105 60 75 80 68,367 60 70 80 0 0 0 8
5,26 40 50 55 0 0 0 103,307 30 35 40 0 0 0 122,082 25 30 35 0 0 0 141,307 0 0 24 0 0 0 16
0,8235 0 0 18 0 0 0 18
0 a 2000v, de 150°C a 250°C en canalización o cablestamaño nominal temperatura nominal del conductor (vease Tabla 310-13) Tamaño nominal
mm2
150°C 200°C 250°C 150°C
AWGKcmil
TIPOS TIPOS TIPOS TIPOFEP FEP PFAH ZFEPB FEPB TFESF SF
COBRE
NIQUEL O NIQUIEL
RECUBIERTO DE COBRE
ALUMINIO
BUSCAR 84,73863636
157
AMPERAJE DE MINIMA DIFERENCIA 76
AMPERAJE INMEDIATO SUPERIOR 96 110 93 94
#CALIBRE INMEDIATO SUPERIOR 6 6 8 4
1013,42 0 0 0 0 2000886,74 0 0 0 0 1750760,07 0 0 0 0 1500633,39 0 0 0 0 1250506,71 0 0 0 0 1000456,04 0 0 0 0 900405,37 0 0 0 0 800380,03 0 0 0 0 750354,69 0 0 0 0 700304,02 0 0 0 0 600253,35 0 0 0 0 500202,68 0 0 0 0 400177,34 0 0 0 0 350152,01 0 0 0 0 300126,67 0 0 0 0 250
107,2 332 346 361 260 4/085,01 288 297 308 227 3/067,43 251 260 273 198 2/053,48 215 229 244 169 1/042,41 186 197 215 145 133,62 160 171 191 124 226,67 143 152 166 109 321,15 120 125 148 94 4
13,3 96 110 117 75 68,367 76 83 93 0 8
5,26 55 60 73 0 103,307 43 45 54 0 122,082 34 36 39 0 141,307 0 0 0 0 16
0,8235 0 0 0 0 18
158
Tema 4.- Alcances posibles.Los alcances posibles a generar en un futuro están en el alcance de la programación. Actualmente existen programas como AutoCAD que ya pueden realizar macros y lograr una conexión entre las macros de Excel y el programa de VBA será de gran utilidad, ya que podremos controlar la instalación de nuestro complejo a desarrollar e ir generando la ficha de cálculo de cableado eléctrico, con la que podemos trazar un programa que nos resuelva toda la instalación en cuestión.
Otro de los alcances que tenemos es la de poder hacer un programa que funcione como simulador mediante la aplicación de ActiveX en la cual se puede generar un entorno gráfico como lo es workbench y otros programas similares.
Tema 5.- obtención de resultados.
La obtención de resultados se puede ver en que el cálculo de calibre de conductores de un circuito que en tiempo de búsqueda del cálculo del conductor y sus varios fenómenos que le afectan. Se tiene un ahorro de tiempo considerable. Ya que solo nos tardamos en meter el tipo de situación en el que está el conductor, mientras que en el otro se tiene que recurrir a la norma y hacer varios procesos matemáticos que vienen incluidos en el programa.
Conclusiones:Para lograr una automatización de un proceso técnico es recomendable contar con varios desarrolladores que tengan conocimientos en VBA Excel para poder lograr una automatización del sistema con un ahorro de tiempo considerable y con función de poka-yoke para el usuario, por lo que se recomienda si es posible:
1.- Dejar un tiempo considerable de investigación sobre la programación de dichas técnicas.
2.-Dejar un tiempo como de unos 3 meses de desarrollo en equipo para hacer el programa lo más fácil posible y rápido.
3.- Dejar un manual sencillo de cómo funciona el programa y un especialista que pueda atender en caso de falló.
Bibliografía:1.-Gustavo Sanchez. (2009). Caracteristicas Generales de Visual Basic . jueves,
26 de marzo de 2009, de blogger.com Sitio web: http://visualbasicv6.blogspot.mx/2009/03/caracteristicas-generales-de-visual.html
2.- Ben Chinowsky. (2009). Macros y el Editor de Visual Basic. 03/03/2016, de Microsoft MSDN Sitio web: https://msdn.microsoft.com/es-es/library/office/ee814737%28v=office.14%29.aspx?
159
f=255&MSPPError=-2147217396#odc_Office14_ta_GettingStartedWithVBAInExcel2010_MacrosAndTheVisualBasicEdit
or
160