Topics

  • ["Advanced" tag page]: Show all articles with the tag "Advanced" (including those where "Advanced" is a secondary tag).
  • ["Announcement" tag page]: Show all articles with the tag "Announcement" (including those where "Announcement" is a secondary tag).
  • ["API" tag page]: Show all articles with the tag "API" (including those where "API" is a secondary tag).
  • ["Archive" tag page]: Show all articles with the tag "Archive" (including those where "Archive" is a secondary tag).
  • Archive Collection: Hidden Features: (Jan 20, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Hidden Features.
  • Archive Collection: Bug Types: (Jan 21, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Bug Types.
  • Archive Collection: twinBASIC: (Jan 22, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: twinBASIC.
  • Archive Collection: Test-Driven Development: (Jan 23, 2023) I'm on vacation! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Test-Driven Development (TDD).
  • Archive Collection: Tools: (Jan 24, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Tools.
  • Archive Collection: Defensive Programming: (Jan 25, 2023) I'm on vacation! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Defensive Programming.
  • Archive Collection: Form Design: (Jan 26, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Form Design.
  • Archive Collection: Humor: (Jan 27, 2023) I'm on vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy today's curated collection of articles from the archive. Today's topic: Humor.
  • ["AutoHotKey" tag page]: Show all articles with the tag "AutoHotKey" (including those where "AutoHotKey" is a secondary tag).
  • Debugging VBA with no Break Key: (Oct 27, 2020) Ever use a keyboard without a Pause/Break key? It's no big deal for most people, but if you develop in VBA it's a huge deal.
  • A Mind-Reading Script: (Oct 28, 2020) What if you could highlight any text, press a hotkey, and have Windows do what you want almost every time? You'd have my top productivity hack.
  • Expand Your Access Palette: (Oct 31, 2020) Use AutoHotkey to bring consistency to your Access color schemes and save time when designing forms.
  • Size Matters: (Nov 1, 2020) Testing your program for small screens? You could change your own monitor's resolution, but that gets annoying real fast. Here's a better way.
  • "Toggle" Hotkey for the Immediate Window: (Nov 18, 2020) Am I the only one who finds it annoying that [Ctl] + [G] doesn't *toggle* between the immediate window and the code window? Let's fix that.
  • Streamlining SaveAsText / LoadFromText: (Mar 19, 2021) SaveAsText and LoadFromText are indispensable for Access version control. They're also annoying to type repeatedly. Let's fix that.
  • Toggle ODBC TraceSQLMode with an AutoHotKey Script: (Mar 14, 2022) Traditional methods of enabling and disabling ODBC TraceSQLMode are a pain in the neck. This AutoHotKey script makes it as easy as pushing a button.
  • ["Basic" tag page]: Show all articles with the tag "Basic" (including those where "Basic" is a secondary tag).
  • It Takes Two: (Sep 5, 2020) Microsoft Access is both a rapid application development (RAD) environment and a file-based database system. It is actually quite capable in each area. But they are two fundamentally different functions.
  • One if ByRef, and Two if ByVal: (Sep 19, 2020) Arguments in VBA are passed by reference by default. What does that mean? And what are the differences between passing by reference and by value?
  • VBA and Unicode: (Dec 6, 2020) VBA and Unicode go together like Bailey's and Lime. But pretending the problem doesn't exist won't make it go away. Even for us Americans.
  • Checklist: Is Your Access App GOOD?: (Dec 17, 2020) GOOD. Better. Best. Does your Access application clear the lowest bar for quality?
  • Unicode-Friendly MsgBox: (Dec 24, 2020) There's a great big world outside of the ANSI bubble. Make every MsgBox in your program Unicode-safe in no time at all with this drop-in replacement.
  • Constructing Version Numbers: (Jan 8, 2021) Every program needs a version number. But there's no need to overthink it. When versioning Access apps, less is more.
  • Pseudocode Programming Practice: (Jan 23, 2021) Is it bad practice to write comments first and then code? Not at all. In fact, it's one of the most powerful techniques in building good code.
  • Proper Use of Global State: (Jan 24, 2021) With great power comes great responsibility. Use global variables wisely.
  • The Global Form: (Jan 25, 2021) Storing global variables on a hidden form has some distinct advantages over storing them in VBA.
  • The Danger of Do Loops: (Feb 26, 2021) If you're going to write a Do Loop, don't forget to update whatever it is you're using to break out of said loop. And, oh yeah, save before testing!
  • The Extra Resume: (Feb 27, 2021) Want an easy way to jump to the line that raised the error AND avoid the infinite loop time bomb? Add an extra Resume.
  • Watching and Waiting: (Mar 5, 2021) Careful what you watch for! Monitoring changes to a slow expression can grind your debug session to a halt.
  • Looping Through a List of Items: (Apr 2, 2021) Here's a quick and dirty way to loop through a list of items in VBA.
  • DRY: Don't Repeat Yourself in VBA: (Apr 25, 2021) A journey from basic to advanced, covering functions, subroutines, user defined types, class modules, WithEvents, interfaces, and even code generation.
  • Event-Driven Programming in VBA: (Apr 26, 2021) Event-driven programming may sound complicated, but the concept is really quite simple.
  • Navigating Continuous Forms: (Apr 28, 2021) If Up is left and Down is right, you must be navigating a continuous form in Microsoft Access.
  • Handling Keyboard Events in Access: (Apr 29, 2021) This beginner article will step you through the process of how to begin writing code that runs when a user presses a key on the keyboard.
  • KeyCode and Shift Arguments: (Apr 30, 2021) The KeyDown and KeyUp events include KeyCode and Shift arguments to identify which keys the user pressed. Let's explore those arguments in more detail.
  • Field Comments on Linked Access Tables: (May 25, 2021) In part 1 of this series on field comments, we discuss maintaining column descriptions on tables linked to MS Access back-end files.
  • Easy Access to Field Descriptions: (May 29, 2021) The ExtractFieldComments() function returns a dictionary of field names and their descriptions from a TableDef object.
  • Field Comments on Linked Tables: (Jun 2, 2021) In this 6-part series, I cover everything you need to know about field descriptions for linked tables with Access and SQL Server back-end databases.
  • Combo Box: Behavior Deep Dive: (Jun 5, 2021) Join me as I take you on an animated gif guided tour of the default behavior of the Microsoft Access combo box, with emphasis on the autocomplete feature.
  • Anatomy of a CRUD App: (Jun 30, 2021) Microsoft Access is a great platform for developing desktop CRUD apps. But what the heck is a CRUD app?
  • Split Your Microsoft Access Applications...Or Else: (Jul 13, 2021) "Ghostbusters" has some important lessons to teach us about Access application development.
  • Poor Man's Status Bar in VBA: (Jul 24, 2021) If you're looking for a quick and dirty way to keep track of a long-running process while developing, this VBA one-liner will do the trick.
  • Avoid DoCmd.RunSQL in Microsoft Access: (Aug 3, 2021) If you are just starting out writing VBA in Microsoft Access, you may be tempted to use DoCmd.RunSQL. Don't. There is a better way.
  • How to Pause Your VBA Code For a Set Amount of Time: (Aug 9, 2021) There is no built-in function to pause code in VBA. The easiest and safest way to do it is to use the Sleep API function. Here's a quick how-to.
  • What the Vancouver Stock Exchange Can Teach Us About Rounding Numbers in VBA: (Aug 18, 2021) So you think you know how to round decimals. Do you, though? There may be more to it than you think.
  • How to Customize the Access Ribbon on a Developer Machine: (Sep 2, 2021) This step-by-step guide shows you how to customize the Microsoft Access ribbon and add missing commands.
  • The Difference Between Good and Bad Code Comments: (Oct 8, 2021) The difference between good and bad comments explained in under 25 words.
  • Beware the BETWEEN: (Oct 13, 2021) Using the BETWEEN clause with date-time fields may lead to unexpected results. There's a safer alternative.
  • The QBE Window: Training Wheels for Access Developers: (Oct 15, 2021) If you're new to relational databases, the QBE window is the solution to--and cause of--many of your query problems.
  • How to Loop Through a List of Strings in VBA: (Dec 16, 2021) Looking for a quick and simple way to loop through a list of strings? These 4 lines of code are all you need.
  • How to Pause VBA Code: (Jan 14, 2022) A simple Windows API call makes for a reliable and efficient way to pause your VBA code. Much better than a "do-nothing loop."
  • Microsoft Access Acronyms: (Jan 28, 2022) Bookmark this handy reference so the next time you come across an Access acronym that you don't recognize, you will have a quick way to look it up.
  • The Strange Behavior of Null: (Mar 18, 2022) When are two identical values not equal? When they're both Null! If you are a Microsoft Access developer, you need to understand how (and why) this works.
  • Learn VBA From a Master: (Apr 8, 2022) Philipp Stiefel is on a very short list of people who I would pay to teach my employees how to write VBA.
  • The Single Most Important Concept for Understanding Relational Databases: (Dec 27, 2022) If you're coming to the database world from the spreadsheet world, this one key concept will help you make the necessary mindset shift.
  • All About Indenting: (Jan 10, 2023) Do you obsess over the smallest details of the code-writing process? If not, you might want to skip this article. Don't say I didn't warn you...
  • ["Best Of" tag page]: Show all articles with the tag "Best Of" (including those where "Best Of" is a secondary tag).
  • My Top 10 Allen Browne Posts: (Nov 11, 2022) If you're a Microsoft Access developer and you've never heard of Allen Browne, then you are in for a treat...
  • My Top 10 Joel Spolsky Posts: (Mar 8, 2023) If you are running a small (or large) software development company, Joel Spolsky should be at the top of your reading list.
  • ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
  • ["Bug Types" tag page]: Show all articles with the tag "Bug Types" (including those where "Bug Types" is a secondary tag).
  • Syntax Errors: (Aug 5, 2021) Every programming language has its own syntactical quirks. The C family loves braces. Python loves indentation. BASIC loves words. And Perl loves #%@!{}]&.
  • Compile Errors: (Aug 6, 2021) Compile errors are easy to keep out of deployed code (just remember to Debug > Compile). Which is good because they hard crash Access in Runtime mode.
  • Misunderstood Requirements in the Project Design Phase: (Aug 7, 2021) Your client knows what's wrong. They *think* they know how to fix it. But treating symptoms is never as effective as treating the disease.
  • Automated Test Errors (aka, Failing Tests): (Aug 10, 2021) You can have a bug in your code and/or in your test. You're unlikely to have the *same* bug in your code and your test.
  • Logic Errors: (Aug 19, 2021) The logic error is the most dangerous and insidious of all software errors.
  • Runtime Errors: (Aug 20, 2021) It's impossible to predict every possible scenario that could befall our applications in the wild. But we need to at least try.
  • Misunderstood Requirements (After You've Written the Code): (Aug 21, 2021) As you install the final piece of crown molding in the dog's second bedroom, you can't help but smile at the absurdity of it all.
  • "It Runs On My Computer": (Aug 28, 2021) Here are the 7 most common reasons I've had to utter those words as an Access developer.
  • ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
  • ["ChatGPT" tag page]: Show all articles with the tag "ChatGPT" (including those where "ChatGPT" is a secondary tag).
  • Copyright Implications of ChatGPT Content: (Jan 3, 2023) ChatGPT from OpenAI is taking the world by storm. Who owns the ChatGPT output? Can you pass it off as your own? Do you need to acknowledge OpenAI?
  • ChatGPT: (Jan 4, 2023) The personal computer. Google search. The smart phone. Lifelike chat bots. Another generation-defining technology has arrived.
  • My Policy on ChatGPT-Generated Content: (Jan 5, 2023) I plan to use ChatGPT to generate content at NoLongerSet.com. But I plan to do it with full transparency. Here is my pledge to you, dear reader.
  • ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
  • ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
  • ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
  • ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
  • ["Commentary" tag page]: Show all articles with the tag "Commentary" (including those where "Commentary" is a secondary tag).
  • Sympathy for the devil?: (Sep 1, 2020) Microsoft Access is not the devil. You can use it to write great software. You can use it to write crappy software. I'm here to help you write more of the former and less of the latter.
  • No Longer Set: (Sep 3, 2020) One of the most important features of Microsoft Access is backwards compatibility. And make no mistake, backwards compatibility *is* a feature.
  • Past is Prologue: (Sep 23, 2020) A personal reflection on my software development journey. There's more to creating great software than knowing how to write code.
  • Building Your Library: (Sep 28, 2020) Thirteen years ago, I chose to maintain a folder of text files rather than a single Access database library. I've never once regretted that decision.
  • Weekend Warriors: (Oct 1, 2020) Wherein I compare keyboard warriors to actual warriors.
  • Lightweight Forms? Just Don't: (Oct 2, 2020) Lightweight forms make your code harder to read and debug, but if your users have monitors with high enough refresh rates, they'll appreciate the effort.
  • The Curse of Reliable Software: (Oct 4, 2020) How does one avoid the reliability paradox? One option is to intentionally write unreliable, buggy software. There's a better option.
  • Two Ways to Burn: (Oct 5, 2020) Burning cardboard is a lot like a large data migration. You can do it all at once or slowly over time.
  • How Not to Propose: (Oct 8, 2020) Features don't sell software.
  • The Golden Rule of Data Migrations: (Oct 16, 2020) The fastest and most reliable way to run a migration is to repeat it many times. I call this the "Repetition Paradox."
  • Cruft Sale!: (Nov 7, 2020) Everything must go!!! Dead code, obsolete reports, and bunches of binary backups! No offer too big or too small!
  • Web Apps - Bane of my Existence: (Nov 11, 2020) Whatever modicum of credibility I may have had with "real programmers" I am about to douse in gasoline and light on fire with this article.
  • 7th Grade Career Day: (Nov 21, 2020) Using this approach, I manage to teach multiple programming concepts to absolute beginners in the span of about fifteen minutes.
  • Backward Compatibility: A Go Perspective: (Nov 30, 2020) "What actually makes code, advice, and tutorials obsolete?" Let's explore the answers as they relate to the Go programming language and MS Access.
  • Copying and Pasting Code with Purpose: (Dec 11, 2020) The first commandment of software development is, "Thou shalt not copy and paste code." Sometimes that's wrong.
  • How It's Always Been Done: (Dec 31, 2020) Good programmers know how to code. Great programmers know why. The best programmers question why.
  • Access Migrations: (Jan 2, 2021) Data migrations are high risk operations. You can't prepare for every pitfall, but a good plan will maximize your chances of success.
  • Declaration of Database Design: (Jan 15, 2021) Altering the schema of a production database is not a step to be taken lightly. But when requirements dictate, it must be done.
  • You're Not an Impostor: (Feb 19, 2021) You're good enough, you're smart enough, and doggone it, people like you.
  • Recovering From Code Loss: (Feb 28, 2021) Access just crashed while you were writing code. When you last saved will determine how long it takes to recover, but it's not a linear relationship.
  • Reducing Lost Code Recovery Time: (Mar 3, 2021) How do you reduce your recovery time when you've lost a bunch of code you just wrote? To misquote Bart Simpson, "Version control, my man."
  • Some Bugs are Better than Others: (Mar 25, 2021) Not all bugs are created equal. Avoid the expensive ones by making more of the ones that are easy to find and fix.
  • Join Me at Access DevCon 2021: (Mar 28, 2021) I will be presenting the about-to-be-released TwinBasic project from vbWatchdog developer, Wayne Phillips. Join me on April 22-23.
  • The Two Keys to Building Great Access Applications: (Jun 17, 2021) The best Access applications prioritize data discovery and efficiency.
  • Microsoft Access's Multiple Personality Disorder: (Jun 26, 2021) The dual nature of Access–and the ignorance of this reality–is a major source of the shade that "real programmers" throw its way.
  • Don't Write Clever Code: (Jul 14, 2021) There are two problems with clever code. 1) The next person might not know what you were doing. 2) They might not know if *you* knew what you were doing.
  • Microsoft and VBA: A Love(less) Story: (Jul 22, 2021) Whatever happened to the passion Microsoft once had for VBA? From love story to marriage of convenience, this article is one weird ride.
  • Evolution of a Business Application: (Aug 13, 2021) Before you commission that custom web application project, it pays to validate that the business process even warrants such a significant investment.
  • Access vs. Enterprise Software: A False Choice: (Aug 14, 2021) Beware of strawman arguments against Microsoft Access.
  • The Software Reliability Paradox: (Sep 22, 2021) The most reliable software holds the potential to cause the greatest harm. Examples abound, from my own $86K mistake to a devastating Russian hack.
  • Eliminating Friction: (Oct 19, 2021) The key to becoming a better developer is to make it so The Right Way is also The Easy Way.
  • 5 Types of Documentation: (Nov 9, 2021) Each type of documentation has unique strengths and weaknesses. Knowing when and how to use each is an important skill for every developer.
  • How to Request New Features for Microsoft Access: (Nov 11, 2021) After a long and conspicuous absence, Microsoft has finally published a new website where you can submit and vote on feature requests.
  • Let's Make Access More Version-Control Friendly: (Nov 12, 2021) Hey! Wouldn't it be great if Access was version-control friendly out of the box? If you agree, head over to the Access feedback portal and vote for my request.
  • Access Dataverse Connector: (Nov 23, 2021) Did you ever think to yourself, "I wish there was a way to make my back-end data less flexible *and* less powerful?" Good news; your wait is over!
  • 3 Benefits of Writing Code Backwards: (Nov 24, 2021) Ignore those compile errors and start writing your calling code before your routines. This approach has many benefits.
  • The Key to Navigating Unfamiliar Territory Without a Map: (Nov 29, 2021) How I successfully led a 60-vehicle military convoy at 23 years old without knowing what I was doing or where I was going.
  • The State of Access Today: (Nov 30, 2021) What's the state of Microsoft Access in 2021: thriving, alive, dying, or dead? If you only know Access by reputation, the answer may surprise you.
  • Code is WORM: Act Accordingly: (Jan 31, 2022) Write Once. Read Many. The cost of avoiding shortcuts when writing code is far exceeded by the benefits you'll get when reading it.
  • Is Microsoft Access a Good Development Platform in 2022?: (Feb 8, 2022) Microsoft has embraced the mantra of "move fast and break things." For Access, though, Microsoft is only delivering on the latter part of that promise.
  • Yes, VBA-Enabled Office Docs are a Significant Threat: (Feb 17, 2022) VBA-enabled documents are commonly used to open the door for more virulent malware.
  • Expect the Unexpected: (Feb 25, 2022) Getting ready to start a complex project? Stressing about what might go wrong? Here's some advice to help lower that stress level.
  • The Curse of Knowledge: (Jul 22, 2022) Even the world's worst programmer knows more about programming than most small business owners or department managers.
  • PICNIC: The Underlying Cause of Many Technical Support Calls: (Sep 14, 2022) A PICNIC is the most frequent source of problems on technical support calls.
  • Avoid Context Switching for More Readable Code: (Sep 16, 2022) Writing code is like juggling. But mixing code, queries, and global state is like juggling balls, bowling pins, and running chainsaws.
  • The Problems with Boilerplate Code: (Oct 12, 2022) Copy. Paste. Modify. Repeat. Writing and maintaining boilerplate code is a necessary evil in VBA.
  • Follow-Up: Avoiding Context Switching: (Oct 24, 2022) It doesn't matter which context you are working in–VBA or queries–the key is to pick one and stick with it.
  • How to Know When to Turn Lines of Code Into a Standalone Routine in VBA: (Dec 5, 2022) DRY vs. YAGNI. Don't Repeat Yourself or You Ain't Gonna Need It? Sometimes it's not obvious whether a block of code would be useful as a standalone routine.
  • Managing Software Complexity: The Rule of Seven: (Mar 13, 2023) Don't try to increase the number of balls you can keep in the air; instead, reduce the number of balls needed to follow your software's logic.
  • ["Conventions" tag page]: Show all articles with the tag "Conventions" (including those where "Conventions" is a secondary tag).
  • VBA Squeeze Box: (Sep 20, 2020) I discussed previously the differences between passing by value and passing by reference. I now want to discuss how and when I use each in my own code.
  • Enum Type Naming Convention: (Oct 9, 2020) The combination of "IntelliSense overload" and "global identifier case changes" convinced me I needed a different approach.
  • Comment Continuations: (Dec 3, 2020) Using ellipses to "group" comments separated by intervening lines of code.
  • Googleable Field Names: (Feb 7, 2021) Using globally unique field and table names will make it easier to identify where such fields and tables are used throughout your application.
  • Beautiful Blocks of Boilerplate: (May 3, 2021) Using the colon character to join multiple lines of code all willy-nilly can lead to messy code. But, used judiciously, it can create beauty from chaos.
  • Database Date Field Naming Convention: (Sep 21, 2021) Naming is hard. When it comes to naming conventions, the key is to keep things simple. Here's how I like to name the date and time fields in my databases.
  • Naming Conventions Matter: Making Wrong Code Look Wrong: (Oct 14, 2021) Joel Spolsky and Antonin Scalia join forces to help illustrate the importance of sensible code naming conventions.
  • My File System Variable Naming Convention for VBA: (Aug 9, 2022) "SourcePath" may be one of the worst variable names ever written. Is it the full path to a source file? Is it the folder where my source files are located?
  • ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
  • ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
  • ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
  • ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
  • ["Events" tag page]: Show all articles with the tag "Events" (including those where "Events" is a secondary tag).
  • The ArrowKeyNav Routine: (May 1, 2021) Enable Excel-like navigation in your continuous forms by overriding the default behavior of the up and down arrow keys.
  • ArrowKeyNav Presentation: (May 6, 2021) A list of resources and further reading to support my presentation on Navigating Continuous Forms using WithEvents.
  • Many Objects, One Class Module: (May 8, 2021) Check out this trick for reducing boilerplate code: maintain a private collection of objects that are instances of the class itself.
  • ComboBox Dropped Down State: (May 10, 2021) Overriding the up/down arrow key behavior improves the user experience on a continuous Access form. But what if the user drops down a combo box?
  • AddNew Increments AutoNumber Fields: (May 11, 2021) Thanks to Ben Clothier, we've got another improvement to our Arrow Key Navigation class.
  • The ArrowKeyNav Journey: (May 20, 2021) A full breakdown of my weArrowKeyNav class module that uses WithEvents to override the default up and down arrow key behavior in continuous Access forms.
  • ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
  • ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
  • ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
  • ["Holiday" tag page]: Show all articles with the tag "Holiday" (including those where "Holiday" is a secondary tag).
  • Merry Christmas: (Dec 25, 2020) "...the shepherds said to one another, 'Let’s go to Bethlehem and see this thing that has happened, which the Lord has told us about.'"
  • Happy Easter: (Apr 4, 2021) “Don’t be alarmed,” he said. "You are looking for Jesus the Nazarene, who was crucified. He has risen! He is not here."
  • Merry Christmas: (Dec 25, 2021) "But the angel said to her, 'Do not be afraid, Mary; you have found favor with God. You will conceive and give birth to a son, and you are to call him Jesus.' "
  • Happy Easter: (Apr 17, 2022) "Why do you look for the living among the dead? He is not here; he has risen!"
  • Merry Christmas: (Dec 25, 2022) "...She will give birth to a son, and you are to give him the name Jesus, because he will save his people from their sins.”
  • ["Humorous" tag page]: Show all articles with the tag "Humorous" (including those where "Humorous" is a secondary tag).
  • Reproducing Errors: (Oct 7, 2021) A physicist, a mechanic, and a programmer were in a car driving over a steep alpine pass when the brakes failed...
  • ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
  • ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
  • ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
  • ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
  • ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
  • ["Meta" tag page]: Show all articles with the tag "Meta" (including those where "Meta" is a secondary tag).
  • Topics Page Redesign: (Apr 22, 2022) Check out the redesigned Topics page at nolongerset.com! It's now auto-updating and optimized for discovering new content.
  • ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
  • ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
  • ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
  • Journey to Access: Part 1: (Sep 25, 2020) Many of the best Microsoft Access applications are written by people with no formal background in software development. Your origin story starts here.
  • Journey to Access: Part 2: (Sep 26, 2020) The weirdos who enjoy spending lots of time to avoid doing mundane tasks that only take a little time have their own special name: programmers. Welcome to our very weird club.
  • Journey to Access: Part 3: (Sep 27, 2020) A morass of Word documents and Excel workbooks--the invasive plant species of the Windows world--overgrowing your file system like so much digital kudzu.
  • One Step at a Time: (Jan 29, 2021) To reach great heights, take small steps.
  • Growing a Business: (Feb 13, 2021) I used to think owning a business was scary. And then I decided to start growing it.
  • Equal Parts Excited and Terrified: (Mar 29, 2021) You know you’ve found a worthy challenge when you are equal parts excited and terrified to take it on. Because that is how you grow.
  • Access DevCon 2021: Day 1: (Apr 22, 2021) If you weren't able to make it to virtual Access DevCon Vienna 2021, here's what you missed on Day 1.
  • Access DevCon 2021: Day 2: (Apr 24, 2021) If you weren't able to make it to virtual Access DevCon Vienna 2021, here's what you missed on Day 2.
  • The Gambler: (Aug 17, 2021) The most consequential piece of business advice I ever received came from the fictional owner of Pritchett's Closets & Blinds.
  • "This feels weird.": (Sep 20, 2021) My nine-year-old son got hit in the head at soccer practice the other day. His reaction reminds me of my own professional software development journey.
  • How to Write a Daily Article: (Nov 4, 2021) Publishing an article every day is not for the faint of heart. But the benefits compound if you can stick with it.
  • UNC Alias for a Local Folder: (Nov 13, 2021) The subst command lets us mimic mapped network drives. But what if your backend tables are linked using UNC paths? Don't worry. We can handle those, too!
  • $5,999: Microsoft's Insane Price for Access 2013: (Jul 20, 2022) Microsoft does not make it easy to buy old versions of Access, even though you need them to distribute compiled .accde files for *still-supported* runtimes.
  • The Robot, the Technician, and the Fixer: (Jul 28, 2022) What type of Microsoft Access developer are you? Being a robot is easy, being a technician is fun, but being a fixer is valuable.
  • Learning From Other Languages: (Nov 17, 2022) Even if you only write code professionally in a single language, learning the concepts and idioms of other languages will make you a better programmer.
  • Learning From Other Coding Styles: (Nov 18, 2022) Will learning multiple coding styles make you a better programmer? And, does it make sense to import those coding styles into your primary language?
  • ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
  • ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
  • ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
  • ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
  • ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
  • Good. Better. Best.: (Dec 16, 2020) Take the test to see where your (or someone else's) Access application stands.
  • MS Access Risk Management: (Dec 20, 2020) Applying US Army risk management techniques to assess Microsoft Access application risk.
  • Proving the Concept with Access: (Dec 26, 2020) Committing to a major custom software development project is fraught with risk. Reduce that risk by prototyping in Access first.
  • Securing Your Data: (Feb 8, 2021) Relying on application-level security to protect your data would be like using guard rails to keep out your enemies.
  • Mail: An Allegory: (Feb 14, 2021) Behold, the world's greatest literary allegory since George Orwell penned "Animal Farm."
  • The Allegory Explained: (Feb 15, 2021) What does delivering mail have to do with writing software applications? I'm glad you asked.
  • Cowpathing with Microsoft Access: (Nov 26, 2021) How do you decide where to spend your software development dollars? Don't guess what your users need, let them show you with Access.
  • No Longer Set: (Oct 30, 2020) Signal is information that conveys meaning. Noise obscures that information. The key to writing good software is to maximize signal and minimize noise.
  • When Good Comments Go Bad: (Nov 10, 2020) Bad actors carry out disinformation campaigns to poison our discourse. But when we write code, sometimes we're the bad actors.
  • Signal vs. Noise: Error Handling: (Nov 20, 2020) To boost our signal to noise ratio, we can increase our lines of meaningful code or decrease the lines of boilerplate.
  • Signal vs. Noise: ShowPlan.out Edition: (Mar 16, 2022) Reading showplan.out files can be intimidating for new and experienced Access developers alike. This simple rule will help get you started.
  • ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
  • ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
  • ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
  • ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
  • ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
  • ["Testing" tag page]: Show all articles with the tag "Testing" (including those where "Testing" is a secondary tag).
  • Python-inspired Doc Tests in VBA: (Sep 21, 2020) Doc tests are not a replacement for unit or integration testing. But they do provide the best return on investment (ROI) of any type of test, mostly because the effort to write them is near zero.
  • VBA Doc Tests: Advanced Features: (Sep 22, 2020) Let's take our doc tests to the next level. I'll show you how to use my custom DocTests function to test classes, private functions, and error conditions.
  • ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
  • ["twinBASIC" tag page]: Show all articles with the tag "twinBASIC" (including those where "twinBASIC" is a secondary tag).
  • twinBASIC Update: May 2, 2021: (May 2, 2021) Highlights include C-style block comments, support for additional Rubberduck annotations, and With blocks for UDTs.
  • twinBASIC Update: May 9, 2021: (May 9, 2021) Highlights include support for a new Attribute syntax, ActiveX DLL registration via regsvr32, and PredeclaredID for twinBASIC classes.
  • twinBASIC Update: May 16, 2021: (May 16, 2021) Highlights include stability improvements for the twinBASIC compiler and the YouTube release of my hourlong twinBASIC presentation at DevCon Vienna.
  • twinBASIC Update: May 23, 2021: (May 23, 2021) Highlights include passing (pseudo-)command-line arguments to a twinBASIC console app and an update from Wayne on the project's progress.
  • twinBASIC Update: May 30, 2021: (May 30, 2021) Highlights include improved compiler stability, making the Optional keyword optional, and setting command-line arguments for debugging.
  • twinBASIC Update: June 6, 2021: (Jun 6, 2021) Highlights include Mid statement support, DefType support, multiple bug fixes, and a (sort of) announcement regarding unit testing support.
  • twinBASIC Update: June 13, 2021: (Jun 13, 2021) Highlights include Like statement support and a new VS Code command to create new project files (no more downloading .zip files from twinbasic.com!).
  • twinBASIC Update: June 20, 2021: (Jun 20, 2021) Highlights include custom events in twinBASIC classes, full Debug.Print syntax support, and an experimental code prettifier.
  • twinBASIC Update: June 27, 2021: (Jun 27, 2021) Highlights include support for external version control, the official launch of the code prettifier, and support for resources and visual styles via manifest files.
  • twinBASIC Update: July 4, 2021: (Jul 4, 2021) Highlights include support for EXE/DLL embedded resources plus *LOTS* of code writing experience improvements, like rename refactoring, auto-indent, etc.
  • twinBASIC Update: July 11, 2021: (Jul 11, 2021) Highlights include a sneak peek at the yet-to-be-released form editor, a teaser about possible control inheritance, and a future option for version control.
  • twinBASIC Update: July 18, 2021: (Jul 18, 2021) Highlights include continued work on the GUI plus future support for web forms and IntelliSense in the Debug Console.
  • twinBASIC Update: July 25, 2021: (Jul 25, 2021) Highlights include unique icon colors for each code file type, plus Standard vs. Professional vs. Ultimate editions, pricing, pre-orders, and early-bird discounts.
  • twinBASIC Update: August 1, 2021: (Aug 1, 2021) Highlights include VSCode CodeLens support, compiler warnings, VB_GlobalNameSpace support, and twinBASIC's debut on stackoverflow.
  • twinBASIC Update: August 8, 2021: (Aug 8, 2021) Highlights include a revamped references list UX, a 100%-twinBASIC-compatible Printers object replacement, and news on unit testing and documentation.
  • twinBASIC Update: August 15, 2021: (Aug 15, 2021) Highlights include IntelliSense improvements, a 12-month twinBASIC roadmap, and a pure Win32 API GUI application written in twinBASIC.
  • twinBASIC Update: August 22, 2021: (Aug 22, 2021) Highlights include a sneak-peek at the forthcoming integrated unit testing framework, App.ThreadID, App.hInstance, and MSVBVM60.dll redirections.
  • twinBASIC Update: August 29, 2021: (Aug 29, 2021) Highlights include Unit Testing support, conditional breakpoints, the Nz() function, and various IntelliSense improvements.
  • twinBASIC Update: September 5, 2021: (Sep 5, 2021) Highlights include IntelliSense in the Debug Console, unit testing improvements, and the addition of #Error and #Warning directives.
  • twinBASIC Update: September 12, 2021: (Sep 12, 2021) Highlights include VS Code Extensibility, RGB extraction functions, dropping Finalize(), and a discussion regarding potential typedef support.
  • twinBASIC Update: September 19, 2021: (Sep 19, 2021) Highlights include discussions around block scoping and a planned ObjRefCount() function.
  • twinBASIC Update: September 26, 2021: (Sep 26, 2021) Highlights include a sneak peek at building custom form controls, the related dynamic property sheet, and a bunch of screenshots teasing the upcoming features.
  • twinBASIC Update: October 3, 2021: (Oct 3, 2021) Highlights include a glimpse into the possible GUI release timeline and a discussion about data binding with twinBASIC forms.
  • twinBASIC Update: October 10, 2021: (Oct 10, 2021) Highlights include an extended preview of the yet-to-be-released form designer and a spirited discussion about whether to fork VS Code to create a dedicated tB IDE.
  • twinBASIC Update: October 17, 2021: (Oct 17, 2021) Highlights include the alpha release of CustomControls, a twinBASIC wiki, and a revived discussion around "Quirks Mode" in twinBASIC.
  • twinBASIC Update: October 24, 2021: (Oct 24, 2021) Highlights include the addition of 4 new custom control events, ElementTabStop/Index properties, and a Spanish presentation on twinBASIC.
  • twinBASIC Update: October 31, 2021: (Oct 31, 2021) Highlights include initial support for a Clipboard object, a new custom control sample (Wayne's TextBox), and support for Return as an alias for Exit Sub.
  • twinBASIC Update: November 7, 2021: (Nov 7, 2021) Highlights include our first look at a working twinBASIC form, the early makings of inheritance support, and the promise of custom ActiveX control development.
  • twinBASIC Update: November 14, 2021: (Nov 14, 2021) Highlights include temporary removal of the license key requirement for CustomControls and partial inheritance support using Implements ... Via.
  • twinBASIC Update: November 21, 2021: (Nov 21, 2021) Highlights include 64-bit compilation support (no license required!) and a discussion about early binding and reference handling.
  • twinBASIC Update: November 28, 2021: (Nov 28, 2021) Highlights include the first major release of file handling statements and functions in twinBASIC, along with talk of providing a tB license to the Rubberduck project.
  • twinBASIC Update: December 5, 2021: (Dec 5, 2021) Highlights include the implementation of additional File System features, improved performance for Split and Replace, and a discussion about universal binaries.
  • twinBASIC Update: December 12, 2021: (Dec 12, 2021) Highlights include the File I/O system reaching feature-complete status, an updated twinBASIC roadmap, and experimental text encoding support.
  • twinBASIC Update: December 19, 2021: (Dec 19, 2021) Highlights include support for importing VB6 project files (*.vbp), new MsgBox options, and a spirited discussion about what tB's design priorities should be.
  • twinBASIC Update: December 26, 2021: (Dec 26, 2021) Highlights include several improvements to the COM references list, a fix for the hidden dialog windows issue, and many discussions about possible tB features.
  • twinBASIC Update: January 2, 2022: (Jan 2, 2022) Highlights include a feature to generate missing implementations, minor improvements to the Reference List UX, and some spirited debates.
  • twinBASIC Update: January 9, 2022: (Jan 9, 2022) Highlights include error messages that now match VBx, a twinBASIC Discord server, and a teaser about twinBASIC's potential as a VBA replacement.
  • twinBASIC Update: January 16, 2022: (Jan 16, 2022) Highlights include the CompileIf attribute and IsObject function for generics, an experimental package manager, and 10 Guiding Principles of twinBASIC.
  • twinBASIC Update: January 23, 2022: (Jan 23, 2022) Highlights include the introduction of TWINPACKs and the TWINSERV package manager, IntelliSense improvements, and easier reporting of twinBASIC bugs.
  • twinBASIC Update: January 30, 2022: (Jan 30, 2022) Highlights include a sample project demonstrating the WaynesGrid control and a timeline update for the release of (some) native Win32 controls.
  • twinBASIC Update: February 6, 2022: (Feb 6, 2022) Highlights include the milestone release of WinForms functionality, control inheritance, ReadOnly class properties, and twinPACK updating documentation.
  • twinBASIC Update: February 13, 2022: (Feb 13, 2022) Highlights include a new Settings filter bar and WinForms Controls Package updates included by default with future twinBASIC extension updates.
  • twinBASIC Update: February 20, 2022: (Feb 20, 2022) Highlights include checkbox-style list boxes, native Winforms progress bar and image controls, and an option to align controls to grid in the form designer.
  • twinBASIC Update: February 27, 2022: (Feb 27, 2022) Highlights include multiple form designer improvements and a *BIG* announcement about the future of the twinBASIC IDE.
  • twinBASIC Update: March 6, 2022: (Mar 6, 2022) Highlights include a sneak peek at the new twinBASIC IDE (currently under development) and a brief comparison between RAD Basic and twinBASIC.
  • twinBASIC Update: March 13, 2022: (Mar 13, 2022) Highlights include another sneak peek of the upcoming twinBASIC IDE and a special announcement regarding Access DevCon Vienna 2022.
  • twinBASIC Update: March 20, 2022: (Mar 20, 2022) Highlights include a cryptic update on the new IDE's release date and a possible twinBASIC solution to the oft-delayed Access modern browser control.
  • twinBASIC Update: March 27, 2022: (Mar 27, 2022) Highlights include a release date for the twinBASIC IDE and plans to open-source the IDE's source code.
  • twinBASIC Update: April 3, 2022: (Apr 3, 2022) Highlights include the release of the new IDE and an announcement about twinBASIC's role at the upcoming Access DevCon Vienna conference.
  • twinBASIC Update: April 10, 2022: (Apr 10, 2022) Highlights include 7 (!) new releases of the twinBASIC IDE and twinBASIC solving a difficult problem for a popular MS Access open-source addin.
  • twinBASIC Update: April 16, 2022: (Apr 16, 2022) Highlights include multiple debug console performance improvements and a workaround for antivirus software flagging twinBASIC as potential malware.
  • twinBASIC Update: April 24, 2022: (Apr 24, 2022) Highlights include updated samples for building custom VBIDE tool windows and custom ActiveX controls that you can drop on Access forms and reports.
  • twinBASIC Update: May 1, 2022: (May 1, 2022) Highlights include Set Next Statement support, new code samples and templates, a roadmap update, and a 7-Zip VBA library written in twinBASIC.
  • twinBASIC Update: May 8, 2022: (May 8, 2022) Highlights include version control-friendly improvements to the new IDE, an IDE Font Size setting, and a milestone for another VBx successor language, RAD Basic.
  • twinBASIC Update: May 15, 2022: (May 15, 2022) Highlights include a modern browser control for Microsoft Access (yes, you read that right) and a spirited discussion regarding attribute syntax.
  • twinBASIC Update: May 22, 2022: (May 22, 2022) Highlights include the beginnings of a Screen object, an updated Attribute syntax, and a reimagined ending to a Disney classic (yes, it's a bit off-topic).
  • twinBASIC Update: May 29, 2022: (May 29, 2022) Highlights include new build features, a good Exit Code discussion, and a multi-threaded twinBASIC proof of concept from Ben Clothier.
  • twinBASIC Update: June 5, 2022: (Jun 5, 2022) Includes a sneak peek of the upcoming ActiveX Control Extender support in twinBASIC.
  • twinBASIC Update: June 12, 2022: (Jun 12, 2022) Highlights include ActiveX control support on twinBASIC forms and a discussion about the (accidental?) interface constructor language feature.
  • twinBASIC Update: June 19, 2022: (Jun 19, 2022) Highlights include improved support for 3rd-party ActiveX controls, a new location for tB IDE releases, and a discussion about where to put non-visual controls.
  • twinBASIC Update: June 26, 2022: (Jun 26, 2022) Highlights include container support, IDE bug fixes, and a modest request for a complete backward-compatible rewrite of MS Access in twinBASIC.
  • twinBASIC Update: July 3, 2022: (Jul 3, 2022) Highlights include added support for the VB6 `End` statement, shape controls, and double-click to change property values in the IDE.
  • twinBASIC Update: July 10, 2022: (Jul 10, 2022) Highlights include new shape controls, code-signed twinBASIC IDE and compiler executables, and twinBASIC's first appearance on HackerNews.
  • twinBASIC Update: July 17, 2022: (Jul 17, 2022) Highlights include double-click to change form/control properties in the IDE, support for the Form.Show Modal argument, and a discussion about On Error Resume Next.
  • twinBASIC Update: July 24, 2022: (Jul 24, 2022) Highlights include implementation of the form Controls collection, initial publication of the twinBASIC Guiding Principles, and the potential to write device drivers with tB.
  • twinBASIC Update: July 31, 2022: (Jul 31, 2022) Highlights include improved support for building device drivers, initial support for keyboard menu navigation, and a milestone for the twinBASIC project.
  • twinBASIC Update: August 7, 2022: (Aug 7, 2022) Highlights include a major compiler refactor to help reduce compiler memory usage and proposed support for multiple built-in rounding methods.
  • twinBASIC Update: August 14, 2022: (Aug 14, 2022) Highlights include IDE memory optimizations, build size reductions, and a discussion about a potential extensibility library for the IDE.
  • twinBASIC Update: August 21, 2022: (Aug 21, 2022) Highlights include IDE improvements, support for Excel events in COM addins, and a kernel-mode driver written in twinBASIC (yes, really).
  • twinBASIC Update: August 28, 2022: (Aug 28, 2022) Highlights include improvements to code selector boxes in the IDE, IntelliSense improvements, and better support for "kernel mode" (i.e., device drivers).
  • twinBASIC Update: September 4, 2022: (Sep 4, 2022) Highlights include new IDE shortcut keys, an awesome new IDE History panel, and a project from fafalone that showcases twinBASIC's interface definition feature.
  • twinBASIC Update: September 11, 2022: (Sep 11, 2022) Highlights include 4 new form controls (TreeView, DriveListBox, DirListBox, FileListBox), an impromptu Q&A with Wayne, and WinNativeForms source.
  • twinBASIC Update: September 18, 2022: (Sep 18, 2022) Highlights include the initial implementation of a PictureBox control and a custom Windows Event Viewer written in twinBASIC.
  • twinBASIC Update: September 25, 2022: (Sep 25, 2022) Highlights include long-awaited VB6 form import support (experimental) and a community-led GitHub project to provide official documentation for twinBASIC.
  • twinBASIC Update: October 2, 2022: (Oct 2, 2022) Highlights include a pile of new form and control properties, a form menu designer, visual tab stop indicators in design view, and a new twinBASIC LinkedIn group.
  • twinBASIC Update: October 9, 2022: (Oct 9, 2022) Highlights include support for control and menu arrays, a Type Library Viewer (Object Browser equivalent), and a video interview with twinBASIC creator Wayne Phillips.
  • twinBASIC Update: October 16, 2022: (Oct 16, 2022) Highlights include two new ways to open the twinBASIC IDE (via .twinproj files and Windows shortcuts), better performance for IDE panels, and more GUI progress.
  • twinBASIC Update: October 23, 2022: (Oct 23, 2022) Highlights include many IDE improvements, better support for high-performance code, and a sample Task Dialog project from fafalone.
  • twinBASIC Update: October 30, 2022: (Oct 30, 2022) Highlights include better PNG handling, improvements to the custom menu builder, and support for a NumbersOnly textbox property.
  • twinBASIC Update: November 6, 2022: (Nov 6, 2022) Highlights include native CoClass support and a TWINPACK package from fafalone with definitions for all the standard common controls.
  • twinBASIC Update: November 13, 2022: (Nov 13, 2022) Highlights include drag and drop support, an innovative IDE feature known as "Type Hints", and a proof-of-concept twinBASIC multithreading project.
  • twinBASIC Update: November 20, 2022: (Nov 20, 2022) Highlights include several bug fixes, a new method to clear the debug console, and a discussion about the difference between Drag and OLEDrag methods.
  • twinBASIC Update: November 27, 2022: (Nov 27, 2022) Highlights include support for graphical buttons, OLE drag and drop, and some exciting news about the upcoming release of Rubberduck VBA 3.0.
  • twinBASIC Update: December 4, 2022: (Dec 4, 2022) Highlights include initial support for importing VB6 forms with ActiveX controls, GoSub syntax support, and context-sensitive custom help support.
  • twinBASIC Update: December 11, 2022: (Dec 11, 2022) Updates include a version 1 release date, twinBASIC roadmap update, and several bug fixes.
  • twinBASIC Update: December 18, 2022: (Dec 18, 2022) Highlights include initial support for user controls, a new list view option for the form designer toolbox, and another sample twinBASIC project from fafalone.
  • twinBASIC Update: December 26, 2022: (Dec 26, 2022) Highlights include the smallest bug report in twinBASIC history, a repository of twinBASIC sample projects, and a tB-based VBA DocTest runner from Ben Clothier.
  • twinBASIC Update: January 1, 2023: (Jan 1, 2023) Highlights include a redesigned form preview button, a file watcher sample application from fafalone, and a holiday message from Wayne Phillips.
  • twinBASIC Update: January 8, 2023: (Jan 8, 2023) Highlights include .vbp UserControl import support, a twinBASIC VBCCR demo project, live variable hover tips in the IDE, and a discussion of post-v1 breaking changes.
  • twinBASIC Update: January 15, 2023: (Jan 15, 2023) Highlights include a new VBCCR-based GUI project type, a VBCCR TWINSERV package, and a discussion about support for block-level scope in twinBASIC.
  • twinBASIC Update: January 29, 2023: (Jan 29, 2023) Highlights include an updated roadmap and v1 release date, new UserControl events support, and several new tB sample projects from fafalone and Ben Clothier.
  • twinBASIC Update: February 5, 2023: (Feb 5, 2023) Highlights include a major rewrite of the ActiveX implementation, updates to two community projects, and a discussion about the business side of twinBASIC.
  • twinBASIC Update: February 12, 2023: (Feb 12, 2023) Highlights include an improved UX for selecting one control from a group of controls, an update to the ActiveX Control project type, and some IID advice.
  • twinBASIC Update: February 19, 2023: (Feb 19, 2023) Highlights include an option to customize fonts in the IDE, newly implemented OLE Drag/Drop methods and events, and a new vbNullPtr constant.
  • twinBASIC Update: February 26, 2023: (Feb 26, 2023) Highlights include a big announcement for twinBASIC in the world of Access and the release of ZoneStripper, another of fafalone's VB6 twinBASIC ports.
  • twinBASIC Update: March 5, 2023: (Mar 5, 2023) Highlights include the addition of MonthView and DatePicker controls, new methods, properties, and events, and a note about the twinBASIC splash screen.
  • twinBASIC Update: March 12, 2023: (Mar 12, 2023) Highlights include IDE bookmarks, improvements to the debugging experience, and a sampling of how twinBASIC is being used today.
  • twinBASIC Update: March 19, 2023: (Mar 19, 2023) Highlights include a compilation of 60 of twinBASIC's existing improvements over VB6, mouse scroll events, a Last Position feature, and other IDE improvements,
  • ["Under 100" tag page]: Show all articles with the tag "Under 100" (including those where "Under 100" is a secondary tag).
  • ["Unicode" tag page]: Show all articles with the tag "Unicode" (including those where "Unicode" is a secondary tag).
  • Unicode MsgBox Revisited: (Sep 15, 2022) A small improvement to my Unicode-friendly MsgBox and a handy trick for avoiding compile errors across Word/Excel/Access/etc.
  • ["UX" tag page]: Show all articles with the tag "UX" (including those where "UX" is a secondary tag).
  • ["VBA" tag page]: Show all articles with the tag "VBA" (including those where "VBA" is a secondary tag).
  • High Wire Walking With No Net: (Sep 4, 2020) In those early days, our method of "source control" was making regular copies of the front-end database and appending a date to the filename. This was....less than ideal. The problem is best illustrated with a quick story.
  • An Homage to Mercurial: (Sep 7, 2020) I believe without a doubt--even knowing what I know now--that I made the right decision at the time. If I could go back to 2009 and do it over again, I would still go with Mercurial. If I were starting from scratch in 2020...that's a different story.
  • No Longer Set: (Sep 8, 2020) Using version control is the most impactful change you can make to improve the quality of your Microsoft Access applications. Here is a quick list of just some of the benefits you gain using version control.
  • The Starting Point: (Sep 9, 2020) Before we can use a DVCS with our Access application, we need to convert the binary Access file into a series of text files. The best place to start (and where my journey began) is with this StackOverflow answer.
  • No Longer Set: (Sep 10, 2020) How do we save database properties to text? By iterating through the database's .Properties collection, of course. Here is some sample code...
  • Tables to Text: Do it for the DVCS!: (Sep 13, 2020) Anything that can lead to a bug in your software belongs in version control. That includes local tables with design-time data.
  • Referencing references: (Sep 14, 2020) While we can use the VBA user interface to display the references, we can't rely on that approach if we want to automate exporting our Access binary file to text files. Luckily, there is a solution.
  • Tracking Table Structure Changes: (Sep 15, 2020) Another potential source of bugs is changes to the structures of our tables. This includes both local tables and linked tables that reside in our back-end.
  • Exporting Queries for Version Control: (Sep 16, 2020) SaveAsText will export queries to text files, but calling those files "human-readable" is a stretch.
  • Putting It All Together: (Sep 17, 2020) I expanded on the original decompose.vbs script. The code below is the culmination of more than 50 individual changes and tweaks over 10+ years.
  • Access Version Control: My Philosophy: (Sep 18, 2020) These rules are intended as a guiding philosophy. If I'm getting closer to meeting this vision, I know I'm moving in the right direction.
  • Scraps of Wood and Code: (Oct 13, 2020) Resisting the packrat mentality.
  • Migrating Mercurial: (Nov 25, 2020) I had to update the settings file for 120 Mercurial repositories. I saved hours of tedium using a regex in the "Find in Files" feature of Notepad++.
  • Tracking Schema Changes: (Jan 28, 2021) If it can cause a bug in your software, you should be tracking it in version control. Database schema changes absolutely fall into that category.
  • Peace of Mind from Version Control: (Mar 9, 2021) "Do you want to save your changes?" No, not if I just added temporary debugging code. But, Yes, if I also added production code. What to do?
  • It's All About the Diff: (Mar 17, 2021) How can you figure out what you changed on a form when you can't remember changing anything on that form? Version control, of course.
  • Reverting Unwanted Changes: (Mar 18, 2021) Using Version Control in Access is like having a time machine that makes it easy to undo design mistakes. Here's a quick overview of the process.
  • A Quick, Free Way to Try Version Control with Microsoft Access: (Jul 9, 2021) Curious about getting started with version control in Microsoft Access, but don't want to commit a lot of time or money? This could be just the solution for you.
  • Learn to Love Text-Based Version Control with "Highlights for Children": (Jul 29, 2021) Why use text-based version control for visual objects like forms and reports? I'll tell you why, but first, find all the differences between these two pictures...
  • ["Video" tag page]: Show all articles with the tag "Video" (including those where "Video" is a secondary tag).
  • VIDEO: Modern On Off Buttons in Access: (Jul 27, 2022) I recorded a YouTube video that demonstrates how to implement the Modern On/Off button feature that I wrote about yesterday.
  • Access Job Interview Questions: (Aug 26, 2022) Richard Rost--today's most prolific creator of Microsoft Access video tutorials--has put together a great baseline of questions and answers that test your Access knowledge.
  • Access Job Interview Questions: Follow-up Q&A: (Aug 30, 2022) Topics covered include Access security best practices, "deploying" trusted locations to users, and avoiding reserved words when naming database objects.
  • VIDEO: Sorting Continuous Forms: (Sep 2, 2022) A 12-minute video that shows you how to implement my NewSort and UseHand functions for sorting continuous forms in MS Access.
  • VIDEO: "Codifying" Long Names: (Sep 12, 2022) Former Access MVP Jack Stockton translates my SQL Server "Codify()" function to work with Microsoft Access backend databases.
  • VIDEO: Design Patterns with Access: (Sep 29, 2022) "I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times." How Bruce Lee's advice applies to MS Access.
  • ["Watches" tag page]: Show all articles with the tag "Watches" (including those where "Watches" is a secondary tag).
  • Watch Expression: (Mar 6, 2021) A deeper than necessary dive into the exact expression evaluation behavior of the basic "Watch Expression" in VBA.
  • Break When Value Is True: (Mar 7, 2021) When debugging VBA, you can watch an expression and halt code execution as soon as it evaluates to True. Let's explore exactly how that works.
  • Break When Value Changes: (Mar 8, 2021) When debugging VBA, you can watch an expression and halt code execution whenever its value changes. Let's explore exactly how that works.
  • Week in Review: May 7, 2022: (May 7, 2022) Highlights include an IE integration article from Daniel Pineault, an Access tool from Crystal Long, and a PowerApps User Group video.
  • Week in Review: May 14, 2022: (May 14, 2022) Highlights include the Access Dataverse Connector *finally* reaching General Availability, the public release of 3 DevCon videos, and another big Access bug.
  • Week in Review: May 21, 2022: (May 21, 2022) Highlights include a Microsoft Access Roadmap update, sample code for trig functions, and a discussion about preserving Access tips of yore.
  • Week in Review: May 28, 2022: (May 28, 2022) Highlights include two new Access bugs, a modern On/Off toggle control, setting list box font colors by column, and resurrected videos from the Access forums vault.
  • Week in Review: June 4, 2022: (Jun 4, 2022) Highlights include major changes to the Access roadmap, Richard Rost's Beginner Access video course is now free, and research on developer interviews.
  • Week In Review: June 11, 2022: (Jun 11, 2022) Highlights include a better date picker control, dashboard-style gauges, and drawing shapes in Access reports.
  • Week in Review: June 18, 2022: (Jun 18, 2022) Highlights include building custom progress bars, creating organizational charts, and yet another Access bug [sigh].
  • Week in Review: June 25, 2022: (Jun 25, 2022) Highlights include an elegant solution to synchronized scrolling, a novel approach to db schema versioning, and a deep dive into recovering deleted db objects.
  • Week in Review: July 2, 2022: (Jul 2, 2022) Highlights include a deep dive into the Autoexec macro, compacting the current database via VBA, and a massive Access drawing reference.
  • Week in Review: July 9, 2022: (Jul 9, 2022) Highlights include code to activate a specific ribbon tab, a deep dive into the innards (and dangers) of multivalue fields, and--yes--more Access bugs.
  • Week in Review: July 16, 2022: (Jul 16, 2022) Highlights include 5 things NOT to do when writing code, embedding videos on Access forms, and--of course--more bugs. :-(
  • Week in Review: July 23, 2022: (Jul 23, 2022) Highlights include the latest edition of Karl Donaubauer's Access News, creating a custom splash form, and the public release of the SSMS-style "Access Studio" tool.
  • Week in Review: July 30, 2022: (Jul 30, 2022) Highlights include tips for designing Access apps for tablet use, sorting forms by combo box columns, and CUPID--an alternative to SOLID principles.
  • Week in Review: August 6, 2022: (Aug 6, 2022) Highlights include the list of Access fixes for Version 2206, a deep dive into how Access stores queries, and a rant against today's overly complicated forums.
  • Week in Review: August 13, 2022: (Aug 13, 2022) Highlights include Peter Cole's 32 to 64-bit conversion presentation, a deep dive into how Access stores queries, and a sad announcement from MVP Daniel Pineault.
  • Week in Review: August 20, 2022: (Aug 20, 2022) Highlights include Colin Riddington's Nav Pane Helper, Richard Rost's Access Developer Interview Questions, and Rick Hanson's Used Book Business Access App.
  • Week in Review: August 27, 2022: (Aug 27, 2022) Highlights include a dedicated web page for the Access Europe User Group, a Nav Pane Helper Add-in, and a deep dive into database theory.
  • Week in Review: September 3, 2022: (Sep 3, 2022) Highlights include an add-in to check Access/Windows/Office versions, a query metadata viewer, and multiple ways to change the mouse cursor in MS Access.
  • Week in Review: September 10, 2022: (Sep 10, 2022) Highlights include a major milestone for (and giveaway from) Richard Rost, a data classification guide, and an Access QR code generator.
  • Week in Review: September 17, 2022: (Sep 17, 2022) Highlights include a new YouTube channel from Daniel Pineault, modern chart reference, and form resizing and "profiles" videos.
  • Week in Review: September 24, 2022: (Sep 24, 2022) Highlights include bug fixes in Access v2208, Microsoft's new Office update strategy, creating ACCDB/ACCDE files using code, and a series on TempVars.
  • Week in Review: October 1, 2022: (Oct 1, 2022) Highlights include Pivot Tables and Pivot Charts, exporting all Access tables into Excel, and many changes to future Access User Group presentations.
  • Week in Review: October 8, 2022: (Oct 8, 2022) Highlights include using Base64 encoding to embed images in Thunderbird, seven(!) IslaDogs articles, and episode 4 of Karl Donaubauer's Access NewsCast.
  • Week in Review: October 15, 2022: (Oct 15, 2022) Highlights include changes to the Access team's development priorities, adding spell check to Access, and generating Excel charts via automation from Access.
  • Week in Review: October 22, 2022: (Oct 22, 2022) Highlights include a reserved word checker utility, executing PowerShell cmdlets from VBA, using Access in an Azure VM, and 5 types of control tips.
  • Week in Review: October 29, 2022: (Oct 29, 2022) Highlights include a data macros how-to, time zone-aware dates, automating the Access nav pane, and collapsing/expanding the ribbon.
  • Week in Review: November 5, 2022: (Nov 5, 2022) Highlights include a new Access MVP (congrats Juanjo Luna!), a deep dive into the FileSystemObject, and using UIAutomation to interact with the ribbon.
  • Week in Review: November 12, 2022: (Nov 12, 2022) Highlights include two new Access User Group recordings, a WizHook sample database and reference, and a couple of videos on macro blocking.
  • Week in Review: November 19, 2022: (Nov 19, 2022) Highlights include multiple ways to hide sensitive data, a CDO email tester, an improved SQL editor, and updates from the Access dev team.
  • Week in Review: November 26, 2022: (Nov 26, 2022) Highlights include a sneak preview of Rubberduck 3.0, multiple articles on Access keyboard shortcuts, and aligning text with monospaced fonts.
  • Week in Review: December 3, 2022: (Dec 3, 2022) Highlights include the WizHook TwipsFromFont function, an enhanced message box, and drawing dynamic meters on Access reports.
  • Week in Review: December 10, 2022: (Dec 10, 2022) Highlights include Access disappearing from the Microsoft 365 Roadmap, bug fix release 2211 details, maps, maps, and more maps.
  • Week in Review: December 17, 2022: (Dec 17, 2022) Highlights include Access's new code signing feature, rotating and scaling images, drawing snowflakes (festive!), and a BRAND NEW Access blog.
  • Week in Review: December 24, 2022: (Dec 24, 2022) Highlights include tentative dates for Access DevCon Vienna, the evils of split forms, listing complex fields, and more festive Access art from Crystal Long.
  • Week in Review: December 31, 2022: (Dec 31, 2022) Highlights include a deep dive into creating a customer follow-up database, automatic form resizing, and a risk-minimizing approach to app rewrites.
  • Week in Review: January 7, 2023: (Jan 7, 2023) Highlights include 15 tips & tricks from Karl Donaubauer, the new digital signing feature for Access databases, and how to hash a string in VBA.
  • Week in Review: January 14, 2023: (Jan 14, 2023) Highlights include using an ActiveX control to collect handwritten signatures, multiple options for getting special folders in VBA, and managing old data.
  • Weeks in Review: January 28, 2023: (Jan 28, 2023) I'm back! Highlights from the past two weeks include using web APIs in Access, Rubberduck 3.0 news, using the registry from VBA, and more on ChatGPT.
  • Week in Review: February 4, 2023: (Feb 4, 2023) Highlights include a tool to localize Access applications (coming soon) and a couple of good (if slightly off-topic) articles on management and pricing.
  • Week in Review: February 11, 2023: (Feb 11, 2023) Highlights include a video showing how to integrate charts.js in Access, calling the Windows Color Picker Dialog from VBA, and an Access CalendarMaker.
  • Week in Review: February 18, 2023: (Feb 18, 2023) Highlights include a video on the current state of Microsoft Access, closing open Access objects (reports, etc.), and using temp tables to boost performance.
  • Week in Review: February 25, 2023: (Feb 25, 2023) Highlights include a modern date-time picker proof of concept, using SQL Server views from Access, and writing code other people can read.
  • Week in Review: March 4, 2023: (Mar 4, 2023) Highlights include a trick to update parent form calculations without using subform events, translation tools in Access, and early/late binding declarations.
  • Week in Review: March 11, 2023: (Mar 11, 2023) Highlights include a deep dive into form events, optimizing queries in SQL Server, dealing with split forms, and how to embed QR codes in a Word mail merge.
  • Week in Review: March 18, 2023: (Mar 18, 2023) Highlights include automating Word to create a font list, Name AutoCorrect, horizontal continuous forms, and the new Edge-based browser control.
  • ["WizHook" tag page]: Show all articles with the tag "WizHook" (including those where "WizHook" is a secondary tag).