Sunteți pe pagina 1din 132

El Visual Basic es un lenguaje fcil de aprender y se lleva muy bien con el Windows. Se pueden hacer programas de gran calidad.

Otros lenguajes como el Visual C, Delphi (PASCAL) son ms potentes, tal vez ms profesionales, pero el Visual Basic es un buen primer paso para empezar a programar. Esto sera un programa en BASIC: INPUT "Escribe tu nombre ..", n$ INPUT "Tu Edad .. " , e IF e >= 18 THEN PRINT n$; " eres mayor de edad" ELSE PRINT n$; " no eres mayor de edad" END ENTRADA "Escribe tu nombre ... ", n$ ENTRADA "Tu Edad .. ", e SI e >= 18 ENTONCES ESCRIBE n$; " eres mayor de edad" SINO ESCRIBE n$; " no eres mayor de edad" FIN

En el CDROM de Windows 98, concretamente en la carpeta TOOLS/OLDMSDOS se encuentra una aplicacin llamada QBASIC, con ella puedes empezar a aprender BASIC. Aqu pongo algunos programas que puedes probar, es interesante trabajar con ellos para luego pasar al Visual Basic. Bajar qbasic.exe (200 K) Bajar ayuda del qbasic qbasic.hlp (140 K) (Debes ponerlo en el mismo directorio)

Ejemplos de programas en QBASIC


Nombre y edad 10 REM ******** Nombre y Edad ******* 20 INPUT "Introduce tu nombre: ", n$ 30 INPUT "Introduce tu edad: ", e 40 IF e >= 18 THEN PRINT n$; " eres mayor de edad" 50 IF e < 18 THEN PRINT n$; " eres menor de edad"

Pitgoras 10 REM ****** Pitagoras ******* 20 PRINT "Teorema de Pitagoras" 30 PRINT 40 INPUT "Introduce un cateto: ", a

50 INPUT "Introduce otro cateto: ", b 60 c = SQR ( a*a + b*b) 70 PRINT "La hipotenusa vale: "; c

Tabla de multiplicar 10 REM ****** Tabla de multiplicar ******* 20 PRINT "Tabla de multiplicar": PRINT: PRINT : PRINT 30 INPUT "Introduce un nmero del 1 al 9 "; k 40 IF k > 9 OR k < 1 THEN GOTO 30 50 FOR n=1 TO 9 60 PRINT n ; " x " ; k; " = "; n*k 70 NEXT n

Condicional 10 INPUT "Introduce un nmero ", x 20 r = x MOD 2 30 IF r = 0 THEN 40 PRINT "El numero introducido es par, porque al dividirlo entre 2, nos da de resto 0" 50 ELSE 60 PRINT "El numero introducido es impar, porque al dividirlo entre 2, nos da de resto 1" 70 END IF Atencin : Si el IF ..... THEN consta de una sola instruccin puede ir as : IF r = 0 THEN PRINT "El numero es par" Pero si consta de varias instrucciones ir as : IF r = 0 THEN PRINT "Numero par" f=f+1 PRINT "Varias lineas" c=2*c END IF Otra formas del IF .... THEN ...... ELSE ...... END IF

IF edad > 18 THEN Print "Eres mayor de edad" ELSE Print "Eres menor de edad" END IF

Ecuacin de Segundo Grado 10 INPUT "Coeficiente a "; a 20 INPUT "Coeficiente b "; b 30 INPUT "Coeficiente c "; c 40 REM ***** Vamos a realizar el b*b - 4 * a * c 50 r = b*b - 4 * a * c 60 REM ****** Se r es negativo no se puede realizar la raz. 70 IF r < 0 THEN PRINT "Nmero imaginario, no se puede realizar la raz.": GOTO 150 80 REM ******* Es posible realizar la raz ****** 90 t = SQR (r) 100 x1 = (- b - t) / (2 * a) 110 x2 = (- b + t)/ (2 * a) 120 REM ****** Soluciones ******** 130 PRINT "Las soluciones son: "; x1; " y "; x2 150 END

Area y longitud 10 REM **** rea y longitud del crculo 20 INPUT "Introduce el dimetro de una circunferencia "; d 30 r = d/2 40 a = 3.1416 * r * r 50 l = 2 * 3.1416 * r 60 PRINT "El rea vale: "; a 70 PRINT "La longitud vale: "; l

Atencin : Se pueden poner varias instrucciones en una lnea separado por : 30 r = d/2 : a = 3.1416 * r * r : l = 2 * 3.1416 * r : PRINT "Area "; a : PRINT "Longitud " ; l

Pero es menos presentable.

Paralelo 10 REM **** Paralelo de dos resistencias ***** 20 INPUT "Introduce el valor de una resistencia "; R1 30 INPUT "Introduce el valor de otra resistencia "; R2 40 RT = (R1 * R2) / (R1 + R2) 50 PRINT "El paralelo vale "; RT

Descomponer vector 10 REM **** Vector **** 15 CLS 20 PRINT "Dado el mdulo y ngulo de un vector. Hallar su componente horizontal y vertical" 30 INPUT "Introduce el modulo del vector "; m 40 INPUT "Introduce el angulo del vector en grados "; ag 50 REM *** Paso del ngulo a radianes *** 60 ar = 2 * 3.1416 * ag / 360 70 h = m * cos(ar) 80 v = m * sin(ar) 90 PRINT "La componente horizontal vale "; h 100 PRINT "La componente vertical vale "; v Nota: El Seno, Cos y Tangente hay que expresarlo en radianes, por eso hemos pasado de grados a radianes. Para pasar de grados a radianes: rad = 2 * 3.1416 * grad / 360 Para pasar de radianes a grados: grad = rad * 360 / 2 * 3.1416

Adivina 5 CLS 10 REM Adivina 20 RANDOMIZE TIMER

30 x = INT(1 + RND * 100) 40 INPUT "Introduce numero (1 -100)"; n 45 inten = inten + 1 50 IF x = n THEN GOTO 80 60 IF x < n THEN PRINT "Mi numero es menor": GOTO 40 70 IF x > n THEN PRINT "Mi numero es mayor": GOTO 40 80 REM ACERTO 90 PRINT "Efectivamente, el numero era "; x 100 PRINT "Has acertado de "; inten; " intentos."

Media aritmtica VAL(n$) convierte una cadena alfanumrica de caracteres nmericos en nmeros. VAL("23") lo convierte al nmero 23 PRINT "Calculo de la media de varios numeros" otro: INPUT "Introduce un numero ( s ..... Salir) ", n$ IF n$ = "s" OR n$="S" GOTO calculo t = t + VAL(n$) c=c+1 GOTO otro calculo: r=t/c PRINT "La media vale : "; r

Divisores de un nmero 10 REM Divisores de un numero 20 CLS 30 PRINT "Vamos a mostrar los divisores de un numero" 40 INPUT "Introduce un numero del 1 al 1000 "; x 50 IF x < 1 OR x > 1000 GOTO 40 60 FOR n = 1 TO x 70 r = x MOD n 80 IF r = 0 THEN PRINT n 90 NEXT n

Escribir y leer archivo

10 OPEN "A" , #1, "C:\borra.txt" aadir 20 INPUT "Nombre ", n$ 30 INPUT "Edad ", e$ 40 WRITE #1, n$, e$ 50 CLOSE #1

------------> Abre el archivo para escribir-

-------------> Escribe en el archivo

55 OPEN "I", #1, "C:\borra.txt" 60 FOR n = 1 TO 20 70 IF EOF(1) GOTO 200 80 INPUT #1, a$, b$ 90 PRINT a$, b$ 100 NEXT n 200 CLOSE #1 210 END

---------------> Abre el archivo para leerlo

----------------> Lee el archivo

