Programación · Lenguajes de programación
Tutorial de Visual Basic .NET para principiantes
Respuesta corta
Visual Basic .NET (VB.NET) es un lenguaje orientado a objetos y de tipado estático para la plataforma .NET, con palabras clave parecidas al inglés como Dim, If ... Then ... End If y For ... Next. No distingue mayúsculas de minúsculas y usa las mismas bibliotecas de .NET que C#. Crea un proyecto con dotnet new console -lang VB y ejecútalo con dotnet run. VBA, el lenguaje de macros de Microsoft Office, es un pariente más antiguo con una sintaxis similar.
Qué es Visual Basic .NET y quién lo usa
VB.NET es el sucesor en .NET del Visual Basic clásico (VB6). Se compila al mismo lenguaje intermedio que C#, por lo que ambos lenguajes pueden compartir bibliotecas e incluso combinarse en una misma solución. Se usa sobre todo en aplicaciones de escritorio para Windows (Windows Forms, WPF), herramientas internas de empresa, aplicaciones web ASP.NET y el mantenimiento de bases de código VB existentes.
Microsoft sigue dando soporte a Visual Basic en el .NET moderno, pero ha dicho que no planea evolucionar el lenguaje con grandes funciones nuevas; las novedades de .NET suelen aparecer primero en C#. Para un proyecto nuevo sin código VB previo, C# es la elección más común, pero VB.NET sigue siendo un lenguaje legible para aprender a programar y para software empresarial.
Instala y ejecuta Hello, world
Instala el SDK de .NET (Windows, macOS o Linux). Visual Studio en Windows también incluye plantillas de Visual Basic y un diseñador visual de formularios.
dotnet new console -lang VB -o HelloVB
cd HelloVB
dotnet run
# Hello, world!' Program.vb
Imports System
Module Program
Sub Main(args As String())
Console.WriteLine("Hello, world!")
End Sub
End ModuleUn Module contiene procedimientos compartidos, y Sub Main es el punto de entrada. Los comentarios empiezan con un apóstrofo '. Cada instrucción normalmente termina al final de la línea; no hay punto y coma ni llaves.
Variables y tipos básicos
Declara las variables con Dim name As Type. Con Option Infer On (el valor por defecto) puedes omitir el tipo cuando asignas un valor. Pon Option Strict On al principio de cada archivo (o actívalo en el proyecto) para que las conversiones implícitas arriesgadas se conviertan en errores de compilación.
| Tipo | Ejemplo | Notas |
|---|---|---|
| Integer | Dim n As Integer = 42 | 32 bits; Long es de 64 bits |
| Double | Dim x As Double = 3.14 | Punto flotante de 64 bits |
| Decimal | Dim price As Decimal = 19.99D | Decimal exacto, bueno para dinero |
| String | Dim s As String = "hello" | Une cadenas con & |
| Char | Dim c As Char = "a"c | Un solo carácter, sufijo c |
| Boolean | Dim ok As Boolean = True | True / False |
| Date | Dim d As Date = #2026-01-15# | Valor de fecha y hora |
Option Strict On
Module Types
Sub Main()
Dim name As String = "Ana"
Dim age = 30 ' inferred as Integer
Console.WriteLine(name & " is " & age.ToString())
Console.WriteLine($"Next year {name} is {age + 1}")
Console.WriteLine(7 / 2) ' 3.5 (always Double)
Console.WriteLine(7 \ 2) ' 3 (integer division)
Console.WriteLine(7 Mod 2) ' 1
End Sub
End ModuleControl de flujo
Dim score = 85
If score >= 90 Then
Console.WriteLine("A")
ElseIf score >= 80 Then
Console.WriteLine("B")
Else
Console.WriteLine("C")
End If
Select Case score
Case 90 To 100
Console.WriteLine("excellent")
Case 80 To 89
Console.WriteLine("good")
Case Else
Console.WriteLine("keep going")
End Select
For i = 1 To 3
Console.WriteLine($"{i} squared is {i * i}")
Next
Dim n = 3
Do While n > 0
n -= 1
LoopEstas instrucciones van dentro de un Sub. For i = 1 To 3 incluye ambos extremos; añade Step -1 para contar hacia atrás. For Each item In collection recorre cualquier colección. Usa Exit For o Exit Do para salir antes de un bucle. En las condiciones, prefiere AndAlso y OrElse: dejan de evaluar en cuanto se conoce el resultado, mientras que And y Or siempre evalúan ambos lados.
Sub, funciones y lambdas
Un Sub no devuelve un valor; una Function sí. Los parámetros se pasan ByVal (una copia) por defecto; ByRef permite que el procedimiento cambie la variable de quien lo llama. Los parámetros pueden ser Optional con un valor por defecto.
Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
Sub Greet(Optional name As String = "world")
Console.WriteLine($"Hello, {name}!")
End Sub
Sub Increment(ByRef value As Integer)
value += 1
End Sub
' Inside Sub Main:
Dim x = 5
Increment(x) ' x is now 6
Greet() ' Hello, world!
Dim square = Function(n As Integer) n * n ' lambda
Console.WriteLine(square(Add(1, 2))) ' 9Arreglos, List y Dictionary
Dim nums() As Integer = {3, 1, 2}
Dim five(4) As Integer ' 5 elements, indexes 0 to 4
Array.Sort(nums)
Console.WriteLine(String.Join(", ", nums)) ' 1, 2, 3
Dim names As New List(Of String) From {"Ana", "Ben"}
names.Add("Cleo")
Console.WriteLine(names.Count) ' 3
Dim ages As New Dictionary(Of String, Integer)
ages("Ana") = 30
ages("Ben") = 17
For Each pair In ages
Console.WriteLine($"{pair.Key}: {pair.Value}")
NextLos arreglos y las listas se indexan desde 0 con paréntesis: nums(0). Los tipos genéricos usan Of: List(Of String) es la forma en VB del List<string> de C#. Ten en cuenta que Dim five(4) declara el límite superior, no la longitud, así que el arreglo tiene cinco elementos.
Características distintivas: clases, propiedades y consultas LINQ
VB.NET es totalmente orientado a objetos: las clases tienen propiedades, métodos, constructores (Sub New), herencia (Inherits), interfaces (Implements) y eventos (Event, RaiseEvent, Handles). Las consultas LINQ pueden escribirse con una sintaxis de consulta legible.
Public Class Person
Public Property Name As String
Public Property Age As Integer
Public Sub New(name As String, age As Integer)
Me.Name = name
Me.Age = age
End Sub
End Class
' Inside Sub Main:
Dim people As New List(Of Person) From {
New Person("Ana", 30),
New Person("Ben", 17)
}
Dim adults = From p In people
Where p.Age >= 18
Select p.Name
For Each adultName In adults
Console.WriteLine(adultName) ' Ana
NextComo VB no distingue mayúsculas de minúsculas, Name y name son el mismo identificador; dentro del constructor, Me.Name se refiere a la propiedad y name al parámetro. Otras comodidades propias de VB son los bloques With ... End With, los literales XML y el espacio de nombres My para tareas comunes.
Manejo de errores
VB.NET usa manejo estructurado de excepciones: Try, Catch, Finally y Throw. Un Catch puede incluir un filtro When. El estilo antiguo On Error GoTo de VB6 y VBA todavía compila, pero no debe usarse en código .NET nuevo.
Function ParseAge(s As String) As Integer
Dim n As Integer
If Not Integer.TryParse(s, n) Then
Throw New FormatException($"Not a number: {s}")
End If
If n < 0 Then Throw New ArgumentOutOfRangeException(NameOf(s))
Return n
End Function
' Inside Sub Main:
Try
Console.WriteLine(ParseAge("abc"))
Catch ex As FormatException
Console.WriteLine("Error: " & ex.Message) ' Error: Not a number: abc
Finally
Console.WriteLine("done")
End TryUn programa pequeño y completo: frecuencia de palabras
Imports System
Imports System.Collections.Generic
Imports System.Linq
Module WordCount
Sub Main()
Dim text = "the cat and the hat and the bat"
Dim counts As New Dictionary(Of String, Integer)
For Each word In text.Split(" "c)
If counts.ContainsKey(word) Then
counts(word) += 1
Else
counts(word) = 1
End If
Next
Dim top = counts.OrderByDescending(Function(kv) kv.Value).Take(2)
For Each kv In top
Console.WriteLine($"{kv.Key} {kv.Value}")
Next
End Sub
End Module
' the 3
' and 2VBA: Visual Basic dentro de Microsoft Office
Visual Basic for Applications (VBA) es el lenguaje de macros integrado en aplicaciones de Microsoft Office como Excel, Word y Access. Se basa en el Visual Basic clásico, no en .NET: se ejecuta dentro de la aplicación de Office, usa el modelo de objetos de Office (libros, rangos, documentos) y se edita en el editor de VBA (Alt+F11 en Windows). La sintaxis básica de Dim, If, For y Sub es la misma, lo que hace útil el conocimiento de VB.NET para VBA.
' VBA in Excel: write the squares of 1 to 5 into column A
Sub FillSquares()
Dim i As Long
For i = 1 To 5
Cells(i, 1).Value = i * i
Next i
MsgBox "Done"
End SubAdónde ir después
- Microsoft Learn: la documentación de Visual Basic, incluida la guía de inicio y la referencia del lenguaje.
- Aprende la biblioteca de clases base de .NET (colecciones, archivos, LINQ); se comparte con C#.
- Para aplicaciones de escritorio, prueba las plantillas de Windows Forms o WPF en Visual Studio.
- Para automatizar Office, lee la referencia de VBA en Microsoft Learn de la aplicación que uses.
Preguntas frecuentes
¿Está muerto Visual Basic .NET?
No. Tiene soporte en las versiones actuales de .NET y en Visual Studio, pero Microsoft no planea grandes funciones nuevas del lenguaje, así que la mayoría de los proyectos nuevos de .NET eligen C#.
¿Cuál es la diferencia entre VB.NET y VBA?
VB.NET es un lenguaje completo de .NET para crear aplicaciones independientes. VBA es un lenguaje de macros basado en el Visual Basic clásico que se ejecuta dentro de aplicaciones de Office como Excel; la sintaxis es parecida, pero el entorno de ejecución y las bibliotecas son distintos.
¿Debería aprender VB.NET o C#?
Si mantienes código VB o quieres una sintaxis muy legible, VB.NET está bien. Para proyectos nuevos, oportunidades de trabajo y las funciones más recientes de .NET, C# suele ser la mejor inversión, y las bibliotecas que aprendas se trasladan de un lenguaje al otro.
¿Visual Basic distingue mayúsculas de minúsculas?
No. Dim Total, total y TOTAL se refieren a la misma variable, y el editor normalmente normaliza las mayúsculas por ti.