# Visual Basic

El Visual Basic és un llenguatge de programació desenvolupat per Alan Cooper per a Microsoft. Aquest llenguatge és un dialecte del BASIC, amb importants afegits. La seva primera versió va ser presentada el 1991 amb la intenció de simplificar la programació utilitzant un ambient de desenvolupament completament gràfic que facilités la creació d'interfícies gràfiques i en certa manera també la programació en ella mateixa.

## Característiques generals

És un llenguatge fàcil d'aprendre (però amb alguns aspectes més complicats per a programadors més experts). Per tant, és tan adequat per a programadors principiants com per a experts, guiat per esdeveniments, I centrat en un motor de formularis poderós que facilita el ràpid desenvolupament d'aplicacions gràfiques. La seva principal innovació, que més tard va ser adoptada per altres llenguatges, va ser l'ús d'un tipus de llibreries, anomenades inicialment vbx i posteriorment ocx, que permeten contenir tota la funcionalitat d'un control i facilitar una ràpida incorporació als formularis.
La seva sintaxi, derivada de l'antic llenguatge BASIC, ha sigut ampliada amb el temps en afegir-s'hi les característiques típiques dels llenguatges estructurats moderns. S'hi ha afegit una implementació limitada de la Programació Orientada a Objectes (els mateixos formularis i controls són objectes), encara que s'admet el polimorfisme mitjançant l'ús de les interfícies, no admet l'herència. No requereix el maneig de punters i consta d'un maneig molt senzill de cadenes de caràcters. Disposa de diverses biblioteques per a gestió de bases de dades, podent connectar amb qualsevol base de dades d'ODBC (Open DataBase Connectivity: Informix, DBase, Access, MySQL, SQL Server, PostgreSQL,etc.) a través d'ADO (ActiveX Data Objects).
És utilitzat principalment per a aplicacions de gestió d'empreses, a causa de la rapidesa amb la qual pot fer-se un programa que utilitzi una base de dades senzilla, a més de l'abundància de programadors en aquest llenguatge.
El compilador de Microsoft genera executables que necessiten una DLL (biblioteca) perquè els seus executables funcionin, en alguns casos anomenada MSVBVMxy.DLL (acrònim de "Microsoft Visual Basic Virtual Machine x.y", sent x.y la versió) i en altres casos VBRUNXXX.DLL (acrònim de "Visual Basic Runtime X.XX"), que proveeix totes les funcions implementades en el llenguatge. A més, existeixen un gran nombre de biblioteques que faciliten l'accés a moltes funcions del sistema operatiu i la seva integració amb altres aplicacions.

## Derivats

* El seu derivat VBScript (Visual Basic Script) és el llenguatge predeterminat per pàgines web ASP (Active Server Pages).
* A més, una extensió pròpia del llenguatge anomenada Visual Basic for Applications (VBA) permet codificar mòduls (també anomenats macros) per les aplicacions de Microsoft Office.
* Especialment a partir de la versió 6 del llenguatge es permet la interacció i generació d'objectes remots que poden ser invocats des de pàgines de scripts (concretament les ASP, encara que també és possible fer un enllaç utilitzant JSP, JavaServer Pages), allotjant-les en servidors web.
* Visual Basic.NET, part de la plataforma .NET, és un llenguatge pràcticament equivalent en funcionalitats a C# (per exemple, no admet pseudopunters), afegint la capacitat de programació orientada a objectes que les seves anteriors versions (com Visual Basic 6) no posseïen: herència i polimorfisme.

## Versions

Les versions de Visual Basic per a Windows són molt conegudes, però existeix una versió de Microsoft Visual Basic 1.0 per a MS-DOS però menys difosa que data de 1992. Era un entorn que, encara que en mode de text, incloïa un dissenyador de formularis en el que es podien arrossegar i deixar anar diferents controls.
L'última versió només per a PCs de 16 bits (el Windows XP és per a PCs 32 bits), en el Windows 3.0, ja tenia una detallada biblioteca de components per a tota classe d'usos. Durant la transició de Windows 3.11 a Windows 95, va aparèixer la versió 4.0 de Microsoft Visual Basic, que podia generar programes de 16 i 32 bits a partir d'un mateix codi font, a costa d'un gran augment en la mida dels arxius "runtime" necessaris. A més, se substituïren els controls VBX pels nous OCX. Amb la versió 5.0, es va implementar per primera vegada la possibilitat de compilar un codi natiu, obtenint una millora de rendiment considerable. Tant aquesta com la posterior 6.0 suportaven característiques pròpies dels llenguatges orientats a objectes, encara que sense algunes funcionalitats importants com la de l'herència, el polimorfisme i la sobrecàrrega. La versió 6.0 continua utilitzant-se massivament, molt més després de l'aparició de l'AO.
Les versions actuals de Visual Basic es basen en la plataforma .NET, encara que mantenen moltes de les característiques del llenguatge original tenen nombroses diferències que els fan incompatibles. Moltes vegades per portar un codi escrit en Visual Basic a Visual Basic .NET és necessari reescriure part del codi. La nova versió del llenguatge és en la major part equivalent al C# encara que presenta algunes diferències. Per això hi ha un debat sobre la validesa d'aquesta nova versió del llenguatge i els seus avantatges i inconvenients sobre C#. També és integrat en el mateix entorn de desenvolupament que els altres: Visual Studio .NET.