OPEN "O" para escribir-machacar en el archivo (Se escribe con WRITE #1)(o PRINT #1) OPEN "A" para escribir-aadir en el archivo (Se escribe con WRITE #1)( o PRINT #1) OPEN "I" para leer el archivo (Se lee con INPUT #1) EOF (End Of File) SI findearchivo VE A 200

Quiniela 1 1 2 1 3 1 4 X 5 X 6 2

Vamos a realizar una quiniela. Suponemos que tenemos un dado con sus seis caras (1,2,3,4,5,6). Lo lanzamos. Si sale la cara 1, 2 o 3 (o sea, CASO que SEA menos de 4) ponemos un "1". Si sale la cara 6 ponemos un "2" (o sea, CASO sea 6) . Si sale la cara 4 o 5 ponemos una "X" (o sea, en OTRO CASO). CLS RANDOMIZE TIMER FOR n = 1 TO 15 g = INT(RND * 6) + 1 SELECT CASE g CASE IS < 4

PRINT "1" CASE 6 PRINT "2" CASE ELSE PRINT "X" END SELECT NEXT n

Primitiva Creamos una tabla con 6 elementos (en realidad 7 porque el 0 tambin cuenta) DIM a(6) Sacamos un nmero del 1 al 49. Comprobamos si el nmero obtenido se encuentra en la tabla. Si es as, saca otro nmero. Si no est en la tabla lo guarda en su lugar correspondiente (n). Y lo escribe en pantalla. Esto lo hacemos para evitar que se repita el nmero sacado. DIM a(6) RANDOMIZE TIMER FOR n = 1 TO 6 saca: g = INT(RND * 49) + 1 FOR k = 1 TO 6 IF a(k) = g THEN GOTO saca NEXT k a(n) = g PRINT g; "-"; NEXT n El bucle FOR k ..... comprueba si en algunos de los seis elementos de la tabla est el nmero que acaba de salir (g) . Si ahora sale el 8 otra vez, se comprueba que ese nmero ya existe en la tabla con lo cual vuelve para atrs a sacar otro nmero mediante IF a(3) = 8 THEN GOTO saca.

a(k)

a(1) a(2) a(3)

24 31 8

a(4) a(5) a(6)

15 En caso que el nmero no est repetido lo almacena en el siguiente lugar de la tabla a(n) = g

Al revs INPUT "Escribe tu Nombre ", a$ FOR n = LEN(a$) TO 1 STEP -1 b$ = MID$(a$, n, 1) PRINT b$; "-"; SLEEP 2 : REM pausa 2 segundos NEXT n (Nota : Esta funcin en VB es StrReverse("asd"))

Mueve un caracter por la pantalla. El punto debe encontrarse con el 0. CLS x = 10: y = 10 10 FOR n = 1 TO 20 CLS a = INT(RND * 80) + 1 b = INT(RND * 20) + 1 LOCATE b, a PRINT "0" FOR t = 1 TO 50000 t$ = INKEY$ IF t$ = "a" THEN y = y -1 : IF y < 1 THEN y = 1 IF t$ = "z" THEN y = y +1 : IF y > 20 THEN y = 20 IF t$ = "," THEN x= x-1 : IF x < 1 THEN x= 1 IF t$ = "." THEN x = x + 1 : IF x > 80 THEN x= 80 IF t$ ="q" THEN END LOCATE y, x PRINT "." IF x = a AND y = b THEN PRINT " PUM !!!": FOR j = 1 TO 40000: NEXT j: GOTO 10 PRINT "."

NEXT t NEXT n

Crear directorio y listados REM Crear un directorio MKDIR "C:\EJEMPLO" REM Cambiar a un directorio CHDIR "C:\WINDOWS" REM Listado de archivos (DIR) FILES

Colores SCREEN 7 FOR n = 1 TO 15 COLOR n PRINT n NEXT n

En caso de un error en el programa va a la etiqueta mal, imprime un mensaje y continua con la siguiente instruccin (RESUME NEXT) CLS ON ERROR GOTO mal x = -3 b = SQR(x) c=2*x PRINT c END mal: PRINT "Ocurrio un error" RESUME NEXT

Para poder utilizar rdenes del DOS

SHELL "DIR" SHELL "COPY C:\autoexec.bat C:\borra.txt" SHELL "TYPE C:\autoexec.bat"

Bola.bas Crculo que se mueve por la pantalla.

Capital Hacemos una imposicin en un Banco de un Capital C, a un inters anual i, durante 9 aos. Calculemos los capitales resultantes en cada ao. (El cdigo del acento circunflejo ^ , es ALT 94, es el signo de exponente) CLS INPUT "Capital ", c INPUT "Interes ", i i = i / 100 FOR n = 1 TO 9 t=c*(1+i)^n PRINT "Ao "; n ; " .... "; : PRINT USING "###,###,###"; CLNG(t) NEXT n

Hacer Mientras c$ sea distinto de pedro PRINT "Estaras en el bucle hasta que escribas la palabra -pedro-" c$ = "" DO WHILE c$ <> "pedro" INPUT "Introduce la clave ", c$ LOOP PRINT "Muy bien, escribistes -pedro- y salistes del bucle"

Hacer Bucle Mientras f > 0

PRINT "Te pide un numero y te escribe los 12 siguientes" INPUT "Introduce un numero ", n f = 12 DO WHILE f > 0 n=n+1 PRINT n f=f-1 LOOP

Ecuacin de la recta 10 REM *** Ecuacion de la recta **** 20 PRINT "Sabemos que una recta pasa por dos puntos" 30 PRINT "Si nos dan dos puntos (x1,y1) (x2,y2) podemos deducir la ecuacin de la recta" 40 PRINT 50 PRINT "Vamos a introducir las componentes (x,y) de un punto." 60 INPUT "Introduce x1 "; x1 70 INPUT "Introduce y1"; y1 80 PRINT "Ahora vamos a introducir las componentes (x,y) del otro punto." 90 INPUT "Introduce x2 "; x2 100 INPUT "Introduce y2"; y2 110 REM ****** Calculos ****** 115 REM Ecuacion de la recta (x-x1)/(x2-x1)=(y-y1)/(y2-y1) 120 m = (y2-y1)/(x2-x1) 130 PRINT "La ecuacion de la recta que pasa por ("; x1;",";y1;")";" y (";x2;",";y2;") es =" 140 PRINT "Y = "; m; " * X + " ; y1 - x1*m

Alterna. Clculo de un circuito RLC 10 REM Circuito serie RLC 15 CLS 20 PRINT "Tenemos un circuito serie RLC, al cual se le aplica una tension V de frecuencia f" 30 PRINT "Calcular Xl, Xc, Z en polar y binomial, I, Vr, Vl, Vc y frecuencia de resonancia del circuito" 40 REM DATOS 50 INPUT "Valor de la Resistencia en ohmios"; r 60 INPUT "Valor de la Bobina en mili Henrios "; l 70 INPUT "Valor del Condensador en micro Faradios "; c 80 INPUT "Valor de pico de la tension "; v

90 INPUT "Frecuencia "; f 100 REM CALCULOS 110 Xl = 2 * 3.1416 * f * l * .001 120 PRINT "El valor de Xl es de "; Xl 130 Xc = 1 / (2 * 3.1416 * f * c * .000001) 140 PRINT "El valor de Xc es de "; Xc 150 x = Xl - Xc 160 PRINT "La Z en binomial "; r; "+"; x; "j" 170 z = SQR(r * r + x * x) 180 ar = ATN(x / r) 185 REM ar esta en radianes, se pasa a grados 190 ag = ar * 360 / 6.28 200 PRINT "La Z en polar vale "; z; 210 PRINT " y su angulo "; ag 220 i = v / z 230 alfa = 0 - ag 240 PRINT "La intensidad vale "; i; " y su angulo de desfase "; alfa 250 Vr = r * i 260 PRINT "La Vr vale "; Vr; " y su angulo de desfase "; alfa 270 Vl = Xl * i 280 al = 90 + alfa 290 PRINT "La Vl vale "; Vl; " y su angulo de desfase "; al 300 Vc = Xc * i 310 ac = -90 + alfa 320 PRINT "La Vc vale "; Vc; " y su angulo de desfase "; ac 330 fr = 1 / (2 * 3.1416 * SQR(l * .001 * c * .000001)) 340 PRINT "La frecuencia de resonancia del circuito es "; fr; " Hz."

Compilacin

.BAS ---------> .EXE

Si has realizado los programas anteriores observars que el cdigo fuente, o sea, el programa en textos se guarda como un archivo .BAS . Y que para ejecutarlo hace falta entrar en el QBASIC y luego Ejecutar el programa. Ahora vamos a COMPILAR el archivo .BAS, es decir a convertirlo en .EXE, para que no haga falta tener que entrar en el QBASIC para ejecutarlo. Para ello vamos a utilizar un Compilador llamado FIRSTBAS de PowerBASIC.

Bajar FIRSTBAS o bien desde aqu: Bajar FIRSTBAS.ZIP

Te lo bajars comprimido .ZIP, cuando lo descomprimas ejecuta FIRSTBAS.EXE. 1.- Mediante Load y Directory localiza el archivo.BAS que quieres compilar. 2.- Cuando lo tengas ve a Compile, saldr un desplegable. 3.- Elige Destination.... EXE file, mrcalo. 4.- Luego marca Compile (o pulsa Alt -F9). Tu archivo.BAS habr creado otro archivo llamado archivo.EXE que ser ejecutable. El men se activa mediante la tecla <Alt> y una letra (F, E, R, C)

Algunas funciones ABS( ) Valor absoluto PRINT ABS (-3) ...................................................... 3 ASC ( ) Valor numrico del cdigo ASCII PRINT ASC("A") .....................................................65 CHR ( ) Convierte un nmero a caracter ASCII PRINT CHR(97) .......................................................a STR( ) Convierte un nmero a caracter a$ = STR(23) VAL ( ) Convierte caracter a nmero X = VAL("345") ATN ( ) Arco Tangente SIN ( ) Seno COS ( ) Coseno El argumento debe estar en radianes. Para pasar grados a radianes rad = grad * 2 * 3.1416 / 360 CLS Borra pantalla

LEN (a$ ) Longitud de una cadena caracter a$ = "Visual Basic es un lenguaje de Programacion" PRINT LEN(a$) ........................................................43 LEFT(a$,4 ) Devuelve los 4 caracteres de la izquierda a$ = "Visual Basic es un lenguaje de Programacion" PRINT LEFT (a$,4) .................................................Visu RIGHT(a$,4 ) Devuelve los 4 caracteres de la derecha a$ = "Visual Basic es un lenguaje de Programacion" PRINT RIGHT (a$,4) .................................................cion MID(a$,8,4) Devuelve 4 caracteres a partir del octavo a$ = "Visual Basic es un lenguaje de Programacion" PRINT MID (a$,8,4) .................................................Basi PSET (x,y) Dibuja un punto TIMER Nmero de segundos que han pasado desde medianoche PRINT TIMER .................................................. 45675

Bucle FOR NEXT


FOR n = 1 TO 10 Print n Next n

FOR n = 1 TO 12 PRINT n * 2 Next n

FOR n = 1 TO 18 STEP 2 PRINT n Next n

FOR n = 20 TO 1 STEP -3 PRINT n

Next n

a = 2 FOR n = 1 TO 10 PRINT a * n Next n

FOR n = 20 TO 30 PRINT n; "........"; Next n

2 * n

Bucles anidados FOR n=1 TO 9 FOR a=1 TO 9 PRINT n * a NEXT a PRINT NEXT n

El BASIC era un lenguaje en modo texto apropiado para MSDOS. Cuando evolucionaron los sistemas operativos a modo ventana, como Windows, el BASIC tambin cambi y se convirti en Visual Basic. Su programacin y uso es en modo ventana, de tal manera que los programas realizados son como los que utilizamos normalmente en Windows.

VISUAL BASIC

<0 >

<1 >

<2 >

<3 >

<4 >

<5 >

<6 >

<7 >

<8 >

<9 >

<10 >

<11 >

<12 >

<13 >

<14 >

Variables numricas y alfanumricas a = 4564 temp = 32.5 b$ = "Yo soy una variable alfanumerica" (STRING) n$ = "34" : REM El "34" es alfanumrico (STRING) n = 34 : REM El 34 es numrico En VB no es necesario declarar las variables, sin embargo es una buena prctica el declararlas. Si al principio del Programa ponemos Option Explicit, nos obligamos a declarar todas las variables que vamos a utilizar. Declarar una variable significa darla a conocer antes de utilizarla. Las variables se declaran al principio del programa o de una subrutina mediante: DIM

DIM a, temp, b$ Hay diversos tipos de variables INTEGER, LONG, CURRENCY, STRING Tambin podemos declarar las variables diciendo de qu tipo es: DIM a AS INTEGER DIM temp AS LONG DIM b$ AS STRING DIM euro AS CURRENCY Si no decimos de qu tipo es, se le asigna el tipo VARIANT que puede ser numrica o alfanumrica segn convenga. Una tabla o matriz es un conjunto de variables que tienen el mismo nombre pero distinto subndice :

DIM a(7) Crea stos elementos : a(0), a(1), a(2), a(3), a(4), a(5), a(6), a(7) mbito de las variables Una variable es vlida solo en el sitio en el que se declara. Para que una variable sea reconocible por las Subrutinas de un formulario, hay que declararla al principio.(General) Private Sub rutina1() a = 1234 PRINT a * 2 End Sub Private Sub rutina2() PRINT a * 3 End Sub En ste caso la variable "a" vale 1234 y al poner PRINT a * 2 me escribir 2468

En la subrutina2 se quiere imprimir a * 3, pero la variable no es la "a" anterior porque est en otra subrutina, luego se escribir un 0 o se indicar un error.

DIM a Private Sub rutina1() a = 1234 PRINT a * 2 End Sub Private Sub rutina2() PRINT a * 3 End Sub Ahora la subrutina2 escribir a * 3 , 3702, porque reconoce a la variable "a", ya que est declarada al principio. Es decir, la "a" la reconocen todas las subrutinas.

Cmo poner los controles. 1.- Abre un nuevo Proyecto: Archivo/Nuevo Proyecto/ EXE estndar

2.- En la parte izquierda vemos los controles u objetos, en el centro est el Formulario (Form) y a la derecha el explorador de proyectos y las Propiedades. Las dems ventanas las puedes eliminar. Si quieres volver a ver algunas pulsa Ver.

3.- sta es la ventana de Cdigos. Aqu escribiremos el programa:

4.- Con estos iconos podemos pasar de la ventana del Formulario a la ventana de Cdigos

5.- Para poner un Control pulsa sobre ese Control.

6.- Suelta y ve al formulario. Pulsa sobre un punto del formulario y, sin soltar el botn izquierdo, arrstralo.

Sabemos que un Control tiene Propiedades aqu ponemos algunas.

Botn :
Calcula.Enabled = False (Nombre) Calcula Caption Pulsame Font Tipo de letra BackColor Color Style Graphic Visible True Enabled True ToolTipText Ayudita Picture Grfico DownPictur Grficoe Pulsado

Textbox :
Text1.Text = "Hola" X = VAL(Text2.Text) (Nombre) Text Alignement Font Multiline Visible Scrollbar Locked MaxLength Casilla Right Tipo de letra True True En caso de multiline Modificable o no Max. Longitud

Passwordcha ********* r ToolTipText Ayudita

Etiqueta :
Label1.Caption ="Mircoles" Caption Textos

Scroll :
X = HScroll1.Value Max Valor Mximo Min Valor Mnimo Value Valor

Picture :
Picture1.Picture = LoadPicture ("C:\Dado\dado3.bmp") Picture Localizacin de la Imagen La Imagen se carga en tiempo de ejecucin mediante Picture1.Picture = LoadPicture("C:\Dado\dado3.bmp") Timer : Timer1.Interval = 2000 Interval Tiempo en milisegundos

Check :
IF Check1.Value = 0 THEN res = 1234 Value 1o0

Option :

IF Option1.Value = True THEN r = "abc" Value True o False

Si durante la ejecucin del programa queremos cambiar una propiedad pondramos : Control.Propiedad Calcula.Caption = "Plsame" Calcula.Visible = False Casilla.Text = "1234" Casilla.Visible = True Text1.Text = 23.45 Label1.Caption = "Jueves" IF HScroll1.Value = 12 THEN Boton1.Enabled = False X = VAL(Text2.Text) * 345 El formulario tambin tiene Propiedades

Formulario
BorderStyle Caption Icon BackColor MaxButton MinButton Moveable Picture Redimensionable o no. Con Ttulo o no. Ttulo del Formulario Icono Color de fondo Maximizar Minimizar Formulario movible o no. Dibujo de fondo

Private Sub Calcula_Click ( ) a = VAL(Casilla.text) doble = 2* a

End Sub Fjate lo que hay en Casilla.text, o sea el "1234" NO es un nmero, sino los caracteres "1", "2", "3" y "4". Para convertilos al nmero 1234 ponemos VAL(Casilla.text), VAL convierte carcteres a nmero. En principio NO podemos multiplicar los caracteres "1234" por el nmero 2, o sea, no podemos hacer : doble = 2 * "1234" Dara un error .......... En fin ...... de todos modos ..... el Visual Basic es tan permisivo que lo permite... : Conversin implcita de variables Si tenemos una variable de un tipo y la operamos con otra variable de otro tipo, el resultado depende de los tipos y de la operacin realizada. Numeric = 22222 Alfanume = "4" x = Numeric * Alfanume. Nos dar 88888, es decir, ha realizado una multiplicacin de un nmero. Ha convertido automticamente la variabla Alfanume a una variable numrica para realizar la operacin. Tambin se puede convertir una variable alfanumrica a numrica mediante VAL a=4 b$ = "33" c = VAL(b$) d=a+c Incluso podemos poner : Text2.Text = Text1.Text * 234 / 567 Probar tambin c = CDbl(b$)

PROYECTOS
En sta y las siguientes pginas te presento unos 50 proyectos de Visual Basic. En ste archivo los he puesto comprimidos. Aunque te recomiendo que escribas cada uno y que leas los comentarios:

todoslosproyectos.zip
(lo pondr pronto, por ahora me lo puedes pedir por correos)

1.- Controles : Botones y Cajas de Textos

Private Sub Azul_Click() Text1.Text = "Soy Azul" End Sub Private Sub Rojo_Click() Text2.Text = "Soy Rojo" End Sub Private Sub Borra_Click() Text1.Text = "" Text2.Text = "" End Sub

2.- Etiquetas, Cajas de textos y botn

Explica qu hace este Proyecto : Qu hace la Propiedad: Alignement en un Textbox?

Private Sub Calcula_Click() r = Val(Text1.Text) l = 2 * 3.1416 * r a = 3.1416 * r * r Text2.Text = l Text3Text = a End Sub

3.- Frames, Etiquetas, Cajas de textos y Botn. En los Textbox poner : Alignement = Right Text = Font= Negrita, 12

Private Sub Calcula_Click() C = Val(Text1.Text) i = Val(Text2.Text) / 100 a = Val(Text3.Text) T = C * (1 + i) ^ a Text4.Text = T End Sub

Un EVENTO es algo que puede suceder como : Click, MouseMove, Change, Load En el Proyecto anterior cambia el evento Click ( ) a MouseMove, ahora el programa se ejecutar cuando muevas el ratn sobre el botn sin necesidad de pulsar. La Sub rutina Calcula_MouseMove se ejecuta cuando se mueve el ratn sobre el botn.

Vamos a modificar el Proyecto. Cortemos lo que hay dentro del Calcula_MouseMove y Copimoslo dentro de la

Subrutina del Text3_Change. Qu ocurre ahora? Pues que los clculos se realizarn cuando Change el Text3, o sea, cuando Cambie el valor del Text3
Private Sub Calcula_Click() End Sub Private Sub Text3_Change() C = Val(Text1.Text) i = Val(Text2.Text) / 100 a = Val(Text3.Text) T = C * (1 + i) ^ a Text4.Text = T End Sub

4.- Control : HScroll (Al Moverlo cambia el Value)


' Poner HScroll1 Max=255 ' Poner HScroll1 Min=32 Private Sub HScroll1_Change() C = HScroll1.Value Text1.Text = C Text2.Text = Chr$(C) End Sub

5.- Control : VScroll

Private Sub VScroll1_Change() cent = Val(VScroll1.Value ) fahr = 32 + 1.8 * cent txtCent = cent txtFahr = fahr End Sub

Propiedades de VScroll1 Max = 100 Min = -100

6.- Colores A los controles se les pone nombres identificativos, por ejemplo en vez de poner HScroll1 se le llama hsrR. HScroll1 hsrR Text1 txtR Label4 lblR HScroll2 hsrV Text2 txtV Label5 lblV HScroll3 hsrA Text3 txtA Label6 lblA Text4 txtCarta Label7 lblSuma En las Propiedades de cada HScroll debes poner: Max = 255 Min = 1

Dim x, y, z Private Sub hsrR_Change() x = Val(hsrR.Value) txtR.Text = x lblR.BackColor = RGB(x, 0, 0) lblsuma.BackColor = RGB(x, y, z) txtCarta.ForeColor = RGB(x, y, z) End Sub Private Sub hsrV_Change() y = Val(hsrV.Value) txtV.Text = y lblV.BackColor = RGB(0, y, 0) lblsuma.BackColor = RGB(x, y, z) txtCarta.ForeColor = RGB(x, y, z) End Sub Private Sub hsrA_Change() z = Val(hsrA.Value) txtA.Text = z lblA.BackColor = RGB(0, 0, z) lblsuma.BackColor = RGB(x, y, z) txtCarta.ForeColor = RGB(x, y, z) End Sub

7.- Controles : Label, Scroll, Line y Shape

El VScroll1 en Propiedades : Max = 12 Min = 1 El VScroll2 en Propiedades : Max = 300 Min = 1


Dim r, v, i As Currency

El dibujo del Private Sub vsrR_Change() circuito est r = Val(vsrR.Value) realizado Label6.Caption = r i = v / r mediante Label4.Caption = i Shape y End Sub Line Mover primero el scroll de la resistencia.
Private Sub vsrV_Change() v = Val(vsrV.Value) Label5.Caption = v i = v / r Label4.Caption = i End Sub

8.- Controles : Check y Option

En las Propiedades del Text1 Poner Multiline=Tru e


Dim beb, com Private Sub Command1_Click() com = "" If Check1.Value = 1 Then com = "Ensalada," If Check2.Value = 1 Then com = com & "Carne," vbCrLf es para If Check3.Value = 1 Then com = com & "Pescado," cambiar de If Check4.Value = 1 Then com = com & lnea en el "Fruta." casillero Text1 Text1.Text = "De comidas: " & com & vbCrLf & _ Tambin se puede poner " y de bebida: " & beb End Sub

Chr(13) & Chr(10)

El guin _ es para cambiar Private Sub Option2_Click() de lnea en el beb = "Vino." cdigo. End Sub
Private Sub Option3_Click() beb = "Cerveza." End Sub

Private Sub Option1_Click() beb = "Agua." End Sub

9.- Control : Combo (Lista desplegable)

En la Propieda d List del Combo1, poner la lista de nombres Fjate que Private Sub Combo1_Click() el evento Text1.Text = Combo1 es Click End Sub

10.- Controles : Drive, Dir, File e Image Poner: un Drive un Dir un File un Image En Propiedades del File poner : Pattern=*.bmp ; *.gif; *.jpg En Propiedades del Image poner : Strech = True

Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub File1_Click() Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName) End Sub

