cv.cm

Programación · Lenguajes de programación

Tutorial de Visual Basic .NET para principiantes

7 min de lectura

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 Module

Un 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.

TipoEjemploNotas
IntegerDim n As Integer = 4232 bits; Long es de 64 bits
DoubleDim x As Double = 3.14Punto flotante de 64 bits
DecimalDim price As Decimal = 19.99DDecimal exacto, bueno para dinero
StringDim s As String = "hello"Une cadenas con &
CharDim c As Char = "a"cUn solo carácter, sufijo c
BooleanDim ok As Boolean = TrueTrue / False
DateDim 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 Module

Control 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
Loop

Estas 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)))          ' 9

Arreglos, 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}")
Next

Los 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
Next

Como 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 Try

Un 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 2

VBA: 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 Sub

Adó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.

Todos los tutoriales de programación