Microsoft Forms 20 Object Library Vb6 May 2026
Using the Microsoft Forms 2.0 Object Library (FM20.DLL) in Visual Basic 6.0 is highly discouraged because it is not legally redistributable and is known to cause severe stability issues.
Below is a complete blog post breaking down the technical details, the deployment risks, and the best practices for handling this library in legacy VB6 projects. ⚠️ Stop Using Microsoft Forms 2.0 in VB6!
If you are maintaining a legacy Visual Basic 6.0 application, you have likely encountered the Microsoft Forms 2.0 Object Library (FM20.DLL). Developers originally gravitated toward this library because it offered advanced UI capabilities that native VB6 controls lacked—such as native Unicode support, and multi-column dropdowns in ComboBoxes and ListBoxes.
However, relying on this library in standalone desktop applications is a massive liability. Let's explore why you should avoid it and how to strip it out of your code safely. 🛑 The Core Problems with FM20.DLL 1. It is Legally Non-Redistributable
According to official Microsoft documentation, you are not allowed to distribute FM20.DLL with your custom application. This library belongs exclusively to Microsoft Office and a few other specific applications. If you package your VB6 installer with this DLL, you are violating Microsoft's licensing terms. 2. The Infamous "System Error" on Clean Machines
Because the library is not part of the standard Windows operating system, your VB6 program will crash immediately with a "System Error" or "Component not correctly registered" prompt on any computer that does not have Microsoft Office installed. 3. Chronic Instability and Memory Leaks
Microsoft explicitly states that the Forms 2.0 components are not supported or recommended for use in compiled development containers like VB6 or C++. Developers frequently experience sudden "Out of Memory" errors and IDE crashes when trying to load or manipulate these controls within the VB6 environment. 🛠️ How to Purge It from Your Project
If your project is already tangled up with Microsoft Forms 2.0 controls, removing them manually through the IDE can be a nightmare. Here is the faster, community-proven way to swap them back to native VB controls: Back up your project folder entirely before proceeding. Close your project in Visual Basic 6.0. microsoft forms 20 object library vb6
Open a advanced text editor (like Notepad++) and use the "Replace in Files" function.
Search for the string MSForms. and replace it with VB. across all of your .frm (Form) files. This forces the controls to revert to intrinsic VB6 controls. Open your project in the VB6 IDE.
Navigate to Project -> Components and uncheck the Microsoft Forms 2.0 Object Library. Save your project. 💡 What Should You Use Instead?
For Multi-Column Lists: Use the standard ListView control included in the Microsoft Windows Common Controls (MSCOMCTL.OCX), which allows for highly customizable columns and is freely redistributable.
For Unicode Support: If your app strictly requires Unicode, use third-party ActiveX controls designed for VB6, or consider migrating the UI logic to a modern framework like .NET's WinForms.
For Modern Development: If the goal is business forms or surveys, ignore desktop controls entirely and utilize cloud solutions like Microsoft Forms (online) or Power Apps.
Are you running into a specific error while trying to compile or register a VB6 application? Using the Microsoft Forms 2
Thread: Removing component Microsoft Forms 2.0 object library
Here is the text regarding the Microsoft Forms 2.0 Object Library in the context of VB6 (Visual Basic 6.0) .
Key Components
When you add a reference to Microsoft Forms 2.0 Object Library in VB6 (via Project → References), you gain access to several powerful objects and controls, including:
- UserForm – The container object (similar to a VB6 Form) but optimized for Office integration.
- Controls:
CommandButtonTextBoxMultiPageTabStripCheckBoxOptionButtonListBoxComboBoxImageSpinButtonScrollBarLabel
⚠️ The Caveats (Read Carefully!)
-
Deployment: Your users must have a licensed copy of Microsoft Office. FM20.dll is not redistributable without an Office license. If your app runs on a server (e.g., a Windows Service), you cannot rely on this library.
-
The "Redist" Myth: Unlike MSCOMCTL.OCX, you cannot legally copy FM20.dll to
C:\Windows\SysWOW64on a machine without Office and expect it to work. It will fail or violate licensing. -
Modern OS quirks: On Windows 10/11, FM20.dll behaves mostly fine, but high-DPI scaling and certain theming can cause visual glitches.
-
Future-proofing: Microsoft is actively pushing Office away from legacy controls. While FM20.dll works today, its long-term support is uncertain. Key Components When you add a reference to
Version Clarification: Why "2.0"?
The library is officially version 2.0, but developers often search for "Forms 20" (dropping the decimal) or "Microsoft Forms 2.0". The file version of FM20.dll can vary (e.g., 2.0.1.3, 2.0.5.3), but the object model remains consistent. When you see "Microsoft Forms 2.0 Object Library" in your VB6 References dialog, that is the correct entry.
✅ The Good
- Richer controls: Especially
MultiPageandSpinButton, which are painful to simulate in native VB6. - Consistent object model: If you also write VBA macros, the learning curve is flat.
- No additional dependencies (mostly): FM20.dll ships with every modern version of Windows that includes Office.
3. SpinButton
A compact up-down control for numeric input. Unlike the VB6 UpDown control (which requires a buddy control), this one works independently.
Best Practices
-
Always check for Nothing before accessing controls
-
Use error handling when working with dynamic controls
-
Free objects when done:
Set fm = Nothing -
Name controls meaningfully for easier maintenance
-
Avoid overusing - use standard VB6 controls when sufficient