Hacerlos ejecutables.exe
Una vez que has realizado algunos programas en VB, habrs observado que los archivos se guardan con extensin .vbp y .frm. Por cierto, si quieres guardar el proyecto entero en otra carpeta debes guardar los dos archivos: Archivo/Guardar proyecto como .............................. juego.vbp Archivo/Guardar juego.frm como ............................. juego.frm Propiedades: Enabled, Visible y BackColor.

Private Sub cmdverde_Click() cmdrojo.Visible = False End Sub Private Sub cmdrojo_Click() cmdverde.Visible = False End Sub Private Sub cmdseven_Click() cmdrojo.Visible = True cmdverde.Visible = True End Sub Private Sub cmdfondo_Click() Form1.BackColor = QBColor(Rnd * 9) End Sub Private Sub cmdsifun_Click() cmdrojo.Enabled = True cmdverde.Enabled = True cmdseven.Enabled = True cmdfondo.Enabled = True End Sub Private Sub cmdnofun_Click() cmdrojo.Enabled = False cmdverde.Enabled = False cmdseven.Enabled = False cmdfondo.Enabled = False End Sub

12.- Calculadora
Dim x as Currency Dim y as Currency Dim c as Currency

Private Sub Borrar_Click() Text1.Text = "" Text2.Text = "" Text2.Text = "" End Sub Private Sub Coseno_Click() On Error Resume Next x = Val(Text1.Text) xr = x * 2 * 3.1416 / 360 c = Cos(xr) Text3.Text = c End Sub Private Sub Cuadrado_Click() On Error Resume Next x = Val(Text1.Text) c = x * x Text3.Text = c End Sub Private Sub Divide_Click() On Error Resume Next x = Val(Text1.Text) y = Val(Text2.Text) c = x / y Text3.Text = c End Sub Private Sub Elevado_Click() On Error Resume Next

Alinear el contenido de los TextBox a la derecha. Quitar su contenido en Propiedades Text = On Error Resume Next significa que en caso de error, divisin por cero, valores alfanumricos, etc,.. no salga ningn mensaje de error que interrumpa el programa, sino que contine con la siguiente instruccin. Subir lo que hace es poner el contenido del Text3 en el Text1 Los ngulo se pasan a radianes. Dim x as Currency

x = Val(Text1.Text) y = Val(Text2.Text) c = x ^ y Text3.Text = c End Sub Private Sub Euro_Click() On Error Resume Next x = Val(Text1.Text) c = x / 166.386 Text3.Text = c End Sub Private Sub Inverso_Click() On Error Resume Next x = Val(Text1.Text) c = 1 / x Text3.Text = c End Sub Private Sub Multipli_Click() On Error Resume Next x = Val(Text1.Text) y = Val(Text2.Text) c = x * y Text3.Text = c End Sub Private Sub Peseta_Click() On Error Resume Next x = Val(Text1.Text) c = x * 166.386 Text3.Text = c End Sub Private Sub Pitagoras_Click( ) On Error Resume Next

Currency son variables de tipo monedas. Si x fuese una variable Single y hacemos: 2/140 saldr 1,42857142857143E-02 Si x es de tipo Currency: 2/140 = 0,0143

x = Val(Text1.Text) y = Val(Text2.Text) c = Sqr(x * x + y * y) Text3.Text = c End Sub Private Sub Raiz_Click() On Error Resume Next x = Val(Text1.Text) c = Sqr(x) Text3.Text = c End Sub Private Sub Resta_Click() On Error Resume Next x = Val(Text1.Text) y = Val(Text2.Text) c = x - y Text3.Text = c End Sub Private Sub Seno_Click() On Error Resume Next x = Val(Text1.Text) xr = x * 2 * 3.1416 / 360 c = Sin(xr) Text3.Text = c End Sub Private Sub Subir_Click() Text1.Text = Text3.Text End Sub Private Sub Suma_Click() On Error Resume Next x = Val(Text1.Text) y =

Val(Text2.Text) c = x + y Text3.Text = c End Sub Private Sub Tangente_Click() On Error Resume Next x = Val(Text1.Text) xr = x * 2 * 3.1416 / 360 c = Tan(xr) Text3.Text = c End Sub

13.- Clculo del NIF

Private Sub cmdCalcula_Click() a$ = "TRWAGMYFPDXBNJZSQVHLCKEI " x = Val(txtdni.Text) n = (x Mod 23) + 1 letra = Mid$(a$, n, 1) txtNif.Text = x & "-" & letra End Sub

14.- Enviar archivo (Copiar archivo)

Ponemos la direccin absoluta de un fichero existente en nuestro disco duro. Lo enviamos o al directorio C:\Segur de nuestro disco duro, o a la carpeta Private Sub Command1_Click() Envio del a = Text1.Text Eqp20 de la x = Timer z = Int(Val(x)) red, o a b = "C:\Segur\" & z ambos c = "\\eqp20\envio\" & z lugares. La carpeta Envio debe estar compartida .
If Check1.Value = 1 Then FileCopy a, b If Check2.Value = 1 Then FileCopy a, c End Sub

Al fichero destino le cambiamos el nombre, le ponemos el Timer, o sea, el nmero de segundos que han pasado desde la media noche. Esto lo hacemos para no recibir archivos con el mismo nombre. Timer = segundos transcurridos desde la media noche. \\eqp20\envio = Carpeta envio, que se encuentra en el eqp20 de la red

15.- Mandar Texto

Se trata de escribir un texto y pulsar el botn Enviar para mandarlo a un Equipo de Red. El contenido del Text1 se debe guardar en el archivo C:\borra.txt de tu disco duro (Machacando si ya hubiera otro texto) Adems se debe enviar a la carpeta compartida envio situada en un ordenador de red llamado eqp20 (\\eqp20\envio\) El archivo enviado debe tener como nombre el Timer, o sea, la hora actual en segundos. Para ello "cogemos" la hora actual x = Timer, que es cadena de caracteres. Lo pasamos a nmero (VAL) y tomamos la parte entera (INT) El valor z ser el

Private Sub Command1_Click() Open "C:\borra.txt" For Output As #1 Write #1, Text1.Text Close #1 x z c ' = = = c Timer Int(Val(x)) "\\eqp20\envio\" & z = "C:\" & z (Si no tienes red)

FileCopy "C:\borra.txt", c End Sub

nombre del archivo que enviemos. Operaciones con archivos El Text1 debe En vez de tener en Write #1, Text1.Text Propiedades : Escribe Print #1, Text1.Text Multiline = True ScrollBar = Vertical

16.- Dado

Poner un botn y un PictureBox (pctdado) Bjate el archivo comprimido dado.zip en donde encontrars los dibujos del dado. Descomprmelo en la carpeta C:\Dado

Cuando Pulsas sale la cara de un dado.

Private Sub cmdPulsa_Click() Randomize Timer X = Int(6 * Rnd) + 1 Select Case X Case 1 pctdado.Picture = LoadPicture("C:\Dado\dado1.bmp") Case 2 pctdado.Picture = LoadPicture("C:\Dado\dado2.bmp") Case 3 pctdado.Picture = LoadPicture("C:\Dado\dado3.bmp")

Case 4 pctdado.Picture = LoadPicture("C:\Dado\dado4.bmp") Case 5 pctdado.Picture = LoadPicture("C:\Dado\dado5.bmp") Case 6 pctdado.Picture = LoadPicture("C:\Dado\dado6.bmp") End Select End Sub

Cuando la lnea de cdigo es muy larga, la podemos continuar en la lnea siguiente poniendo un guin _ Ejemplo : If x = num Then txtrespuesta.Text = "Acertaste de " & n & " intentos.": cmdes.Enabled = False La podemos escribir as, en dos lneas : If x = num Then txtrespuesta.Text = "Acertaste de " & n & _ " intentos.": cmdes.Enabled = False 17.- Adivina

El guin _ es para un cambio de lnea en el cdigo fuente.

Fjate en la Propiedad Enabled, Private Sub Command1_Click() se utiliza para anular Randomize Timer el botn. x = Int(Rnd * 100)
n = 0 cmdes.Enabled = True End Sub Private Sub Form_Load() cmdes.Enabled = False End Sub

Dim num, x, n Private Sub cmdes_Click() n = n + 1 num = Val(txtnum.Text) If x < num Then txtrespuesta.Text = "Mi nmero es menor." If x > num Then txtrespuesta.Text = "Mi nmero es mayor." If x = num Then txtrespuesta.Text = "Acertaste de " & n & _ " intentos.": cmdes.Enabled = False End Sub

18.- Dibujar

Trazo libre de dibujo

Poner dos optionButton (optrojo)(optnegro)


Dim dibujar As Boolean Private Sub Command1_Click() Cls End Sub Private Sub Form_MouseDown(Button As Integer, Shift As Integer,_ X As Single, Y As Single) dibujar = True End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If optrojo = True Then Form1.ForeColor = vbRed If optnegro = True Then Form1.ForeColor = vbBlack If dibujar Then Line -(X, Y) End Sub Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) dibujar = False End Sub

19.- Ecuacin
Dim a As Currency Dim b As Currency Dim c As Currency

Resolucin de una ecuacin de 2 grado

Private Sub cmdCalcula_Click() txtnegativo.Visibl e = False a = Val(txta.Text) b = Val(txtb.Text) c = Val(txtc.Text) r = b * b - 4 * a * c If r < 0 Then txtx1.Text = "" txtx2.Text = "" txtnegativo.Visibl e = True Else ra = Sqr(r) X1 = (-b + ra) / (2 * a) X2 = (-b - ra) / (2 * a) txtx1.Text = X1 txtx2.Text = X2 End If End Sub Private Sub Form_Load() txtnegativo.Visibl e = False End Sub

20.- Papelillos

Private Sub Form_Load() Form.WindowState=2 ' Pantalla completa Form.BorderStyle=0 ' Sin barra de Titulos Timer1.Interval = 1 ' Pone intervalo DrawWidth = 8 ' Grosor del punto If App.PrevInstance Then Unload Me End Sub

Private Sub Timer1_Timer() Randomize Timer() X = Rnd * 12000 Y = Rnd * 9000 C = Rnd * 15 PSet (X, Y), QBColor(C) End Sub Private Sub Form_Click() Unload Me ' Cuando pulsa sobre el Formulario se descarga End Sub

21.- Resistencias

Hay una etiqueta sobre cada resistencia : lblR1, lblR2 y lblR3 Se ha realizado de dos formas: En la parte izquierda se efectan los Calculos en cada Subrutina del Scroll. En la parte derecha he creado una Subrutina llamada Calculos y la llamo cada vez que se realiza un Scroll. Estdia las dos formas.
Dim Rt As Currency Dim Rt As Currency Private Sub hscR1_Change() lblR1.Caption = hscR1.Value R1 = Val(hscR1.Value) R2 = Val(hscR2.Value) R3 = Val(hscR3.Value) Rp = (R2 * R3) / (R2 + R3) lblRp.Caption = Rp Rt = R1 + Rp lblRt.Caption = Rt End Sub Private Sub hscR2_Change() lblR2.Caption = hscR2.Value R1 = Val(hscR1.Value) R2 = Val(hscR2.Value) R3 = Val(hscR3.Value) Rp = (R2 * R3) / (R2 + R3) lblRp.Caption = Rp Rt = R1 + Rp lblRt.Caption = Rt End Sub Private Sub hscR3_Change() lblR3.Caption = Private Sub hscR1_Change() lblR1.Caption = hscR1.Value Calculos End Sub Private Sub hscR2_Change() lblR2.Caption = hscR2.Value Calculos End Sub Private Sub hscR3_Change() lblR3.Caption = hscR3.Value Calculos End Sub Private Sub Calculos() R1 = Val(hscR1.Value) R2 = Val(hscR2.Value) R3 = Val(hscR3.Value) Rp = (R2 * R3) / (R2 + R3) lblRp.Caption = Rp Rt = R1 + Rp lblRt.Caption = Rt End Sub

hscR3.Value R1 = Val(hscR1.Value) R2 = Val(hscR2.Value) R3 = Val(hscR3.Value) Rp = (R2 * R3) / (R2 + R3) lblRp.Caption = Rp Rt = R1 + Rp lblRt.Caption = Rt End Sub

22.- Quiniela Sacar un TextBox. Marcar. Botn derecho. Copiar. Botn derecho. Pegar. Te hace una pregunta: Quieres crear una matriz de controles? Responde S. Repetir el proceso de Pegar. Habrs creado : Text1(0), Text1(1), Text1(2), Text1(3), Text1(4), Text1(5) ......Text1(14) Todos son Text1 pero con distinto subndice. De tal manera que podemos localizar cualquiera de ellos mediante Text1(n)

Este programa se basa en el de la quiniela visto en la pgina de QBASIC

Private Sub Command1_Click() Randomize Timer For n = 0 To 14 a = Int(Rnd * 6) + 1 If a < 4 Then r = "1": GoTo fin If a > 5 Then r = "2": GoTo fin r = "X" fin: Text1(n).Text = r Next n End Sub

