Visual Basic (VB) — это семейство языков программирования Microsoft, выросших из BASIC, а не один язык. Под этим именем сегодня скрываются четыре разные технологии с разной судьбой: классический VB6, современный VB.NET, VBA для макросов Office и скриптовый VBScript. Ниже разбираю, чем они отличаются, какие у VB плюсы и минусы, где он реально используется в 2026 году и когда вместо него разумнее учить C#.
Содержание
- Коротко об истории
- Четыре Visual Basic: сравнение
- Статус Visual Basic в 2026 году
- Как выглядит VB.NET: минимальный пример
- Особенности языка
- Преимущества Visual Basic
- Недостатки Visual Basic
- Стоит ли учить Visual Basic в 2026 году
- VB.NET и C#: одна платформа
- Выводы
- Где применяется / связь с практикой
- FAQ
Мини-словарь, чтобы не путаться дальше:
- VB6 (Visual Basic Classic) — язык и среда разработки для Windows-программ, последняя версия вышла в 1998 году.
- VB.NET — язык платформы .NET с 2002 года; синтаксис похож на VB6, но устройство и библиотеки другие.
- VBA (Visual Basic for Applications) — встроенный в Office язык макросов, близкий к VB6.
- VBScript — облегченный скриптовый диалект для Windows и старого Internet Explorer.
Коротко об истории
BASIC появился в 1964 году в Дартмутском колледже как учебный язык. Microsoft выпустила Visual Basic 1.0 в 1991 году: главной идеей было «рисовать» окно программы мышью и дописывать код к кнопкам. Это сделало VB одним из самых массовых инструментов для офисных и корпоративных программ под Windows.
Версия 3.0 (1993) получила удобную работу с базами данных, 4.0 (1995) — поддержку 32-битных Windows, 5.0 (1997) — компиляцию в машинный код. VB6 (1998) стал последним классическим выпуском. В 2002 году вместе с .NET Framework вышел VB.NET — фактически новый язык, несовместимый с VB6 на уровне исходного кода.
Четыре Visual Basic: сравнение
| Вариант | Для чего | Где выполняется | Статус в 2026 |
|---|---|---|---|
| VB6 | десктоп-программы для Windows | Windows, рантайм msvbvm60.dll |
среда разработки без поддержки, живет только в старых системах |
| VB.NET | приложения на .NET | .NET 10, .NET Framework | поддерживается, но без новых возможностей языка |
| VBA | макросы Excel, Word, Access, Outlook | внутри приложений Office | активно используется |
| VBScript | скрипты администрирования, старые ASP-страницы | Windows Script Host, IIS (Classic ASP) | выводится из Windows, для новых задач не годится |
Главное различие: VB6, VBA и VBScript — родственники по устройству (COM, тип Variant), а VB.NET — отдельный язык со строгой объектной моделью .NET. Код VB6 в VB.NET напрямую не переносится, его переписывают.
Статус Visual Basic в 2026 году
В 2020 году Microsoft объявила, что VB.NET переходит в режим поддержки: язык работает на современных версиях .NET (консольные приложения, библиотеки классов, WinForms, WPF), но развивать сам язык команда .NET не планирует. В актуальной стратегии это названо подходом consumption-only: VB может пользоваться новыми возможностями .NET и библиотек на C#, но собственного нового синтаксиса не получает. Возможности C# и VB.NET с тех пор расходятся, и новые шаблоны проектов .NET ориентированы в первую очередь на C#.
VB6 как среда разработки давно без поддержки, хотя старые программы на нем все еще запускаются в Windows. VBA, наоборот, живее всех: на нем держатся тысячи отчетов и автоматизаций в Excel. VBScript Microsoft постепенно убирает из Windows — сначала в виде отключаемого компонента, затем полностью.
Как выглядит VB.NET: минимальный пример
Проект создается командой .NET SDK. Шаблон консольного приложения для VB в SDK есть:
dotnet new console -lang VB -o VbDemo
cd VbDemo
dotnet run
Замените содержимое Program.vb на этот код:
Option Strict On
Module Program
Sub Main()
Dim total As Integer = 7
Dim parts As Integer = 2
Console.WriteLine(total / parts) ' Integer / Integer дает Double
Console.WriteLine(total \ parts) ' целочисленное деление
Console.WriteLine(total Mod parts) ' остаток
Dim scores(2) As Integer ' индексы 0..2
Console.WriteLine(scores.Length)
Console.WriteLine(CInt(True))
Console.WriteLine(Convert.ToInt32(True))
End Sub
End Module
После dotnet run в консоли появится:
3.5
3
1
3
-1
1
Первая строка зависит от региональных настроек: на русской локали будет 3,5. Разбор по строкам:
Option Strict Onзапрещает неявные сужающие преобразования. По умолчанию в VB.NET он выключен, и компилятор молча превращает, например,DoubleвInteger.- Оператор
/в VB не делает целочисленного деления: для двухIntegerон возвращаетDouble(дляDecimal—Decimal), а для целочисленного деления есть отдельный\. В C# наоборот:7 / 2для двухintдает3. Dim scores(2)задает верхнюю границу, а не размер: элементов три.CInt(True)дает-1— это наследие VB6, где «истина» хранилась как 16-битное число со всеми единицами. Метод .NETConvert.ToInt32(True)возвращает1.
Типичная ошибка: граница массива
Неверный код — перебор массива по привычке из других языков:
Dim items(2) As String
For i As Integer = 0 To items.Length
Console.WriteLine(items(i))
Next
Результат: цикл доходит до i = 3, и обращение items(3) выбросит IndexOutOfRangeException (первые три итерации успеют напечатать пустые строки). В VB For ... To включает верхнюю границу. Исправление:
Dim items(2) As String
For i As Integer = 0 To items.Length - 1
Console.WriteLine(items(i))
Next
' или без индексов: For Each item As String In items
Особенности языка
- Регистр не важен:
Totalиtotal— одно имя, а среда сама выравнивает написание. - Многословный синтаксис: блоки закрываются словами (
End If,End Sub,Next), а не скобками. Код читается почти как текст. - Операторы
And/Orпроверяют обе части. Для короткого замыкания естьAndAlsoиOrElse— частая ловушка при проверке наNothing. - Мягкая типизация по умолчанию: в VB6 и VBA переменная без типа получает
Variant, в VB.NET приOption Strict Offдействуют неявные преобразования. - ООП по-разному: в VB6 есть классы и интерфейсы (
Implements), но нет наследования реализации. В VB.NET полноценное наследование (Inherits), обобщения, LINQ,Async/Await.
Частый миф из старых статей — «в VB истина равна 1». В VB6 и VBA True равно -1, а в VB.NET это значение видно при преобразовании средствами VB (CInt, CType или неявно при Option Strict Off), тогда как методы .NET вроде Convert.ToInt32 дают 1.
Преимущества Visual Basic
- Низкий порог входа. Читаемый синтаксис и прощающий компилятор позволяют быстро получить работающую программу.
- Быстрая разработка интерфейсов под Windows. Дизайнер форм WinForms в Visual Studio по-прежнему поддерживает VB.NET.
- Доступ ко всей платформе .NET. VB.NET пользуется той же библиотекой классов и пакетами NuGet, что и C#, и компилируется в тот же промежуточный код.
- VBA есть везде, где есть Office. Для автоматизации отчетов не нужно ничего устанавливать.
- Безопасная работа с памятью. В VB.NET нет ручного управления памятью, объекты убирает сборщик мусора.
Недостатки Visual Basic
- Язык не развивается. Новые возможности .NET сначала и часто только появляются в C#.
- Узкий рынок вакансий. Задачи на VB — в основном поддержка и миграция старых систем, а не новые проекты.
- Мало современных материалов. Документация, примеры и ответы на форумах в основном на C#.
- Ограничения по платформам. VB.NET-консоль и библиотеки работают на Linux и macOS через .NET, но WinForms и WPF — только Windows. VB6 и VBA привязаны к Windows (VBA есть и в Office для Mac, но с ограничениями).
- Риски безопасности VBA. Макросы долго были каналом распространения вредоносов. Сейчас Office по умолчанию блокирует макросы в файлах из интернета, и включать их для непроверенных документов не стоит.
Стоит ли учить Visual Basic в 2026 году
Ответ зависит от задачи, а не от языка в целом:
| Задача | Что взять | Когда иначе |
|---|---|---|
| Автоматизировать Excel или Word на работе | VBA | если нужна облачная версия Office — Office Scripts или Python в Excel |
| Поддерживать корпоративную программу на VB.NET | VB.NET | при переписывании — C# на той же платформе |
| Сопровождать старое приложение на VB6 | VB6 плюс план миграции | новую функциональность лучше выносить в .NET |
| Начать карьеру разработчика на .NET | C# | VB.NET — только если его требует конкретная работа |
| Писать скрипты администрирования Windows | PowerShell | VBScript не выбирать для новых скриптов |
VB.NET и C#: одна платформа
VB.NET и C# компилируются в один и тот же промежуточный язык и используют одну библиотеку .NET. Поэтому переход с VB на C# — смена синтаксиса, а не платформы: классы, коллекции, LINQ и асинхронность работают одинаково. Для новых проектов на .NET обычно выбирают C#: именно в него Microsoft добавляет новые возможности языка.
Тот же пример с делением на C# показывает главное отличие в поведении:
int total = 7, parts = 2;
Console.WriteLine(total / parts); // 3 - оба операнда int
Console.WriteLine((double)total / parts); // 3.5 (на русской локали 3,5)
int[] scores = new int[2]; // размер, а не верхняя граница
Console.WriteLine(scores.Length); // 2
Выводы
- Visual Basic — семейство из четырех технологий: VB6, VB.NET, VBA и VBScript, и у каждой своя судьба.
- VB.NET поддерживается на современном .NET, но с 2020 года язык не развивается: нового синтаксиса нет, только поддержка использования новых возможностей .NET.
- VBA остается практичным инструментом автоматизации Office, VB6 и VBScript — наследие без будущего.
- Плюсы VB — простота и быстрый интерфейс под Windows, минусы — остановка развития и узкий рынок.
- Для старта в .NET-разработке логичнее C#: платформа та же, а язык активно развивается.
Где применяется / связь с практикой
Освойте тему на практике
На практике VB чаще всего встречается в поддержке корпоративных систем и отчетов, и почти всегда рядом с ним уже есть C#-код на той же платформе .NET. Если хотите войти в .NET-разработку с актуальным языком, основы C# — прямое продолжение: те же классы, коллекции и среда Visual Studio, но с развивающимся синтаксисом. Системно это разбирается на курсе «C# Developer. Basic». Чтобы попробовать формат, загляните на бесплатные открытые уроки Otus.
FAQ
Можно ли вызывать код на VB.NET из C#?
Да. Библиотека классов на VB.NET подключается к C#-проекту как обычная сборка .NET, и наоборот, поэтому миграцию часто ведут постепенно.
Работает ли VBA в Google Таблицах или LibreOffice?
В Google Таблицах нет, там используется Apps Script. LibreOffice частично выполняет макросы VBA, но совместимость неполная, и сложные макросы приходится переписывать.
Чем открыть старый проект VB6?
Для правки кода нужна оригинальная среда VB6, которая официально не поддерживается. Инструменты автоматической конвертации в VB.NET из Visual Studio давно убраны, поэтому такие проекты обычно переписывают на .NET вручную.



