twinBASIC Update: May 12, 2025
Highlights include expanded support for creating Monaco editor shortcut keys, sokinkeso's CopyPasteEx Addin, and sample code to detect text language using Win APIs.

On April 23, 2021, I helped Wayne Phillips introduce the world to twinBASIC at the Access DevCon Vienna conference. I boldly predicted that twinBASIC (along with the Monaco editor) would replace VBA and its outdated development environment by 2025. With that goal in mind, this weekly update is my attempt to keep the project fresh in the minds of the VBA development community.
Every Sunday Monday week, I will be providing updates on the status of the project, linking to new articles discussing twinBASIC, and generally trying to increase engagement with the project. If you come across items that should be included here, please leave a comment below.
Here are some links to get involved with the project:
- Custom twinBASIC IDE Installation Guide
- twinBASIC Discord Server (chat about the project)
- twinBASIC Wiki (list of new features not in VBx)
- GitHub Issue Tracker (report bugs)
- twinBASIC/VBx LinkedIn Group
Highlights
Monaco Command Palette Access Expanded
In GitHub Issue #2116, fafalone requested 22 additional Monaco commands be added to the Keyboard Shortcut file:
Convert Indentation to Spaces
Convert Indentation to Tabs
Copy With Syntax Highlighting
Create Manual Folding Range From Selection
Find
Find Next
Find Next Selection
Find Previous
Find Previous Selection
Fold *
Goto Line / Column...
Indent Using Tabs
Move Line Down
Move Line Up
Remove Manual Folding Ranges
Replace
Select All Occurrences of Find Match
Sort Lines Ascending
Sort Lines Descending
Toggle Block Comment
Transform to *
Unfold *
Wayne made the changes to tB and reported back a few days later with an update:
Most of these are now available as commands, and via the Edit menu, as of BETA 763
Additionally, Wayne set up ALT keyboard shortcuts for the Find/Replace Dialog to match the VB6 shortcut keys as of BETA 764.
Discord Chat Summary
* Auto-generated via Claude-3.7-Sonnet
Overview
This week in the twinBASIC community focused on Excel integration challenges, VB5 compatibility improvements, and various bug reports and fixes. Wayne Phillips announced work on VB5 form importing capabilities and addressed several technical questions about the language's implementation. Community engagement was strong, with discussions spanning from resource handling to interface design patterns and the project reaching its 900th member.
Bug Fixes & Improvements
- A bug was identified where Declare overloads in the same form couldn't be properly disambiguated, though Wayne confirmed it works correctly when placed in separate modules (reported by fafalone)
- Wayne addressed a duplicate menu entry issue with the Find/Replace dialog appearing in both View and Edit menus, noting that project-scope search functionality would be coming soon
- Beta 764 fixed Excel event handling issues, with fafalone noting that twinBASIC actually handles Excel focus issues better than VB6 did
- The Crystal Reports ActiveX viewer compatibility was discussed, with Wayne demonstrating it working after disabling Data Execution Prevention (DEP) settings
Excel Integration
- Community members discussed Excel automation challenges, particularly around event handling for Worksheet objects
- A bug with Excel events not firing was identified and subsequently fixed in Beta 764
- Several members shared best practices for Excel automation, including using class-based approaches to manage Excel application instances and prevent "ghost" processes
- bclothier noted that Office type libraries have remained at version 16.0 since Office 2016 due to the shift from MSI to Click-to-Run installations
Language Enhancements
- Wayne confirmed that multiple classes can use the
[AppObject]
attribute to expose methods globally without qualification - A discussion about class visibility modifiers emerged, with greedquest suggesting using Public/Private/Friend on component level to control scope within twin files
- Wayne clarified that interfaces can use
[DefaultMember]
or[DispId(0)]
to mark default methods, though the latter only works for IDispatch interfaces - The
GlobalMultiUse
property from VB6 was discussed, with Wayne noting that twinBASIC implements this functionality throughVB_GlobalNameSpace
or[AppObject(True)]
VB5 Compatibility
- Wayne sought examples of VB5 open source projects to improve the form importer (issue #2112)
- fafalone suggested VBAccelerator as a good source of VB5 projects with separate file versions
- The team investigated differences in how Boolean properties are represented in VB5 vs VB6 form files
- Wayne noted that initial testing showed many VB5 projects import without issues
Community Support
- The community welcomed its 900th member, showing continued growth of the twinBASIC ecosystem
- A discussion about opening a twinBASIC subreddit took place, with Wayne noting concerns about managing another communication channel alongside Discord, VBForums and GitHub
- Several new members asked about documentation resources, with recommendations to use VB6 books as references alongside the twinBASIC wiki
- Questions about resource handling in twinBASIC were answered with detailed explanations of how to use the Resources folder in projects
Conclusion
This week demonstrated twinBASIC's continued progress toward version 1.0, with improvements in Excel integration, bug fixes, and VB5 compatibility. The community continues to grow steadily, reaching 900 members while maintaining active technical discussions. Wayne's focus on VB5 compatibility shows the project's commitment to supporting legacy code migration, while discussions about modern language features highlight twinBASIC's forward-looking approach.
Around the Web
CopyPasteEx Addin for twinBASIC
From sokinkeso in đź—¨show-and-tell:
This new addin is an other "off-road-trip" with twinBASIC !!!
The CopyPasteEx add-in enhances file management within twinBASIC by introducing copy/paste capability for Project Explorer Files across multiple twinBASIC instances.
I believe many users (including me) will find it useful.
Please report any bugs/questions you have.
This is a Beta version only for x32. x64 will follow....
Cheers!

Recognize Language of Text with Windows APIs
From fafalone in đź—¨show-and-tell:
So after adding these [ELS (Extended Linguistic Services)] APIs to WDL [(Windows Development Library)] i came across a VBF thread where someone was struggling with them a long time ago but i was curious too. So i not only posted defs i ported the original C example.

Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
AI-Generated Changelog Summary
* Auto-generated via Claude-3.7-Sonnet, sorted in order of its opinion of "most impactful changes."
-
Improved ComboBox/ListBox Property Editing: Added multi-line editor support for List/ItemData properties in the form designer, making it much easier to enter multiple values similar to the VB6 experience.
-
Performance Enhancements: Fixed ComboBox.AddItem performance issues, making it even faster than VB6. Also improved PROJECT EXPLORER object-view performance, particularly when scrolling.
-
Enhanced Find/Replace Functionality: Added new IDE commands for quick find/replace operations with keyboard shortcuts (ALT+F, ALT+H, ALT+F3, SHIFT+ALT+F3), plus clicking on line/column numbers now triggers the Go to Line feature.
-
Advanced Text Transformation: Added new IDE commands for transforming text to uppercase, lowercase, titlecase, and snakecase, providing powerful text manipulation capabilities.
-
Bug Fixes for Critical Components: Fixed issues with event handling in Excel objects, resolved intermittent build errors with UserControls, and improved memory management by fixing circular references in built-in controls.
-
Better Developer Experience: Improved error handling during VBP/FRM imports, implemented missing App object members as [Unimplemented] stubs, and enhanced the usability of IDE menu items by disabling rather than hiding them when not applicable.
WARNING: The following issues are present in BETA builds 623 - 762 (the latest build as of publication):
- IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected. [Editor's Note: Rolling back to BETA 622 may be necessary if any of the KNOWN ISSUES below affect your project.]
- KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)
- there are known memory leaks in these versions, so memory usage will be higher than at the Version 1.0 release
BETA 756
- fixed: some PictureBox edge cases around resizing at runtime [ XYplorer, private ]
- fixed: some circular references in built-in controls, leading to runtime memory leaks [ XYplorer, private ]
- fixed: premature Menu handle destruction if menu is used both as a normal menu and a popup menu [ XYplorer, private ]
- fixed: IDE error when pressing F3 after closing the Find/Replace panel [ Gary Miller, discord ]
BETA 757
- fixed: some UDT edge cases alongside use of LSet [ Matthieu Chaton, private ]
- fixed: dynamic populating menus would not treat "-" as a menu seperator [ XYplorer, discord ]
- fixed: (regression) Image control not rendering with red hatch pattern in the IDE when empty
- added: multi-line editor support for ComboBox/ListBox List/ItemData properties in the form designer property sheet [ https://github.com/twinbasic/twinbasic/issues/2104 ]
BETA 758
- N/A (version number skipped or release has been recalled)
BETA 759
- fixed: (regression in BETA 757) altered UDT handling could cause compiler crash
BETA 760
- fixed: removed spurious IDE message
received request_custom_applyEdit for file that isn't being edited
when opening some package read-only files [ sokinkeso, discord ] - fixed: resizing IDE panels can be sluggish if the DEBUG CONSOLE is not empty [ sokinkeso, discord ]
BETA 761
- improved: invalid properties in VBP/FRM files will no longer halt the import process, but instead be reported as an error in the IMPORT_LOG [ https://github.com/twinbasic/twinbasic/issues/2112 ]
- improved: importer resilience to support FRM files produced by VB Decompiler [ https://github.com/twinbasic/twinbasic/issues/2112 ]
BETA 762
- fixed: performance issue with ComboBox.AddItem [ https://github.com/twinbasic/twinbasic/issues/1968 ]
BETA 763
- fixed: PROJECT EXPLORER object-view double click detection was not using proper DOM DblClick event [ https://github.com/twinbasic/twinbasic/issues/2108 ]
- improved: PROJECT EXPLORER object-view performance improvements (particularly when scrolling)
- added: IDE themable property 'TreeItemSelectedForeColor' (default: white)
- fixed: font metrics were not being cached properly for AutoRedraw forms when a form method is accessed before the form is loaded [ https://github.com/twinbasic/twinbasic/issues/2097 ]
- fixed: Find/Replace panel not working with MD files due to \r\n vs \n linefeeds [ fafalone, discord ]
- added: IDE commands 'tbFindWidget_ShowFind' {ALT+F}, 'tbFindWidget_ShowReplace' {ALT+H}, 'tbEditor_FindWidget_Next' {ALT+F3}, 'tbEditor_FindWidget_Prev'{SHIFT+ALT+F3} [ https://github.com/twinbasic/twinbasic/issues/2116 ]
- added: IDE commands 'tbEditor_FindWidget_SelectAllMatches', 'tbEditor_FoldAll', 'tbEditor_UnfoldAll', 'tbEditor_GotoLineColumn' [ https://github.com/twinbasic/twinbasic/issues/2116 ]
- added: IDE commands 'tbEditor_TransformToUppercase', 'tbEditor_TransformToLowercase', 'tbEditor_TransformToTitlecase', 'tbEditor_TransformToSnakecase' [ https://github.com/twinbasic/twinbasic/issues/2116 ]
- improved: clicking on the Line/Column number in the bottom right corner of the IDE statusbar triggers 'tbEditor_GotoLineColumn' [ https://github.com/twinbasic/twinbasic/issues/2116 ]
BETA 764
- fixed: requesting IID_IUnknown from a WithEvents event implementation would wrongly yield the root object due to the special IUnknown identity rules [ https://github.com/twinbasic/twinbasic/issues/2117 ]
- fixed: event members marked as restricted are no longer shown in the IDE [ https://github.com/twinbasic/twinbasic/issues/2117 ]
- fixed: IDE Edit menu items are no longer completely hidden when not applicable, and disabled instead [ fafalone, discord ]
- improved: added all ALT keyboard shortcuts to the Find/Replace dialog to match VBx [ VanGoghGaming, discord ]
BETA 765
- fixed: intermittent build error resulting in runtime error "TB internal error 9508: missing class deserializer" in executables using UserControls [ https://github.com/twinbasic/twinbasic/issues/1673#issuecomment-2868988200 ]
BETA 766
- fixed: potential buffer overrun when using a UDT that contains a member with an unsupported type, such as stdole.GUID, affecting recent changes to UserControl.IPersist_GetClassID implementation
- fixed: (regression) potential crash in RaiseEvent calls from a UserControl, due to changes made in BETA 764 regarding IID_IUnknown handling for WithEvents
BETA 767
- improved: missing App global object members are now marked as
[Unimplemented]
rather than being missing completely [ https://github.com/twinbasic/twinbasic/issues/143#issuecomment-2000711791 ]