23.- InputBox y MsgBox InputBox se utiliza para introducir datos, se asigna a una variable, por ejemplo nom. Si pulsamos Cancelar

se toma nom como ""

MsgBox se utiliza para presentar una respuesta. Con las constantes vb podemos poner distintos botones y smbolos.
Private Sub Command1_Click() nom = InputBox("Introduce tu nombre", "Datos") If nom = "" Then res = MsgBox("No vlido", vbExclamation + vbOKOnly, "Repetir") Else res = MsgBox("Te llamas " & nom, vbInformation + vbOKOnly, "Respuesta") End If End Sub

Mensajes vbCritical Crtico

Botones vbOKOnly

Aceptar Aceptar vbQuestion Pregunta vbOKCancel vbCancel Cancelar Cancelar Anular, vbExclamatio Exclamacin vbAbortRetryIgnore Reintentar, vbAbort Anular n Ignorar Si, No, Reintenta vbInformation Informacin vbYesNoCancel vbRetry Cancelar r vbYesNo Si, No vbIgnore Ignorar Reintentar, vbRetryCancel vbYes Si Cancelar Sin vbCrLf CambioLinea vbApplicationModal vbNo No botones

Respuesta vbOK Aceptar

' Aqu tienes otro ejemplo de respuestas del MsgBox Private Sub Command1_Click() pre = MsgBox("Te gustan los Beatles?", vbQuestion + vbYesNo, "Pregunto")

If pre = vbYes Then res = MsgBox("Eres un carroza.", vbInformation + vbOKOnly, "Respuesta") Else res = MsgBox("Niato moderno.", vbExclamation + vbOKOnly, "Respuesta") End If End Sub

24.- Tres iguales


Dim ya Private Sub Command1_Click( ) Timer1.Interval = 1 Text2.Visible = False End Sub Private Sub Command2_Click( ) ya = "si" End Sub Private Sub Form_Load() Text2.Visible = False Timer1.Interval = 0 Randomize Timer End Sub Private Sub Timer1_Timer() a = Int(Rnd * 3 + 1) b = Int(Rnd * 3 + 1) c = Int(Rnd * 3 + 1) Text1(0).Text = a Text1(1).Text = b

Juego de mquina recreativa. Cuando le das a Comienza, salen continuamente nmeros 1, 2 y 3 en los casilleros, cuando pulsas Para, si los tres nmero son iguales sale el mensaje de Enhorabuena que estaba Visible=false.

Text1(2).Text = c If ya = "si" Then Timer1.Interval = 0 If (Text1(0).Text = Text1(1).Text _ And Text1(1).Text = Text1(2).Text) _ Then Text2.Visible = True End If ya = "" End Sub

Los TextBox deben ser TextBox1(0), TextBox1(1) y TextBox1(2)

25.- Energa En una casa hay contratado un servicio de potencia de 3.3 KW (Por el cul se ha de pagar 1.394348 euro cada mes). El KWh consumido se paga a 0.079213 Euro. Adems hay que pagar un impuesto sobre electricidad de 1.05113 x 4.864 %. Y un I.V.A. del 16 %. El recibo se hace cada 2 meses. Este sera su recibo de energa, suponiendo que estos dos meses ha consumido 562 Kwh. Termino de potencia Coste de Consumo Impuesto sobre electricidad 3.3 kW x 2 meses x 1.394348 9.20 eur 562 x 0.079213 eur 44.52 Subtotal 53.72 53.72 x 1.05113 x 4.864 % 2.75

Base Imponible 56.47 I.V.A. 16 % de 56.47 9.04 TOTAL FACTURA 65.51 En PESETAS 10900

Private Sub Consumo_Change() nPcontratada = Val(Pcontratada.Text) nIPcontratada = nPcontratada * 2 * 1.394348 IPcontratada.Text = nIPcontratada nConsumo = Val(Consumo.Text) nIConsumo = nConsumo * 0.079213 IConsumo.Text = nIConsumo nSubtotal = nIPcontratada + nIConsumo Subtotal.Text = nSubtotal nImpuestos = nSubtotal * 1.05113 * 4.864 / 100 Impuestos.Text = nImpuestos nBaseImponible = nSubtotal + nImpuestos BaseImponible.Text = nBaseImponible nIVA = nBaseImponible * 0.16 IVA.Text = nIVA nTotal = nBaseImponible + nIVA Total.Text = nTotal

nPesetas = nTotal * 166.386 Pesetas.Text = nPesetas End Sub

Este Proyecto se puede mejorar definiendo los tipos de variables y actuando sobre el redondeo. Pero se ha intentado realizar de una manera sencilla. Para su funcionamiento debes cambiar slamente el casillero de Consumo.

26.- Dias

En este Proyecto ponemos una fecha, y nos calcula los dias pasados desde esa fecha y el da de la semana. Los Textbox tienen como nombre Dia, Mes y Ao respectivamente . Donde est la palabra Mircoles se ha de poner una etiqueta llamada Dianaciste. Donde est el nmero 4645 se ha de poner una etiqueta llamada Diasvividos. Private Sub Command1_Click() DateSerial,

Dia = Dia.Text Mes = Mes.Text Ao = Ao.Text Mifecha = DateSerial(Ao, Mes, Dia) semana = Weekday(Mifecha, vbMonday) WeekDay me d dias = DateDiff("d", Mifecha, Now) Diasvividos.Caption = dias el nmero de

convierte tres nmeros en formato fecha.

da de la semana.

Select Case semana Case 1 Dianaciste.Caption DateDiff nos da Case 2 Dianaciste.Caption la diferencia Case 3 entre dos fechas, Dianaciste.Caption si ponemos "d" Case 4 nos da los das Dianaciste.Caption de diferencia. Case 5 Dianaciste.Caption Case 6 Now es la fecha Dianaciste.Caption actual. Case 7 Dianaciste.Caption End Select End Sub

= "Lunes" = "Martes" = "Mircoles" = "Jueves" = "Viernes" = "Sbado" = "Domingo"

Juego de dados
Dim puntos1, puntos2 Private Sub Command1_Click( ) Randomize Timer a = Int(Rnd * 6) + 1 b = Int(Rnd * 6) + 1 c = a + b Label1.Caption = a Label2.Caption = b Label4.Caption = c If c = 7 Then puntos1 = puntos1 + 1 Label5.Caption = puntos1 Command2.Enable

Juego de dados

d = True Command1.Enable d = False End Sub Private Sub Command2_Click( ) Randomize Timer a = Int(Rnd * 6) + 1 b = Int(Rnd * 6) + 1 c = a + b Label1.Caption = a Label2.Caption = b Label4.Caption = c If c = 7 Then puntos2 = puntos2 + 1 Label6.Caption = puntos2 Command1.Enable d = True Command2.Enable d = False End Sub Private Sub Command3_Click( ) puntos1 = 0 puntos2 = 0 Label5.Caption = 0 Label6.Caption = 0 End Sub Private Sub Form_Load() Command2.Enable d = False End Sub

Atencin : los dos cuadrados blancos de arriba no son TextBox, sino Label, llamados Label1 y Label2. Tienen color blanco de fondo. El Label4 es el que est a la derecha de Suma :.

Condicionales y operadores lgicos

IF a > b THEN ... IF a >= b THEN ... IF a <= b THEN ...

SI a es mayor que b ENTONCES... SI a es mayor o igual que b ENTONCES ... SI a es menor o igual que b ENTONCES ...

IF a > 7 AND a < 24 THEN ... SI a es mayor que 7 Y a es menor que 24 ENTONCES ... IF a > 7 AND b > 30 THEN ... SI a es mayor que 7 y b es mayor que 30 ENTONCES ... IF a = 5 OR b = 9 THEN Si a es igual a 5 O b es igual a 9 ENTONCES ... IF a$="Pedro" OR a$="Juan" THEN ... SI a$ es Pedro O a$ es Juan ENTONCES ... IF a="Juan" AND edad >= 18 THEN ... SI a es Juan Y edad es mayor o igual que 18 ENTONCES ...

Operadores Lgicos (Interpreta estas Lneas) C = A AND B D = A OR B E = Not A F = A Xor B True = -1 False = 0

28.- Puertas lgicas Puertas Lgicas Cuando pulsamos sobre los botones, su correspondiente Textbox cambia a 0 y 1 alternadamente. En la salida debemos obtener el resultado. Los dibujos de las puertas son un Image. Lo puedes bajar de aqu puerta.gif Podramos utilizar variables Booleanas que tienen como valores True y False. En este caso la variable utilizada cambia, mediante el Not entre 0 y -1. Para obtener el valor 1 se aplica la funcin Abs( ) Tienes que declarar las variables.

' Presento el Cdigo de la puerta AND y O-EXCLUSIVA, las dems puertas se ' deja como ejercicio. La O-EXCLUSIVA se podra haber realizado mediante ' Xor. SE = EX1 Xor EX2 Dim AN1, AN2 Dim EX1, EX2 ' PUERTA AND Private Sub Command1_Click() AN1 = Not (AN1) A1.Text = Abs(AN1) SA.Text = Abs(AN1 And AN2) End Sub Private Sub Command2_Click() AN2 = Not (AN2) A2.Text = Abs(AN2) SA.Text = Abs(AN1 And AN2) End Sub ' PUERTA O-EXCLUSIVA Private Sub Command5_Click() EX1 = Not (EX1) E1.Text = Abs(EX1) SE.Text = Abs((EX1 And Not (EX2)) Or (Not (EX1) And EX2)) End Sub

Private Sub Command6_Click() EX2 = Not (EX2) E2.Text = Abs(EX2) SE.Text = Abs((EX1 And Not (EX2)) Or (Not (EX1) And EX2)) End Sub

Estudia la suma acumulativa : Anueva = Aantigua + 1 A=A+1 B=B+5 Text1.Text = Text1.Text & " Hola " De esta manera se agrega al valor anterior de Text1 la palabra " Hola " Text1.Text = "Visual" Text1.Text= Text1.Text & " Basic" Ahora el Text1.Text valdr "Visual Basic"

29.- Divisores Divisores de un nmero

Private Sub Command1_Click() Text2.Text = ""

x = Val(Text1.Text) If x < 1 Or x > 50 Then a = MsgBox("No vlido", vbOKOnly, "Entrada incorrecta") Else For n = 1 To x z = x Mod n If z = 0 Then Text2.Text = Text2.Text & n & "-" Next n End If End Sub

30.- Intermitente

Dim cambi As Boolean Private Sub HScroll1_Change() Timer1.Interval = HScroll1.Value End Sub Private Sub Timer1_Timer() cambi = Not (cambi) If cambi = True Then Shape1.FillColor = QBColor(10) If cambi = False Then Shape1.FillColor = QBColor(12) End Sub

En Propiedades del HScroll1: Max = 2000 Min = 100 Poner el FillStyle del Shape1 en Solid

31.- Mueve

Mueve el Check1 Ponemos WindowState= 2 para que salga la pantalla completa. Check1.Move H, V mueve el Check. En vez de 100 se puede poner otro nmero. Mejoras :

Dim H, V Private Sub Form_Load()

Cuando lo ejecutes podrs Form1.WindowState = 2 observar que se puede salir End Sub de la pantalla por los Private Sub Abaj_Click() cuatro lados. Modifica el programa para que no se salga de la pantalla cuando llegue a los Private Sub Arri_Click() V = V - 100 extremos.
Check1.Move H, V End Sub V = V + 100 Check1.Move H, V End Sub

Actuar sobre : Form1.Top Form1.Left Form1.Height Form1.Width


Private Sub Dere_Click() H = H + 100 Check1.Move H, V End Sub Private Sub Izqui_Click() H = H - 100 Check1.Move H, V End Sub

Otros controles .ocx y .dll


Adems de los controles bsicos que encontramos por defecto en el cuadro de herramientas, podemos utilizar otros controles. Para ello vamos a Proyecto/Componentes/Controles y nos encontramos con conjuntos de ellos.