## Codi d'exemple

Alguns exemples del llenguatge de programació;
Programa per a mostrar un missatge emergent amb les paraules "Hola món!":
Funció que retorna l'àrea d'un cercle:

## Codis d'error

Llista de codis d'error generats per Visual Basic 6.0 en temps d'execució:
* 0: Llamada a procedimiento o argumento no válidos (Crida a un procediment o argument no vàlid)
* 3: Return sin GoSub (Return sense GoSub)
* 5: Llamada a procedimiento o argumento no válidos (Crida a un procediment o argument no vàlid)
* 6: Desbordamiento (Desbordament)
* 7: Memoria insuficiente (Memòria insuficient)
* 9: El subíndice está fuera del intervalo (El subíndex està fora de l'interval)
* 10: La matriz está fija o temporalmente bloqueada (La matriu está fixa o bloquejada temporalment)
* 11: División por cero (Divisió entre zero)
* 13: No coinciden los tipos (No coincideixen els tipus)
* 14: Espacio para cadenas insuficiente (Espai de cadenes insuficient)
* 16: Expresión demasiado compleja (Expressió massa complexa)
* 17: No se puede realizar la operación solicitada (No es pot dura terme l'operació sol·licitada)
* 18: Interrupción por parte del usuario (Interrupció per part de l'usuari)
* 20: Resume sin error (Resume sense error)
* 28: Espacio de pila insuficiente (Espai de pila insuficient)
* 35: Procedimiento Sub o Function no definido (Procediment Sub o Function no definit)
* 47: Hay demasiados clientes de la aplicación DLL (Hi ha massa clients de l'aplicació DLL)
* 48: Error al cargar la biblioteca DLL (Error al carregar la biblioteca DLL)
* 49: La convención de llamadas a DLL és incorrecta (La convenció de crides a DLL no és correcta)
* 51: Error interno (Error intern)
* 52: Nombre o número de archivo incorrecto (Nom o nombre d'arxiu incorrecte)
* 53: No se ha encontrado el archivo (No s'ha trobat l'arxiu)
* 54: Modo de archivo incorrecto (Mode d'arxiu incorrecte)
* 55: El archivo ya está abierto (L'arxiu ja està obert)
* 57: Error de E/S del dispositivo (Error d'E/S del dispositiu)
* 58: El archivo ya existe (L'arxiu ja existeix)
* 59: Longitud de registro incorrecta (Longitud de registre incorrecta)
* 61: Disco lleno (Disc ple)
* 62: La entrada de datos ha sobrepasado el final del archivo (L'entrada de dades ha sobrepassat el final de l'arxiu)
* 63: Número de registro incorrecto (Nombre de registre incorrecte)
* 67: Hay demasiados archivos (Hi ha massa arxius)
* 68: El dispositivo no está disponible (El dispositiu no està disponible)
* 70: Permiso denegado (Permís denegat)
* 71: Disco no preparado (Disc no preparat)
* 74: No se puede cambiar el nombre con una unidad de disco diferente (No es pot canviar el nom amb una unitat de disc diferent)
* 75: Error de acceso a ruta o archivo (Error en l'accés a una ruta o un arxiu)
* 76: No se ha encontrado la ruta de acceso (No s'ha trobat la ruta d'accés)
* 91: La variable de tipo Object o la variable de bloque With no está establecida (La variable de tipus Object o la variable de bloc With no està establerta)
* 92: El bucle For no está inicializado
* 93: La cadena modelo no es válida
* 94: Uso no válido de Null
* 96: No se pueden desactivar eventos de objeto porque el objeto ya desencadena el número máximo de eventos que admite
* 97: No se puede llamar a una función friend de un objeto que no sea una instancia de una clase
* 98: Una llamada a una propiedad o un método no puede incluir una referencia a un objeto privado, como un argumento o un valor de retorno
* 321: Formato de archivo no válido
* 322: No se puede crear un archivo temporal necesario
* 325: Formato no válido en el archivo de recursos
* 380: El valor de la propiedad no es válido
* 381: El índice de la matriz de propiedades no es válido
* 382: No se admite Set en tiempo de ejecución
* 383: No se admite Set (propiedad de sólo lectura)
* 385: Se necesita un índice de matriz de propiedades
* 387: Set no está permitido
* 393: No se admite Get en tiempo de ejecución
* 394: No se admite Get (propiedad de sólo escritura)
* 422: No se encontró la propiedad (No s'ha trobat la propietat)
* 423: No se ha encontrado la propiedad o el método (No s'ha trobat la propietat o el mètode)
* 424: Se requiere un objeto (És necessari un objecte)
* 429: El componente ActiveX no puede crear el objeto (El component ActiveX no pot crear l'objecte)
* 430: Esta clase no admite Automatización o la interfaz esperada (Aquesta classe no admet Automatització o la interfície esperada)
* 432: No se encontró el nombre del archivo o de la clase durante la operación de Automatización (No s'ha trobat el nom de l'arxiu o de la classe durant l'operació d'Automatització9
* 438: El objeto no acepta esta propiedad o método (L'objecte no accepta aquesta propietat o mètode)
* 440: Error de Automatización (Error d'Automatització)
* 442: Se ha perdido la conexión con la biblioteca de tipos o con la biblioteca de objetos para proceso remoto. Haga clic en Aceptar para quitar la referencia. (S'ha perdut la connexió amb la biblioteca de tipus o amb la biblioteca d'objectes per processos remots. Fes clic a Acceptar per treure la referència)
* 443: El objeto de Automatización no tiene un valor predeterminado (L'objecte d'Automatització no té un valor predeterminat)
* 445: El objeto no admite esta acción (l'objecte no admet aquesta acció)
* 446: El objeto no admite argumentos con nombre (l'objecte no admet arguments amb nom)
* 447: El objeto no admite la configuración regional actual (l'objecte no admet la configuració regional actual)
* 448: No se ha encontrado el argumento con nombre (no s'ha trobat l'argument amb nom)
* 449: El argumento no és opcional (l'argument no és opcional)
* 450: Número de argumentos erróneo o asignación de propiedad no válida (nombre d'arguments erroni o assignació de propietat invàlida)
* 451: El procedimiento Let de la propiedad no está definido y el procedimiento Get no ha devuelto un objeto
* 452: Número ordinal no válido (nombre ordinal no vàlid)
* 453: No se encuentra la función de biblioteca DLL especificada (no es troba la funció de biblioteca DLL especificada)
* 454: No se encuentra el recurso de código (no es troba el recurs de còdigo)
* 455: Error en el bloqueo de los recursos de código (error al bloquejar els recursos del codi)
* 457: Esta clave ya está asociada a un elemento de esta colección (aquesta clau ja està associda a un element d'aquesta col·lecció)
* 458: La variable usa un tipo de Automatización no admitido en Visual Basic (la variable utilitza un tipus d'Automatització no admès a Visual Basic)
* 459: El objeto o la clase no admite el conjunto de eventos (l'objecte o la classe no admeten el conjunt d'events)
* 460: El formato del Portapapeles no es válido (el format del Portapapers no és vàlid)
* 461: No se ha encontrado el método o el miembro de datos (no s'ha trobat el mètode o el membre de dades)
* 462: El equipo servidor remoto no existe o no está disponible (l'equip servidor remot no existeix o no està disponible)
* 463: La clase no está registrada en el equipo local (la classe no està registrada a l'equip local)
* 481: Imagen no válida (imatge no vàlida)
* 482: Error de impresora (error d'impressora)
* 735: No se puede guardar el archivo en TEMP (No es pot guardar l'arxiu en TEMP)
* 744: No se encontró el texto de búsqueda (El text de la cerca no s'ha trobat)
* 746: Reemplazamientos demasiado largos (Substitucions massa llargues)

## Vegeu també

* Turbo Basic

## Enllaços externs

* Vbcat - Tutorials Arxivat 2019-08-26 a Wayback Machine.
* Recursos Visual Basic (castellà)
* Pàgina oficial de Visual Basic (castellà)