Vamos a insertar (marcar) Windows Media Player es el wmp.dll MSDXM.OCX) (En Windows 98

Los OCX y algunas .DLL son controles de Visual Basic. Podemos buscar *.ocx en Internet.

Private Sub Command1_Click() WindowsMediaPlayer1.URL = "E:\multi\video.avi" End Sub

Como he comentado anteriormente los archivos.OCX son controles de Visual Basic. Vamos a verlos : Ve a Buscar archivos en tu disco duro y busca : *.ocx. Te saldrn controles.OCX que tienes en tu ordenador y que utiliza Visual Basic o Windows. La mayora estarn en C:\Windows\System (o en \Windows\System32). Tambin algunas *.dll se pueden utilizar como controles de Visual Basic.

En Internet puedes encontrar muchos controles.OCX, ve a un buscador y escribe -ocx free download- te saldrn pginas de donde puedes bajar archivos OCX. 1.- Aqu te pongo un control ocx BJATELO y gurdalo en la carpeta

C:\MisOCX de tu disco duro rotater.ocx (69 K) 2.- Ahora entra en Visual Basic y en Proyecto/Componentes/Controles/Examinar Entra en la carpeta C:\MisOCX que es donde lo has guardado, mrcalo y dale la botn Abrir. 3.- A continuacin en la ventana de Controles tendrs activado en citado control como Sidewalk Rotater Control, dale a Aplicar y este control aparecer en la caja de controles.

4.- Saca el mencionado control al Formulario de Visual Basic. 5.- Entra en la Propiedad (Personalizado) del mencionado control y cambia algunos valores, colores, las Face Zero, One, Two son las caras. Se pueden poner letras y dibujos en cada una de las tres caras.

De esta manera hemos bajado un control ocx de Internet y lo hemos insertado en nuestro Proyecto. Hay muchos controles en Internet algunos son gratuitos y otros son comerciales.

Aqu tienes otro ejemplo de OCX. Alguien, en este caso una empresa, se ha dedicado a construir un botn con cierta personalidad. Y ha realizado un OCX. Luego lo ha puesto en Internet por si alguien lo quiere utilizar. (Si quieres ser un buen profesional de Visual Basic debers aprender a construir controles.OCX) 1.- Aqu te pongo otro control ocx BJATELO y gurdalo en la carpeta C:\MisOCX de tu disco duro Btnenh4.ocx. (404 K) 2.- Ahora entra en Visual Basic y en Proyecto/Componentes/Controles/Examinar Entra en la carpeta C:\MisOCX que es donde lo has guardado, mrcalo y dale la botn Abrir. 3.- A continuacin en la ventana de Controles tendrs activado en citado control como Active Multimedia Button Control, dale a Aplicar y este control aparecer en la caja de controles. 4.- Saca el mencionado control al Formulario de Visual Basic. 5.- Entra en la Propiedad (Personalizado) del mencionado control y cambia algunos valores. Podrs configurar un botn de distintas formas, colores, estilos, ..... Puede ocurrir que un control.ocx no funcione porque no est registrado, para registrarlo busca el programa Regsvr32.exe Luego en Inicio/Ejecutar poner : Regsvr32.exe control.ocx

Slo Windows 98 Aqu tienes otro Control, en este caso viene como un archivo dll.Vtext.dll (169 K) Microsoft Direct Text-to-Speech.
Private Sub Command1_Click() TextToSpeech1.Speak ("Escribe una frase") End Sub

Escribe una frase y te la pronuncia, con acento ingls. Busca en Internet el Espaol.

W98

Veamos otro control Multimedia lo puedes encontrar en el CDROM de VisualBasic/os/System/MCI32.OCX, aunque tambin lo puedes bajar de aqu MCI32.OCX (194 K) Aunque podemos poner los controles en cualquier directorio, normalmente se guardan en C:\Windows\System, gurdalo ah y luego en Visual Basic marca : Proyecto/Componentes/Controles/Microsoft Multimedia Control 6.0 En el formulario situa un botn, un PictureBox y el MMControl. Luego en el botn escribe ste cdigo :
Private Sub Command1_Click() MMControl1.DeviceType = "AVIVideo" MMControl1.FileName = "C:\Pon-un-archivo.avi" MMControl1.Command = "open" MMControl1.hWndDisplay = Picture1.hWnd MMControl1.Command = "play" End Sub Calendario MSCAL.ocx

Qu son las API de Windows? Voy a intentar explicarlo de una manera sencilla. Comencemos con los archivos.dll, (Dinamic Link Libraries) en su interior hay una serie de funciones que un programa puede utilizar. Supongamos que tenemos un archivo llamado Operaciones.dll y en su interior hay 4 funciones: Suma, Resta, Multiplica y Divide. Function Operaciones.dll Suma (X,Y) R=X+Y Return Resta (X,Y)

R=X-Y Return Multiplica (X,Y) R=X*Y Return Divide (X,Y) R=X/Y Return End Function Pues un programa puede acudir a cualquiera de esas funciones. Primero tendra que declarar la Funcin de esta manera : Private Declare Function Suma Lib "Operaciones" (X as Single, Y as Single) as Single Esto quiere decir que le hemos de suministrar dos parmetros (a,b) y l nos devolver la solucin de tipo Single. Lo haramos de esta manera : C = Suma (3,4) Evitentemente, C tomara el valor 7, que es la suma de 3 y 4. Las API de Windows son una serie de archivos dll que tiene Windows y que nosotros las podemos utilizar, algunas de ellas son : kernel32.dll, gdi32.dll, user32.dll podemos encontrar muchas ms, adems los programas que instalamos en nuestro ordenador tambin nos aaden ms archivos.dll. Entra en tu buscador de Windows y escribe *.dll El ejemplo trata de lo siguiente : Tomamos el archivo User32.dll de Windows 98, que contiene muchas funciones, una de ellas es SwapMouseButton, que permuta los botones derecho e izquierdo del ratn. Declaramos la Funcin que vamos a utilizar (SwapMouseButton) y el archivo donde se encuentra (User32.dll) Si llamamos (Call) a esta funcin SwapMouseButton (0) nos pondr el ratn normal Si llamamos (Call) a esta funcin SwapMouseButton (1) nos pondr el ratn

al revs. As que hemos tomado el archivo de Windows "User32.dll" para utilizar una de sus funciones SwapMouseButton

Private Declare Sub SwapMouseButton Lib "User32" (ByVal N As Integer) Private Sub Diestro_Click() Call SwapMouseButton(0) End Sub Private Sub Zurdo_Click() Call SwapMouseButton(1) End Sub Private Sub Hola_Click() Text1.Text = "Hola" End Sub Private Sub Adios_Click() Text1.Text = "Adios" End Sub

Las dll adems de funciones pueden contener dibujos, iconos u otro tipo de datos. A los que pueden acceder cualquier aplicacin de Windows. Con este programas puedes ver el contenido de las dll: depends.zip (403 K) Claro que para saber qu significa cada funcin y como puedes acceder a ellas tendrs que profundizar.

Insertar un gif animado en un formulario de Visual Basic.

Te bajas ste archivo: Gif89.dll (43 K) Luego: Proyecto / Componentes... / Controles Botn: Examinar Tipo: Todos los archivos (*.*) ----> Gif89.dll Aplicar. Insertamos el control en el Formulario y en la Propiedad Filename ponemos la direccin absoluta del gif animado.

Editor de texto Editor.exe (20 K) Ahora vas a construir un Editor de texto. Vas a insertar nuevos controles CommonDialog y CommonControl, vas a utilizar el Editor de mens, y una API de Windows. No es necesario que aprendas todo lo que vas a realizar, pero te recomiendo que construya el siguiente Proyecto. Baja el archivo Editor.zip (140 K) , descomprmelo y obtendrs un archivo.doc. Sigue las instrucciones y en un par de horas habrs construido un Editor de texto que te sorprender.

Al revs

Private Sub cmdPulsa_Click() a$ = Text1.Text x = Len(a$)

For n = x To 1 Step -1 b$ = Mid(a$, n, 1) c$ = c$ + UCase(b$) Next n Text2.Text = c$ ' Hay una funcion llamada StrReverse("asd") ' que hace lo mismo End Sub

33.- Codifica

Private Sub Command1_Click() a$ = Text1.Text x = Len(a$) For n = 1 To x ca$ = Mid(a$, n, 1) cod = Asc(ca$) Text2.Text = Text2.Text & cod & "-" Next n End Sub Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" End Sub

Esto es un ejemplo de concatenacin: Text2.Text = Text2.Text & cod & "-"

34.- Colores Los botones se han creado mediante una matriz de Hay que poner el controles: Timer1.Interval en 10 Boton(0), Boton(1), Boton(2), Boton(3), Boton(4), .....
Private Sub Timer1_Timer() Randomize Timer x = Int(Rnd * 8) c = Int(Rnd * 6) + 9 Boton(x).BackColo r = QBColor(c) End Sub

35.- Semforo

Private Sub Timer1_Timer() x = x + 1 If x = 8 Then x = 0 Select Case x Case Is < 3 Shape1.FillColor = QBColor(12) Shape2.FillColor = QBColor(6) Shape3.FillColor = QBColor(2) Case Is = 4 Shape1.FillColor = QBColor(4) Shape2.FillColor = QBColor(14) Shape3.FillColor = QBColor(2) Case Is > 4 Shape1.FillColor = QBColor(4) Shape2.FillColor = QBColor(6) Shape3.FillColor = QBColor(10) End Select End Sub

36.- Temporizador

Dim ahora, total, comenzo, fin, prog Private Sub Command1_Click() hh = Val(Text1.Text) mm = Val(Text2.Text) ss = Val(Text3.Text) total = hh * 3600 + mm * 60 + ss comenzo = Timer fin = comenzo + total Timer1.Interval = 1 If Option1.Value = True Then prog = "C:\Windows\Calc.exe" If Option2.Value = True Then prog = "C:\Archivo....Mspaint.exe" If Option3.Value = True Then prog = "C:\Windows\Explorer.exe" End Sub Private Sub Timer1_Timer() ahora = Timer Text4.Text = Int(ahora - comenzo) If ahora > fin Then d = Shell(prog, 1) Timer1.Interval = 0 End If End Sub

Las rutas de las aplicaciones tienes que cambiarlas. Si tienes XP, la calculadora estar en \Windows\System32\calc.exe. Para hacer las pruebas establece pocos segundos: 6

37.- Factorial

Private Sub otro() repe: a = InputBox("Introduce un nmero del 1 al 20", "Factorial") If a = "" Then End If Val(a) < 1 Or Val(a) > 20 Then b = MsgBox("Entrada no vlida", vbOKOnly, "Error") GoTo repe Else x = 1 For n = 1 To a x = x * n Next n b = MsgBox("El factorial de " & a & " es : " & x, vbOKOnly, "Resultado") otro End If End Sub Private Sub Form_Load() otro End Sub

Estudio del InputBox y MsgBox. No hace falta controles, slo el formulario y la Sub-rutina otro.

38.- Multiplicar

Dim r, m Private Sub Command1_Click() Text2.Text = "" m = Val(Text1.Text) If m > 0 And m < 10 Then For n = 0 To 9 r = n * m Text2.Text = Text2.Text & m & " x " & n & " = " & r & vbCrLf Next n Else re = MsgBox("Nmero no vlido." & vbCrLf & "Debe estar_ comprendido entre 1 y 9.", vbCritical + vbOKOnly, "No vale") End If End Sub

39.- Disparo

Dim h, v, i, a, b, c Private Sub Command1_Click( ) Timer2.Interval = 10 Command1.Enable d = False End Sub Private Sub Form_Load() i = 100 b = 5160 End Sub Private Sub Timer1_Timer() h = h + i If h > Width Then i = -100 If h < 0 Then i = 100 Super.Move h, v End Sub Private Sub Timer2_Timer() b = b - 100 If b < 0 Then b = 5160 Timer2.Interval = 0 Command1.Enable d = True End If Check1.Move 3420, b End Sub

Bajo el botn azul de la parte inferior hay un CheckBox. El CheckBox slo sube.

40.- Frutas

Dim na, nakg, napts, ma, makg, mapts,_ mel, melkg, melpts, pla, plakg,_ plapts As Long Private Sub Form_Load() End Sub Private Sub Text5_Change() On Error Resume Next na = Text1.Text nakg = Text5.Text napts = na * nakg Text9.Text = napts suma End Sub Private Sub Text6_Change() On Error Resume Next ma = Text2.Text makg = Text6.Text mapts = ma * makg Text10.Text = mapts suma End Sub Private Sub Text7_Change() On Error Resume Next mel = Text3.Text melkg = Text7.Text melpts = mel * melkg Text11.Text = melpts suma End Sub Private Sub Text8_Change() On Error Resume Next pla = Text4.Text plakg = Text8.Text plapts = pla * plakg Text12.Text = plapts suma End Sub Public Sub suma() On Error Resume Next total = napts + mapts + melpts _ + plapts Text13.Text = total

End Sub

Imgenes

Dim x Private Sub pctDado_Click() End Sub Private Sub Timer1_Timer() Timer1.Interval = HScroll1.Value x = x + 1 Select Case x Case 1 pctDado.Picture = LoadPicture("C:\IMAGES\Moon1.jpg" ) Case 2 pctDado.Picture = LoadPicture("C:\IMAGES\Moon2.jpg" ) Case 3 pctDado.Picture = LoadPicture("C:\IMAGES\Moon3.jpg" ) Case 4 pctDado.Picture = LoadPicture("C:\IMAGES\Moon4.jpg" ) Case 5 pctDado.Picture = LoadPicture("C:\IMAGES\Moon5.jpg" ) Case 6 pctDado.Picture = LoadPicture("C:\IMAGES\Moon6.jpg" ) Case 7 pctDado.Picture = LoadPicture("C:\IMAGES\Moon7.jpg" ) Case 8 pctDado.Picture = LoadPicture("C:\IMAGES\Moon8.jpg" ) End Select If x = 8 Then x = 0 End Sub

El HScroll1 Min = 1 Max = 1000 Colocar un PictureBox y llamarlo pctDado Bajar las imgenes: Moon.zip (54 K) Y grabarlas en C:\IMAGES

42.- Primitiva

Dim x(5) Private Sub Command1_Click( ) Randomize Timer For n = 0 To 5 saca: a = Int(Rnd * 48 + 1) For k = 0 To 5 If x(k) = a Then GoTo saca Next k x(n) = a Next n

Fjate los TextBox son una matriz de TextBox, se nombran como: Text1 (1), Text1 (2), Text1 (3), Text1 (4), Text1 (5),Text1(6)

Se crean insertando uno, lo Copias y luego Pegas los dems. For i = 0 To 5 Te saldr un mensaje diciendo Quieres crear una matriz Text1(i) = x(i) de control? pulsa S.
Next i End Sub

43.- Rapidez

Dim T1, T2, T3, N Private Sub Command1_Click() Text1.Text = N T1 = Timer Command2.Enabled = True N = 0 End Sub

Private Sub Command2_Click() N = N + 1 Text1.Text = N T2 = Timer T3 = T2 - T1 If T3 > 20 Then Command2.Enabled = False End Sub

44.- Ruleta

Dim n Private Sub Command1_Click() Timer1.Interval = 0 If Val(Text1.Text) = n Then Text2.Visible = True End Sub Private Sub Command2_Click() Timer1.Interval = HScroll1.Value Text2.Visible = False k = Val(Text1.Text) If k < 0 Or k > 5 Then l = MsgBox("Numero no valido", vbOKOnly, "No vlido") End Sub Private Sub Form_Load() Text2.Visible = False End Sub Private Sub Timer1_Timer() Shape2(n).FillColor = QBColor(10) If n = 0 Then Shape2(5).FillColor = QBColor(0)

Else Shape2(n - 1).FillColor = QBColor(0) End If n = n + 1 If n = 6 Then n = 0 End Sub

45.- Ruleta rusa.

Dim x Private Sub Boton1_Click() If x = 1 Then Form1.BackColor = QBColor(12) Else Boton1.Enabled = False End If End Sub Private Sub Boton2_Click() If x = 2 Then Form1.BackColor = QBColor(12) Else Boton2.Enabled = False End If End Sub Private Sub Boton3_Click() If x = 3 Then Form1.BackColor = QBColor(12) Else

Boton3.Enabled = False End If End Sub Private Sub Boton4_Click() If x = 4 Then Form1.BackColor = QBColor(12) Else Boton4.Enabled = False End If End Sub Private Sub Boton5_Click() If x = 5 Then Form1.BackColor = QBColor(12) Else Boton5.Enabled = False End If End Sub Private Sub Boton6_Click() If x = 6 Then Form1.BackColor = QBColor(12) Else Boton6.Enabled = False End If End Sub Private Sub Command1_Click() Form1.BackColor = QBColor(8) Boton1.Enabled = True Boton2.Enabled = True Boton3.Enabled = True Boton4.Enabled = True Boton5.Enabled = True Boton6.Enabled = True Randomize Timer x = Int(Rnd * 6) + 1 End Sub

46.- Rebotes

Para que al pulsar una tecla (KeyPress), se mueva el Botn, en las Propiedades del Form1, tenemos que establecer KeyPreview = True. El crculo es un OptionButton. En el Timer poner Interval = 1
Dim h, v Private Sub Form_KeyPress(KeyAscii As Integer) ' Tecla b y Tecla c If KeyAscii = 98 Then Command1.Top = Command1.Top + 100 If KeyAscii = 99 Then Command1.Top = Command1.Top - 100 End Sub Private Sub Form_Load() h = 100 v = 100 End Sub Private Sub Timer1_Timer() Option1.Left = Option1.Left + h Option1.Top = Option1.Top + v If Option1.Left > Form1.Width Then h = h * (-1) If Option1.Left < 0 Then h = h * (-1) If Option1.Top > Form1.Height Then v = v * (-1)

If Option1.Top < 0 Then v = v * (-1) End Sub

' Las cuatro ltimas lneas se pueden resumir en dos: If Option1.Left > Form1.Width Or Option1.Left < 0 Then h = h * (-1) If Option1.Top > Form1.Height Or Option1.Top < 0 Then v = v * (-1)

En esta direccin puedes encontrar exmenes de Visual Basic de una Universidad: http://www1.ceit.es/Asignaturas/Informat1/Examenes/VBasic/ExamsVBasic.htm La direccin anterior contienen enlaces a varias pginas en donde se encuentran exmenes de Visual Basic, Cmo podras bajar todas las pginas automticamente?. Pues con un navegador fuera de lnea, como por ejemplo el HTTrack. Ve a Programas, luego a WinHTTrack, bjate este navegador, estdialo un poco y luego baja todas las pginas que componen la direccin de Visual Basic que he puesto arriba. Base de datos y SQL Para realizar ste proyecto, previamente hemos construido una Base de Datos con el Access, llamada C:\mibase.mdb y en ella una tabla llamada: mitabla. En la tabla debe haber dos campos alfanumricos llamados: Nombre y Edad. Una vez que tenemos la Base de datos, vamos a Visual Basic y creamos un formulario como el que se indica a la derecha la tabla siguiente. Los Text3 y Text4 tienen propiedad Multiline True. Debers estudiar el funcionamiento de SQL En algunos proyectos tendremos que abrir la base de datos para poder trabajar, para ello se utilizan stas instrucciones: Set con = CreateObject("ADODB.Connection") con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb")

' Guardar Private Sub Command1_Click() Set con = CreateObject("ADODB.Connection") con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "c:\mibase.mdb") nomb = Text1.Text edad = Text2.Text sql = "INSERT INTO mitabla (Nombre, Edad) " sql = sql & " VALUES (" sql = sql & "'" & nomb & "'," sql = sql & "'" & edad & "')" con.Execute (sql) End Sub ' Ver Private Sub Command2_Click() Set con = CreateObject("ADODB.Connection") con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb") busca = Text5.Text sql = "SELECT * FROM mitabla WHERE Nombre LIKE '" & busca & "'" Set RS = con.Execute(sql) Do While Not RS.EOF Text3.Text = Text3.Text & vbCrLf & RS("Nombre")

Text4.Text = Text4.Text & vbCrLf & RS("Edad") RS.MoveNext Loop End Sub ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Para BORRAR Registros, aadimos un nuevo Command6_Click: Private Sub Command6_Click() Set con = CreateObject("ADODB.Connection") con.Open ("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & "C:\mibase.mdb") busca = Text5.Text sql = "DELETE * FROM prueba WHERE Nombre LIKE Set RS = con.Execute(sql) End Sub '" & busca & "'"

Vamos a ver tres formas ms de trabajar con Bases de Datos: 1.- Creacin mediante el Administrador Visual de datos. 2.- Control mediante el control Data. 3.- Control mediante el control ADODC.

1.- Creacin mediante el Administrador Visual de datos (Visdata).


Abrimos un nuevo proyecto EXE Standard. Complementos/Administrador visual de datos... (Est arriba, en la barra de men) Archivo/Nuevo.../Microsoft Access/MDB de la versin 7.0.. -------> Nombre: C:\mibase.mdb

Pulsar botn derecho; en el men emergente pulsar Nueva tabla. Le damos un nombre: mitabla Agregar campo y vamos agregando los distintos campos que componen la tabla. Generar tabla.

Ya la tenemos. Ahora pulsamos dos veces sobre el icono de mitabla y podremos Agregar datos. Con el botn derecho del ratn podemos entrar en las Propiedades de la tabla y modificar sus parmetros. (Algunas propiedades son slo de lectura; el tipo y tamao no se puede modificar)

Buscar: Podemos Buscar los Registros que tengan en el campo Edad, operador >, Valor 10. Si queremos volver a editar la tabla, pulsamos con el botn derecho sobre mitabla y luego Disear... Podemos marcar Required, para obligar a rellenar un campo. Si en ValidationRule ponemos ">100" y en ValidationText "Una edad demasiada avanzada", estamos restringiendo a que coloquen una edad mayor de 100 aos.

Podemos hacer bsqueda mediante SQL

2.- Control mediante el control Data


Construimos previamente esta base de datos:

Abrimos un nuevo proyecto EXE Standard. Insertamos en el Formulario un control Data, TextBox y tres Label.

Vamos a Propiedades de Data1 DatabaseName = C:\mibase.mdb RecordSource = mitabla (Puede ocurrir que obtengamos un error debido a que el formato de la base de datos no sea el adecuado, tendremos que convertirla a Access 97, Access2000 o Access2002 segn se necesite)

Vamos a las Propiedades de los Text: Text1 y ponemos en DataSource Data1 y en DataField Nombre Text2 y ponemos en DataSource Data1 y en DataField Edad Text3 y ponemos en DataSource Data1 y en DataField Ciudad Ejecutamos y observamos. (Ms adelante estudiaremos las Propiedades del Data1: BOFAction y EOFAction)

Ahora vamos a gestionar la Base de datos anterior con Botones. Ahora vamos a agregar 4 Botones y realizar la visualizacin de las fichas mediante los botones.

Private Sub Command1_Click() Data1.Recordset.MoveFirst End Sub Private Sub Command2_Click() Data1.Recordset.MoveNext End Sub Private Sub Command3_Click() Data1.Recordset.MovePrevious End Sub Private Sub Command4_Click() Data1.Recordset.MoveLast End Sub

Ejecutamos y observamos. Cuando superamos el ltimo o el anterior al primero se produce un error. Lo vamos a corregir de sta manera:

Private Sub Command1_Click() Data1.Recordset.MoveFirst End Sub Private Sub Command2_Click() If Data1.Recordset.EOF Then ' Data1.Recordset.AddNew Data1.Recordset.MoveLast Else Data1.Recordset.MoveNext End If End Sub Private Sub Command3_Click() If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst Else Data1.Recordset.MovePrevious End If End Sub Private Sub Command4_Click() Data1.Recordset.MoveLast End Sub

3.- Control mediante el control ADODC


Abrimos un nuevo proyecto EXE Standard. Proyecto/Componentes/Microsoft ADO Data Control 6.0 (OLEDB) Ponemos ese control en el Formulario.

Debemos "Conectar" la Base de datos.

Vamos a Propiedades del Adodc1, ConnectionString Marcamos: Usar cadena de conexin. Pulsamos Generar. Elegimos el Proveedor: Microsoft Jet 4.0 OLE DB Provider

Le damos a Siguiente >>. Y Seleccionamos la Base de datos con la que vamos a trabajar. Probar.

Ahora vamos de nuevo a Propiedades del Adodc1, RecordSource Y ponemos 2- adCmdTable y el nombre de la tabla a la que se le aplicarn los comandos: C:\mitabla

Ya hemos preparado el control ADODC1. Ahora vamos a construir el Formulario:

En el DataSource de los Text se pone el nombre del control Adodc1 En el Data Field de los Text se pone el nombre del campo. Vamos a las Propiedades del: Text1 y ponemos en DataSource Adodc1 y en DataField Nombre Text2 y ponemos en DataSource Adodc1 y en DataField Apellido Text3 y ponemos en DataSource Adodc1 y en DataField Pais Text4 y ponemos en DataSource Adodc1 y en DataField Edad. Ejecutamos y observamos. En resumen: - Agregar el control Adocd1 - Propiedad ConectionString: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\mibase.mdb

- Propiedad CommandType: 2 adCmdTable - Propiedad RecordSource: mitabla

- Propiedades DataSource y DataField de cada Text Volviendo al control Adodc1 vemos que tiene estas dos Propiedades: Propiedad BOFAction: BOF significa antes que el primero, o sea, estamos viendo los registros 5, 4, 3, 2, 1, NADA-BOF - Si ponemos MoveFirst permanecern en el primer registro. - Si ponemos BOF se desactiva el control izquierdo. Propiedad EOFAction: EOF significa fin del fichero, o sea, estamos viendo los registros 5, 6,7, 8, 9 * FIN-EOF - Si ponemos MoveLast permanecer en el ltimo registro. - Si ponemos EOF se desactiva el control derecho. - Si ponemos AddNew podremos Agregar nuevos Registros.

Ahora vamos a gestionar la Base de datos anterior con botones. Agregamos los botones que indica la siguiente figura:

Private Sub Command1_Click() Adodc1.Recordset.Fields("Nombre") = Text1.Text Adodc1.Recordset.Fields("Apellido") = Text2.Text Adodc1.Recordset.Fields("Pais") = Text3.Text Adodc1.Recordset.Fields("Edad") = Text4.Text Adodc1.Recordset.Update End Sub Private Sub Command2_Click() Adodc1.Recordset.AddNew End Sub Private Sub Command3_Click() Confirma = MsgBox("Quieres borrar esta ficha?", vbYesNo, "Confirmacin") If Confirma = vbYes Then Adodc1.Recordset.Delete MsgBox "Ficha borrada.", , "Borrado" Else MsgBox "Cancelacin de borrado.", , "No borrado" End If End Sub Private Sub Command4_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" End Sub Private Sub Command5_Click() If Not Adodc1.Recordset.BOF Then Adodc1.Recordset.MovePrevious If Adodc1.Recordset.BOF Then Adodc1.Recordset.MoveNext End If End If End Sub Private Sub Command6_Click() If Not Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveNext If Adodc1.Recordset.EOF Then Adodc1.Recordset.MovePrevious End If End If End Sub Private Sub Command7_Click() End End Sub

Ahora vamos a realizar un formulario en donde podamos ver imgenes archivadas en una Base de Datos Access Baja cuadros.zip, son una serie de imgenes que nos pueden valer para ste ejercicio. Vamos a verlo de tres formas: Primera forma: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnvbpj01/html/gs0102.asp Creamos una Base de datos Access llamada C:\Cuadros\cuadros2.mdb y en ella una tabla llamada mitabla con tres campos:

Nombre (Texto) Apellido (Texto) Cuadro (Objeto OLE)

Podemos rellenar los elementos de la tabla con varios registros:

Los cuadros se introducen mediante: Botn derecho en el campo Cuadro / Insertar objeto... / Crear desde archivo / Examinar

Vamos a Visual Basic y creamos ste formulario:

Private Conn As ADODB.Connection Private rs As ADODB.Recordset Private Sub Form_Load() 'Establecer conexin Set Conn = New ADODB.Connection Conn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB" & _ ".4.0;Data Source=" & "C:\cuadros\cuadros.mdb" Conn.Open 'Abrir recordset Set rs = New ADODB.Recordset rs.Open "mitabla", Conn, _ adOpenKeyset, adLockPessimistic, adCmdTable Set Text1.DataSource = rs Text1.DataField = "Nombre" Set Text2.DataSource = rs Text2.DataField = "Apellido" Set Image1.DataSource = rs Image1.DataField = "Cuadro" End Sub

Con esta idea debera funcionar, pero suele fallar porque los componente de Visual Basic no estn actualizados con las nuevas Base de datos de Access. Adems tenemos que poner botones u otros elementos para cambiar de registro. Hay que tener en cuenta que existen varias versiones de Access: Access 97, Access 2000, Acces 2002.... si tenemos el Office XP, podemos convertir a Access a versiones anteriores mediante:

Herramientas / Utilidades de la base de datos / Convertir base de datos Al convertir la base de datos, cambia algunas de sus anteriores caractersticas. En algunas ocasiones, si no tenemos el Visual Basic 6 actualizado, tendremos que convertir bases de datos de Acces XP a Access 97.

Segunda forma: Bajamos ste archivo: VBAccessImag.zip lo descomprimimos y lo ejecutamos, observaremos que el cdigo es un poco enrevesado, pero funciona.

Tercera forma: Digamos que es mi contribucin personal, en este caso no tenemos un campo de Objeto OLE, sino un campo de texto en donde guardamos la localizacin del archivo grfico. Creamos una Base de datos Access llamada C:\cuadros2.mdb y en ella una tabla llamada mitabla con tres campos de Texto:

Rellenamos varios Registros:

Observamos que el campo Imagen es de Texto y en l escribimos la ruta de la imagen.

Vamos a Visual Basic y creamos ste formulario:

Dim Con As ADODB.Connection Dim RS As New ADODB.Recordset Dim strConn As String ' Guardar Private Sub Command1_Click() Set Con = CreateObject("ADODB.Connection") Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb") nomb = Text1.Text apel = Text2.Text imag = Text3.Text SQL = "INSERT INTO mitabla (Nombre, Apellido, Imagen) " SQL = SQL & " VALUES (" SQL = SQL & "'" & nomb & "'," SQL = SQL & "'" & apel & "'," SQL = SQL & "'" & imag & "')" Con.Execute (SQL) End Sub ' Abrir Private Sub Command2_Click() 'Set Con = CreateObject("ADODB.Connection")

'Con.Open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & "C:\cuadros2.mdb") 'SQL = "SELECT * FROM mitabla " 'Set RS = Con.Execute(SQL) 'RS.CursorType = adOpenDynamic Dim Conn As New ADODB.Connection strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" strConn = strConn & "C:\cuadros2.mdb" Conn.ConnectionString = strConn Conn.Open RS.Source = "SELECT * FROM mitabla" RS.CursorType = adOpenDynamic RS.ActiveConnection = Conn RS.Open End Sub ' Siguiente Private Sub Command3_Click() Text1.Text = RS("Nombre") Text2.Text = RS("Apellido") Text3.Text = RS("Imagen") Image1.Picture = LoadPicture(RS("Imagen")) RS.MoveNext End Sub ' Anterior Private Sub Command4_Click() Text1.Text = RS("Nombre") Text2.Text = RS("Apellido") Text3.Text = RS("Imagen") Image1.Picture = LoadPicture(RS("Imagen")) RS.MovePrevious End Sub Private Sub Form_Load() End Sub

ste proyecto lo podemos depurar, evitando que salga un error cuando llega al final del archivo EOF o al principio BOF. Tambin se podra poner controles Drive, Dir y File, para que no tengamos que poner la ruta de la imagen manualmente, sino que la localizamos mediante stos controles y la agregamos a la base de datos.

Recordar que podemos visualizar una Base de datos con imgenes mediante los formulario del Access como se vi en el Ejercicio N 2 de Base de datos

Base de datos Visual Basic Pginas Web VBScript JavaScript SQL ASP PHP LINUX Recuperar Reparar XP Convierte tu ordenador en un Osciloscopio Controla totalmente XP Cambiar la Apariencia Crackear mi programa Recuperar las contraseas de los usuarios Recuperar los Permisos de los usuarios NTFS Pasa tus discos y cassettes a CDROM De MID a WAV de WAV a MID Conecta dos ordenadors por puerto paralelo MACROS en Word Nociones de Internet Recuperar informacin de un disquete o disco duro Hacer un Disco Virtual en RAM EncendeApaga ordenador Automtcmente Arranque XP MBR - BIOS Quitar el Botn de Inicio VIRUS keyloger Puerto 5000 Proteger Carpetas FORMATEAR NTFS - FAT Pasar a PDF

360 No Cambies ! Hacer imagen NetMeeting eMule KaZaA Yahoo+POP3 Winzip Grabar CDDVD Snagit GIF animados Eliminar Popup Xara Flash Animat Screen WinHTTrack VNC WAP La hora AceMacro Skipe - PalTalk Troyanos Cortafuego XP Otros Bloquear Teclas y Teclado XP en CDROM !! MSDOS CDROM Servidor SMTP y Envo MSDOS Web y Correo Annimo !!! Instalar Win98 despus de XP Game Boy Redes Discoduro Favoritos Algunas Pginas C EyeToy PS2-PC Ver Televisin

HacerPublicidad FTP Varios Preguntas Curiosidades MUY DIVER :-) Unas palabras Password Hotmail Nmeros de Serie Crack Pginas Web Resumen Enlaces

Visual Basic-8
<0 > <1 > <2 > <3 > <4 > <5 > <6 > <7 > <8 > <9 > <10 > <11 > <12 > <13 > <14 >

Fechas y horas - Insercin de controles en tiempo de ejecucin.


Para los paises latino-americanos el primer da de la semana es el Lunes (vbMonday) Para los paises anglosajones el primer da de la semana es el Domingo (vbSunday) vbSunday vbMonday vbTuesday vbThurday vbFriday vbSaturday 1 2 3 5 6 7

vbWednesday 4

Fecha y hora actual

MsgBox Now

25/2/03 16:40:24

Fecha actual Hora actual Formato de horas Devuelve la hora Devuelve el minuto Devuelve el segundo Formato de fecha Devuelve el ao Devuelve el mes Devuelve el da Devuelve nmero del da Devuelve nombre del da

MsgBox Date MsgBox Time t = #20:45:32 PM# MsgBox Hour (t) MsgBox Minute (t) MsgBox Second (t) f = #2/23/2003# (mes, da, ao) MsgBox Year (f) MsgBox Month (f) MsgBox Day (f) MsgBox WeekDay (f, vbMonday) MsgBox WeekDayName (f, vbMonday)

25/2/03 16:40:24 20 45 32

2003 2 23 7 Domingo

Pasa a fecha

f = DateSerial (2003, 6, 28) MsgBox DateSerial (2003, 6, 28)

f = #6/28/2003# (mes,da,ao) 28/6/2003 28/6/2003 t = #20:45:32# 20:45:32 20:45:32

Pasa a fecha Pasa a horas

MsgBox DateValue (f) t = TimeSerial (20, 45, 32) MsgBox TimeSerial (20,45,32)

Pasa a horas Pasa a fecha u hora

MsgBox TimeValue (t) CDate (#9/28/2003#) CDate (#4:45:23 PM#)

Formatos de fecha y hora. MsgBox Format(Time, "Long Time") MsgBox Format(Time, "Short Time") MsgBox Format(Date, "Long Date") MsgBox Format(Date, "Short Date") 16:10:26 16:10 mircoles, 23 de julio de 2003 23/7/2003

--

--

---_mmm . . 20:45:32 domingo, 28 septiembre 2003 domingo, sep 28 2003 dom, septiembre 28 2003 domingo, septiembre 20 2003 28, de septiembre de 2003

Hora t = #20:45:32# Fecha f = #9/28/2003# F y H ft = #9/28/2002 20:45:32# MsgBox Format(t, "hh:mm:ss AMPM") MsgBox Format(f, "dddd, d mmmm yyyy") MsgBox Format(f, "dddd, mmm d yyyy") MsgBox Format(f, "ddd, mmmm d yyyy") MsgBox Format(f, "dddd, mmmm d yy") MsgBox Format(f, "d, \de mmmm \de yyyy")

Diferencia entre dos fechas o tiempos. DateDiff(Intervalo, fechavieja, fechanueva, vbMonday) Intervalo = "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s"

Private Sub Command1_Click() viejo = #12/24/2002 10:40:24# nuevo = Now Enaos = DateDiff("yyyy", viejo, nuevo, vbMonday) Enmeses = DateDiff("m", viejo, nuevo, vbMonday) Endias = DateDiff("d", viejo, nuevo, vbMonday) Enhoras = DateDiff("h", viejo, nuevo, vbMonday) Enminutos = DateDiff("n", viejo, nuevo, vbMonday) Ensegundos = DateDiff("s", viejo, nuevo, vbMonday) Print Enaos Print Enmeses Print Endias Print Enhoras Print Enminutos Print Ensegundos End Sub

Aadir fecha DateAdd(Intervalo, cantidad, Fecha) Intervalo = "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s" DateAdd("m", 25, Now) -------> Le aade 25 minutos a la hora actual.

Insercin de controles en tiempo de ejecucin.


- Normalmente ponemos los controles mientras se est construyendo el Formulario, esto es insertar los controles en tiempo de diseo. - Tambn se pueden colocar los controles, (especialmente las matrices de controles) cuando se carga el programa, esto es insertar los controles en tiempo de ejecucin.

1.- Creamos un nuevo proyecto EXE estndar y colocamos un TextBox. 2.- Al TextBox anterior le ponemos, en sus Propiedades, de nombre (Nombre) = aa y en su Propiedad Text = (ponerlo vacio) 3.- Marcamos el casillero aa / Botn derecho - Copiar / Botn derecho - Pegar

4.- Pulsamos S. El casillero aa se habr convertido en aa(0) y el otro en aa(1) 5.- Eliminamos del Formulario el aa(1), nos quedamos slo con el aa(0)

6.- Ahora creamos un nuevo control TextBox llamado bb(0) al lado del aa(0), de la misma forma que creamos al aa.

7.- Ponemos el siguiente cdigo...

Dim total Private Sub aa_Change(Index As Integer) Print Index If (aa(Index) > 5) And (aa(Index) < 7) Then bb(Index) = "Bien" If (aa(Index) > 7) And (aa(Index) < 10) Then bb(Index) = "Notable" If aa(Index) < 5 Then bb(Index) = "Insuficiente" End Sub Private Sub Form_Load() total = InputBox("Cuntos alumnos hay en esta clase? ") Dim i As Integer For i = 1 To total Load aa(i) aa(i).Top = 10 + i * 400 aa(i).Visible = True Load bb(i) bb(i).Top = 10 + i * 400 bb(i).Visible = True Next i aa(0).Visible = False bb(0).Visible = False End Sub

El bucle For-Next junto con el Load aa(i) va creando y colocando los controles en el momento de cargar el Formulario. El aa(i).Top situa uno debajo del otro. Fjate que a los TextBox: aa y bb no les he puesto el .Text (esto es porque esa es su propiedad por defecto y no es obligatorio ponerla) Es decir se puede poner aa(Index).Text > 5 o smplemente aa(Index) > 5 En este programa, al poner una nota del 0 al 9 en los casilleros de la izquierda, obtenemos su calificacin correspondiente en su casillero de la derecha.

MACROS de Visual Basic en el Word de Microsoft (enlace)

Eventos. Formulario con fondo transparente. OLE con Word. Eventos


Son sucesos que pueden ocurrir durante un programa. Click DblClick KeyDown KeyPress KeyUp MouseDown MouseMove MouseUp Change Load Unload Resize Pulsar sobre un control Pulsar dos veces sobre un control Bajada de tecla Pulsar una tecla Subida de tecla Bajada del botn del ratn Mover el ratn sobre un control Subida del botn del ratn Cambio del valor del control El momento de la carga del Formulario El momento de la descarga del Formulario Al cambiar el tamao del Formulario

Veamos algunos ejemplos: 1.- Crear un Proyecto y en las Propiedades del Formulario poner: WindowState ---> 2- Maximize 2.- Poner un Botn (Command1) 3.- Escribimos las siguientes rdenes en el cdigo del Botn. El Proyecto dibujar un crculo de color, radio y posicin aleatoria, cada vez que hagamos un Click en el Botn.

Private Sub Command1_Click() Randomize Timer X = Rnd * 14000 Y = Rnd * 9000 r = Rnd * 200 c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) Circle (X, Y), r, c End Sub

Ahora modificamos el Proyecto: 1.- Borramos los cdigos que hay dentro del Command1_Click 2.- Ahora cambiamos el Evento a MouseMove

3.- Y copiamos de nuevo el Cdigo.

Private Sub Command1_MouseMove(Button As_ Integer, Shift As Integer, X As Single, Y As Single) Randomize Timer X = Rnd * 14000 Y = Rnd * 9000 r = Rnd * 200 c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) Circle (X, Y), r, c End Sub

Ahora los crculos se dibujarn cuando Movamos el Ratn sobre el Botn.

Si ponemos el Evento KeyPress, los crculos se dibujarn cuando est marcada (Focus) el Botn y pulsemos cualquier tecla.
Private Sub Command1_KeyPress(KeyAscii As Integer) Randomize Timer X = Rnd * 14000 Y = Rnd * 9000 r = Rnd * 200 c = RGB(Rnd * 255, Rnd * 255, Rnd * 255) Circle (X, Y), r, c End Sub

Tambin podras poner dos eventos a la vez en el mismo Control, por ejemplo haz que en los cdigos aparezcan dos Command1, uno con el Evento Click y otro con el Evento KeyPress.

Veamos otro ejemplo: En este caso el cuando Cambie el Text1 se escribir el doble. Y cuando Click el Command1 se escribir el triple.

Private Sub Text1_Change() Text2.Text = 2 * Text1.Text End Sub Private Sub Command1_Click() Text3.Text = 3 * Text1.Text End Sub

Cambia el evento del Command1 al evento Command1_MouseMove y cuando muevas el ratn sobre el botn saldr el triple. Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Text3.Text = 3 * Text1.Text End Sub

Te propongo este ejercicio: 1.- El Formulario debe estar Maximizado cuando se ejecute (WindowState ---> 2Maximize) 2.- Cada vez que hagas un Doble Click sobre el Formulario se deben dibujar circulos aleatorios. 3.- Que los crculos estn rellenos. Para ello la Propiedad del Formulario FillStyle ---> 0 -Solid y dentro del cdigo y antes de Circle .......... pones Form1.Fillcolor = c

Formulario con fondo transparente:


Baja ste proyecto: shaped.zip (10 K) Te situas sobre el control image: ImgJuicy y cambias el dibujo en su Propiedad: Picture. Si colocas un gif de fondo transparente, tendr mejor efecto. Gif

Otro ejemplo de Formulario transparente: howto_clock_face.zip (21 K)

OLE con Word


Aqu vamos a tratar de ver un documento Word en una aplicacin de Visual Basic.

Para ello abrimos un Formulario e insertamos un control OLE1 Crea un documento llamado: C:\midocumento.doc Bajar el archivo: OLEword.zip (2 K)

LEN, LEFT, RIGHT y MID. Tablas. LEN Cuenta el nmero de carcteres.

nom = "Juan Antonio" c = LEN (nom) MsgBox c ------------> 12

LEFT Devuelve los primeros carcteres de la izquierda de una cadena. nom = "Juan Antonio" izq = LEFT (nom, 4) Ejemplo:
nom = "Juan Antonio" r = "" For n = 1 To Len(nom) r = r & Left(nom, n) & vbCrLf Next n MsgBox r ' vbCrLf hace un cambio de lnea.

---------> Juan

RIGHT Devuelve los ltimos carcteres de la derecha de una cadena. nom = "Juan Antonio" izq = RIGHT (nom, 7) Antonio

--------->

Ejemplo:
nom = "Juan Antonio" r = "" For n = 1 To Len(nom) r = r & Right(nom, n) & vbCrLf Next n MsgBox r

MID Devuelve los n carcteres despus del m. nom = "Juan Antonio" izq = MID (nom, 2, 3) uan Ejemplos:
nom = "Juan Antonio" r = "" For n = 1 To Len(nom) x = Mid(nom, n, 1) r = r & x & "-" Next n MsgBox r i-o------> J-u-a-n- -A-n-t-o-n-

--------->

nom = "Juan Antonio" r = "" For n = Len(nom) To 1 Step -1 x = Mid(nom, n, 1) r = r & x & "-" Next n MsgBox r u-J------> o-i-n-o-t-n-A- -n-a-

Cambia la letra "n" por la "M"


nom = "Juan Antonio" r = "" For n = 1 To Len(nom) x = Mid(nom, n, 1)

If x = "n" Then Mid(nom, n, 1) = "M" Next n MsgBox nom -------> JuaM aMtoMio

CHR y ASC son complementarios. a CHR le ponemos un nmero y nos devuelve su carcter. a ASC le ponemos un carcter y nos devuleve su nmero. CHR (97) ------> a ASC ("b") ------> 98 Codificacin. A cada carcter le suma un nmero para cambiarlo por el siguente carcter. Juan ---> Kvbo En este caso le hemos aadido 1 a cada carcter.

nom = "Juan Antonio" r = "" h = 1 ' El valor de h lo podemos cambiar For n = 1 To Len(nom) x = Mid(nom, n, 1) r = r & Chr(Asc(x) + h) Next n MsgBox r

Te propongo el siguiente ejercicio: Elegir un archivo de texto (o de lo que sea). Elegir un nmero y codificar el archivo. Luego guardarlo

. Y sabras hacer este otro... a los caracteres impares le aade un 4 y a los caracteres pares le aade un 7.

Tablas
Se utiliza para que una variable tenga subndices: a(0), a(1), a(2), a(3), a(4), a(5), a(6). Se declara de esta manera: DIM a(6) De esta forma se establece que tendr 7 subndices (del 0 .... al 6) Puede ocurrir que al principio no sepamos los subndices o dimensiones que va a tener, en este caso la declaramos de esta manera: DIM a ( ) Cuando durante la ejecucin del programa conozcamos sus dimensiones, la volvemos a declarar: ReDim a(c) Al volverla a declarar, los datos que tena guardado los pierde, si no queremos que los pierda, la redimensionamos as: ReDim Preserve a(c) 47.- Guardar y Ver datos en una Tabla de dos dimensiones.

a(1,1) a(1,2) a(2,1) a(2,2) a(3,1) a(3,2) a(4,1) a(4,2) a(5,1) a(5,2) a(6,1) a(6,2) a(7,1) a(7,2) a(8,1) a(8,2) a(9,1) a(9,2)

Dim a(10, 2) Dim x, n Private x = x + a(x, 1) a(x, 2) End Sub Sub Command1_Click() 1 = Text1.Text = Text2.Text

Private Sub Command2_Click() n = n + 1 Text3.Text = a(n, 1) Text4.Text = a(n, 2) End Sub Private Sub Command3_Click() x = 0 n = 0 End Sub

Cada vez que damos a Iniciar, tanto X como N se ponen a 0. En el caso de Guardar, se sobreescriben los valores anteriores. En el caso de Ver se vuelven a ver los valores. Cuando cerramos la aplicacin, los valores se pierden, para que no se pierdan tendramos que guardalos en un archivo en vez de una tabla.

Dim a() Dim x, n Dim k Private Sub Command1_Click() x = x + 1 a(x, 1) = Text1.Text a(x, 2) = Text2.Text End Sub Private Sub Command2_Click() n = n + 1 Text3.Text = a(n, 1) Text4.Text = a(n, 2) End Sub Private Sub Command3_Click() x = 1 n = 1 End Sub Private Sub Command4_Click() k = k + 1 ReDim a(k, 2) Text5.Text = k End Sub Private Sub Form_Load() k = 10 End Sub

En este otro caso Ampliamos la dimensin de la Tabla al pulsar el Botn "Redimensionar". Borrndose los valores ya almacenados. Si no queremos que se borren los valores ya almacenados, ReDimensionamos de esta manera: ReDim Preserve a(k,2)

48.- Cambiar letras. Se introduce una palabra. Se calcula las letras que tiene. Se Redimensiona una matriz con ese nmero de letras. Se desordenan una cantidad de nmeros. Se guardan las letras segn el desorden anterior. Aparece la palabra anterior con sus letras desordenadas.

Dim a() As Integer Dim palabra Private Sub Cambia_Click() Randomize Timer palabra = Text1.Text c = Len(palabra) ReDim a(c) ' Vamos a cambiar numeros ' Ejemplo: 1,2,3,4 -- > 3,1,4,2 For n = 1 To c saca: g = 1 + Int(Rnd * c) For k = 1 To c ' SI Repetido vuelve a saca If a(k) = g Then GoTo saca Next k a(n) = g ' Print g;"-"; Next n Text1.Text = "" Text2.Text = "" For m = 1 To c Text2.Text = Text2.Text & Mid(palabra, a(m), 1) Next m End Sub Private Sub Probar_Click() If Text3.Text = palabra Then

q = MsgBox("Has acertado", , "Enhorabuena") Else q = MsgBox("No has acertado", , "Repite") End If End Sub Private Sub Salir_Click() End End Sub Private Sub Solucion_Click() Text1.Text = palabra End Sub

Carpetas y Archivos Carpetas Comprobar si la carpeta "C:\Europa" existe. En caso que exista que salga un mensaje. En caso que no exista que se cree la carpeta y varias subcarpetas.
Private Sub Command1_Click() Carp = Dir("C:\Europa", vbDirectory) If Carp <> "" Then MsgBox ("La Carpeta Existe") Else MsgBox ("La Carpeta No Existe, la voy a crear.") MkDir ("C:\Europa") MkDir ("C:\Europa\Espaa") MkDir ("C:\Europa\Italia") MkDir ("C:\Europa\Francia") MsgBox ("Ya han sido creadas. Consulta C:") End If End Sub

Borrar carpetas. Antes de borrar una carpeta debemos borrar su contenido. Para borrar archivos: Kill *.* Para borrar carpetas: Rmdir

Private Sub Command2_Click() RmDir RmDir RmDir RmDir ("C:\Europa\Espaa") ("C:\Europa\Italia") ("C:\Europa\Francia") ("C:\Europa")

End Sub

Archivos. Crear un archivo y escribir datos. (Machaca los datos anteriormente escritos) (Output)
Private Sub Command1_Click() Nombre = "Juan Antonio" DNI = "12345678" Open "C:\borrame.txt" For Output As #1 Write #1, Nombre, DNI Close #1 End Sub

Pulsa varias veces el Botn. Consulta C:\borrame.txt. Cambia Write por Print Crear un archivo y aadir datos. (Append)
Private Sub Command2_Click() Nombre = "Juan Antonio" DNI = "12345678" Open "C:\borrame.txt" For Append As #1 Print #1, Nombre, DNI Close #1 End Sub

Pulsa varias veces el Botn. Consulta C:\borrame.txt.

Introducir datos.
Private Sub Command1_Click() Nombre = Text1.Text DNI = Text2.Text Open "C:\borrame.txt" For Append As #1 Write #1, Nombre, DNI Close #1 End Sub ' ' ' ' Insertamos los datos con Write Prueba Print #1 Nombre; DNI; El ; une las palabras. Consulta el archivo

Visualizar datos.
Private Sub Command1_Click() Close Open "C:\borrame.txt" For Input As #1 End Sub Private Sub Command2_Click() If EOF(1) Then MsgBox ("Fin de archivo") Else Input #1, Nombre, DNI Text1.Text = Nombre Text2.Text = DNI End If End Sub

Si en vez de poner: Input #1, Nombre, DNI Ponemos: Line Input #1, Nombre Saldr cada rengln.

Comprobar Comprobar si el archivo C:\borrame.txt existe. En caso que exista que se muestre. En caso que no exista que se cree.

En las Propiedades del Text1 debemos poner: Multiline = True ScrollBars = 2 - Vertical

Private Sub Command1_Click() Arch = Dir("C:\borrame.txt", vbFile) If Arch <> "" Then MsgBox ("El archivo Existe") Open "C:\borrame.txt" For Input As #1 Do While Not EOF(1) Line Input #1, renglon todo = todo & renglon & vbCrLf Loop Text1.Text = todo Else MsgBox ("No existe, voy a crearlo.") Open "C:\borrame.txt" For Output As #1 MsgBox ("Ya est creado.") End If End Sub

Tamao de un archivo en bytes y fecha de creacin.


Private Sub Command1_Click() longitud = FileLen("C:\borrame.txt") Print longitud fecha = FileDateTime("C:\borrame.txt") Print fecha End Sub

Atributos de un archivo. vbNormal vbReadOnly vbHidden vbSystem vbDirectory vbArchive ltima copia Poner atributos:
SetAttr "C:\borrame.txt", vbHidden + vbReadOnly

0 1 2 4 16 32

Normal Slo lectura Oculto Sistema Directorio El archivo ha cambiado desde su

Consultar atributos:
atri = GetAttr("C:\borrame.txt")

atri ser igual a 1 + 2 = 3 Quitar atributos:


SetAttr "C:\borrame.txt", 0

Base de datos con fichero.


Otra base de datos mediante control de archivos: Ficherobase.exe (28 K) Cdigo fuente: Ficherobase.zip ( 2 K)

Construcin de un navegador de Internet. Aadimos al cuadro de herramientas el control Microsoft Internet Controls: Proyecto/Componentes/Controles/Microsoft Internet Controls.

Lo insertamos (WebBrowser1) en el Formulario y lo agrandamos un poco. Situamos un Label con la Propiedad Caption en blanco. Dentro del Label situamos 5 Botones. Ponemos en blanco Caption.

Ponemos Sytle en 1. Graphical En cada Picture situamos uno de los dibujos que puedes bajar de aqu: web.zip (3 K) Aadimos otro Label que pone Direccin y un TextBox. Quedar as:

Private Sub Command1_Click() ' Atrs On Error Resume Next WebBrowser1.GoBack Text1.Text = WebBrowser1.LocationURL ' depurar End Sub Private Sub Command2_Click() ' Adelante On Error Resume Next WebBrowser1.GoForward Text1.Text = WebBrowser1.LocationURL ' depurar End Sub Private Sub Command3_Click() ' Inicio al disco C

Text1.Text = "file://C:" WebBrowser1.Navigate Text1.Text End Sub Private Sub Command4_Click() ' Actualizar WebBrowser1.Refresh End Sub Private Sub Command5_Click() ' Detener WebBrowser1.Stop End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 And Text1.Text <> "" Then WebBrowser1.Navigate Text1.Text ' KeyAscii= 13 Equivale a la tecla Enter ' <> "" Equivale a: no-vaco End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Podemos mejorarlo poniendo un control StatusBar ' (Proyectos/Componentes/Microsoft Windows Common Controls 6.0 ' y luego insertamos un StatusBar Private Sub WebBrowser1_DownloadBegin() StatusBar1.Panels(1).Text = "Cargando Pgina..." End Sub Private Sub WebBrowser1_DownloadComplete() StatusBar1.Panels(1).Text = "Listo" End Sub

Le das las dimensiones apropiadas a los controles, e incluso puedes hacer que los controles se adapten a las dimensiones del Formulario. Puedes hacer que el Formulario se presente Maximizado cuando se cargue.

Bjate ste navegador a pantalla completa. Internet.exe (28 KB) Comprobars que cuando el enlace sale a otra ventana, sta sale con el Internet Explorer, pero eso no es un problema del navegador, sino que tu sistema operativo est configurado para que los archivos htm se abran con sta ltama aplicacin. sto lo puedes corregir mediante: Mi PC / Herramientas / Opciones de carpetas / Tipos de archivos.

Y Modificar el programa que abre .HTM Informacin de la BIOS

Private Sub Command1_Click() On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS", , 48) For Each objItem In colItems MsgBox "BiosCharacteristics: " & objItem.BiosCharacteristics MsgBox "BIOSVersion: " & objItem.BIOSVersion MsgBox "BuildNumber: " & objItem.BuildNumber MsgBox "Caption: " & objItem.Caption MsgBox "CodeSet: " & objItem.CodeSet MsgBox "CurrentLanguage: " & objItem.CurrentLanguage MsgBox "Description: " & objItem.Description MsgBox "IdentificationCode: " & objItem.IdentificationCode MsgBox "InstallableLanguages: " & objItem.InstallableLanguages MsgBox "InstallDate: " & objItem.InstallDate MsgBox "LanguageEdition: " & objItem.LanguageEdition MsgBox "ListOfLanguages: " & objItem.ListOfLanguages MsgBox "Manufacturer: " & objItem.Manufacturer MsgBox "Name: " & objItem.Name MsgBox "OtherTargetOS: " & objItem.OtherTargetOS MsgBox "PrimaryBIOS: " & objItem.PrimaryBIOS MsgBox "ReleaseDate: " & objItem.ReleaseDate MsgBox "SerialNumber: " & objItem.SerialNumber MsgBox "SMBIOSBIOSVersion: " & objItem.SMBIOSBIOSVersion MsgBox "SMBIOSMajorVersion: " & objItem.SMBIOSMajorVersion MsgBox "SMBIOSMinorVersion: " & objItem.SMBIOSMinorVersion MsgBox "SMBIOSPresent: " & objItem.SMBIOSPresent MsgBox "SoftwareElementID: " & objItem.SoftwareElementID MsgBox "SoftwareElementState: " & objItem.SoftwareElementState MsgBox "Status: " & objItem.Status MsgBox "TargetOperatingSystem: " & objItem.TargetOperatingSystem MsgBox "Version: " & objItem.Version Next End Sub

Otro: BiosInfo.zip (6 K)

Abrir y cerrar puerta del CDROM

Private Declare Function mciSendString Lib "winmm.dll" _ Alias "mciSendStringA" (ByVal lpstrCommand As String, _ ByVal lpstrReturnString As String, ByVal uReturnLength As Long,_ ByVal hwndCallback As Long) As Long ' Las tres lneas anteriores mejor que vayan en un slo rengln, quitar _ Sub CDControl(action As Boolean) If action Then 'Abrir CDROM retvalue = mciSendString("set CDAudio door open", returnstring, 127, 0) Else 'Cerrar CDROM retvalue = mciSendString("set CDAudio door closed", returnstring, 127, 0) End If End Sub Private Sub Command1_Click() CDControl True End Sub Private Sub Command2_Click() CDControl False End Sub

Activar una aplicacin que est en la misma carpeta que el programa de Visual Basic
Private Sub Command1_Click() a = App.Path & "\calc.exe" m = Shell(a, 1) End Sub

Excel y Visual Basic

Private Sub Command1_Click() Dim xls As Object Set xls = CreateObject("Excel.Application") xls.Visible = False xls.Workbooks.Open "c:\excelvb\source.xls" xls.Range("a1").Value = Text1.Text Text2.Text = xls.Range("a3").Value End Sub Private Sub Command2_Click() Archivo = App.Path & "\source.xls" Set xls = CreateObject("Excel.Application") xls.Workbooks.Open Archivo xls.Visible = False xls.Worksheets("Hoja1").Activate xls.Worksheets("Hoja1").Range("A1").Value = 666 xls.Worksheets("Hoja1").Range("A2").Value = 777 xls.Worksheets("Hoja1").Range("A3").Value = 888 'Para leer ' ValorCelda=pxls.Worksheets("Hoja1").Range("A3").Value xls.ActiveWorkbook.Close SaveChanges:=True End Sub

Introducir y leer datos de una celdilla de Excel


Tenemos una Hoja de Clculo Excel llamada Ejemplo.xls y ubicada en la misma carpeta que la aplicacin de Visual Basic. En caso que est en otra carpeta pondramos: Archivo = "C:\Carpeta\Ejemplo.xls" Elegimos una Hoja (o Sheet), un rango, por ejemplo: A3 y un valor. Al pulsar el botn el valor se insertar en la celda elegida o bien se leer de ella, segn el botn pulsado.

Private Sub Command1_Click() h = Text1.Text l = Text2.Text n = Text3.Text Valor = Text4.Text hoja = "Hoja" & CStr(h) rango = Text2.Text & Text3.Text Archivo = App.Path & "\Ejemplo.xls" Set xls = CreateObject("Excel.Application") xls.Workbooks.Open Archivo xls.Visible = False xls.Worksheets(hoja).Activate xls.Worksheets(hoja).Range(rango).Value = Valor xls.ActiveWorkbook.Close SaveChanges:=True MsgBox ("Dato introducido.") End Sub Private Sub Command2_Click() h = Text5.Text l = Text6.Text n = Text7.Text hoja = "Hoja" & CStr(h) rango = Text6.Text & Text7.Text Archivo = App.Path & "\Ejemplo.xls" Set xls = CreateObject("Excel.Application") xls.Workbooks.Open Archivo xls.Visible = False xls.Worksheets(hoja).Activate Text8.Text = xls.Worksheets(hoja).Range(rango).Value xls.ActiveWorkbook.Close MsgBox ("Dato leido.") End Sub

S-ar putea să vă placă și