Access 101
- ["Access 101" tag page]: Show all articles with the tag "Access 101" (including those where "Access 101" is a secondary tag).
-
Access 101: A Quick Start Guide to Microsoft Access: (Oct 5, 2023) These are my Access best practices. There are many like them, but these are mine.
-
Access 101: Bound vs. Unbound Forms: (Oct 6, 2023) A short primer on the difference between bound and unbound forms in Microsoft Access, along with example use cases for each.
-
Access 101: What is a Table in Access?: (Oct 10, 2023) If you know Excel worksheets, Access tables will look very familiar. Be careful, though! There is a "key" difference between the two.
-
Access 101: What is a Query in Access?: (Oct 11, 2023) Queries are how we get useful information from data stored in tables. They also let us make bulk changes to our data. ... Be careful with queries!
-
Access 101: Front-End vs. Back-End: (Oct 12, 2023) "Front-end" and "back-end" are the terms we use to distinguish between the user interface and the data storage, respectively.
-
Access 101: Local vs. Linked Tables: (Oct 17, 2023) In Access, tables can be local (stored in the front-end file) or linked (stored in a separate database). Let's explore when and why to use each type.
-
Access 101: Referential Integrity: (Oct 24, 2023) Referential integrity is the key to ensuring data quality in a relational database. Learn what it is and how to enforce it among your back-end tables.
-
Access 101: SELECT Query: (Oct 26, 2023) The SELECT query is the source of a relational database system's true power.
-
Access 101: INSERT INTO ("Append") Query: (Nov 17, 2023) Discover the power of INSERT INTO queries in Microsoft Access, a vital tool that allows you to add a single record or transfer data from one table to another.
-
Access 101: UPDATE Query: (Nov 30, 2023) The UPDATE query: a dangerously powerful tool for making bulk changes to data in your Access tables.
-
Access 101: DELETE Query: (Jan 31, 2024) The DELETE query: a tool for removing records in bulk that is almost too dangerous to use.
-
Access 101: UNION Query: (Jun 6, 2024) The UNION query: a way to stack multiple SELECT queries into a single resulting data set.
Advanced
- ["Advanced" tag page]: Show all articles with the tag "Advanced" (including those where "Advanced" is a secondary tag).
-
No Longer Set: (Nov 17, 2020) The definitive guide to JetShowPlan. How to: toggle it with a keyboard shortcut, interpret its output, and add syntax highlighting to showplan.out files.
-
Recursion Demystified: Creating Subfolders: (Nov 29, 2020) Recursion: it's not just for calculating factorials any more! A practical example of using recursion to create multiple missing subfolders.
-
VBA Collections: AKA, Linked Lists: (Dec 6, 2020) Everything I still remember about the Data Structures course I took 20 years ago as it applies to Collections in VBA.
-
VBA Dictionaries: AKA, Hash Tables: (Dec 7, 2020) This is not an article about Amsterdam flea markets. Hash tables are the data structures upon which Dictionaries are built.
-
"Complex" DTOs in VBA: (Dec 14, 2020) Can you use the OpenArgs parameter to pass multiple values to forms and reports with compile-time checking? You can if you use DTOs.
-
Checklist: The Best Access Applications: (Dec 19, 2020) Good. Better. BEST. Is your Access application as good as it can be?
-
Deceptively Complex Booleans: (Dec 29, 2020) Why is VBA such an optimistic language? Because there's only one way to say "No," but 65,535 ways to say "Yes."
-
Super-Safe Boolean Handling: (Dec 30, 2020) If you want to be safe when working with Booleans, you need to ensure they're stored as 0 or -1. That's not as easy as you might think.
-
Strongly Typed Collections in VBA: (Mar 26, 2021) Get better type safety and access to IntelliSense inside For Each loops by using "strongly-typed collections" in place of the VBA Collection type.
-
The Tradeoffs of ByRef and ByVal: (Apr 3, 2021) As they say, there is no free lunch. Passing by value or by reference is the sort of distinction you can mostly ignore...until one day you can't.
-
Raising Custom Events in VBA: (Apr 27, 2021) This quick tutorial will have you writing custom events in VBA in no time.
-
Using WithEvents to Encapsulate Event Handling Code: (May 4, 2021) You don't need to call the event handler for every control to handle its events. Instead, you can use WithEvents to encapsulate that code in a class module.
-
Handling Multiple Control Types in a WithEvents Class: (May 5, 2021) Using WithEvents to subclass form controls is a powerful technique. Here's one way to handle multiple control types in a single class.
-
TypeName vs. TypeOf: (May 12, 2021) You can check the type of a variable in VBA using TypeName or TypeOf. But do you know when to use which? And why? Let's explore.
-
VarType in VBA: (May 13, 2021) The VarType function lets you determine the underlying type of a variable. How does it fit in with TypeName and TypeOf?
-
Approximate String Matching Workshop: (May 19, 2021) Access wizard Alessandro Grimaldi is offering a paid workshop where he will teach how to implement the Levenshtein Distance algorithm in Access.
-
Double-declaring APIs: (Oct 9, 2021) Is it finally time to stop adding the `#If VBA7 Then` guard clause to PtrSafe API declarations? Let's explore.
-
64-bit Unsigned Integers in VBA: (Nov 22, 2021) VBA is missing a data type. The workaround--while not pretty--is at least straightforward.
-
Side-by-Side Installs of 32-bit and 64-bit Versions of Access: (Dec 6, 2021) You can't install two different Office bitnesses side by side on the same computer. Or can you? ...
-
Using Windows Authentication to Connect to SQL Server from Outside the Domain: (Dec 8, 2021) You don't need to join your computer to a domain to be able to connect to SQL Server using Windows Authentication. You just need to know this simple trick.
-
JetShowPlan Manager: (Dec 18, 2021) The quickest and easiest way to get started analyzing Microsoft Access query performance is with IslaDogs' JetShowPlan Manager application.
-
The Microsoft Access Ternary Operator: (Jan 6, 2022) It's a function. It's a statement. It's an operator. It's a--what the heck do we call this short-circuit-evaluating IIf() thing and why does it even matter?
-
3 Ways to Create Class Instances in VBA: (Jan 13, 2022) Before you can use a class, you need to create an instance of the class and assign it to an object variable. ... Or do you?
-
Mark-of-the-Web (MOTW) Details: (Mar 12, 2022) Microsoft announced that VBA will be blocked soon in all files downloaded from the web. Let's dive into how Windows manages this "Mark of the Web."
-
DISTINCT vs. GROUP BY: Microsoft Access Speed Test: (Mar 15, 2022) The GROUP BY and DISTINCT clauses can both be used to generate identical results. But which one is faster in Access? And--more importantly--why?
-
References, Protocols, and Language Specifications: (Apr 9, 2022) They're not always easy to read, but when you are looking for official answers, it's hard to beat these low-level protocol and language specifications.
-
HRESULT: Use "Long" and Not "LongPtr": (Aug 2, 2022) If the return type of an API function call is an HRESULT in the C++ header file, it should be declared as a Long in VBA (and not a LongPtr).
-
Understanding Signed and Unsigned Numbers in VBA: (Sep 9, 2022) Signed and unsigned numbers–and their hexadecimal representations–can interact in surprising ways in VBA.
-
Unicode Private Use Areas in VBA: (Sep 13, 2022) Looking for a safe temporary character or text delimiter that is guaranteed to not exist in your data set? Look no further than the Unicode Private Use Areas.
-
VBA Performance Tip: How to Cache Results of Slow Processes: (Feb 17, 2023) Store expensive function call results with memoization. Learn to implement this technique with our step-by-step instructions and sample code.
-
Microsoft Access's Surprising Folder Locking Behavior: (Mar 29, 2023) Microsoft Access could be the source of file and folder locks in ways that might surprise you.
-
Permutation Table: (Aug 8, 2023) We use Python's handy itertools.permutations() function to populate a local Access table with unique permutation values.
-
Static Linking vs. Dynamic Linking: (Jan 30, 2024) You've likely heard the terms "dynamic link library", "DLL Hell", and "static linking." But what do they mean? Why should you care? And how do they apply to Access?
AdventureWorks
- ["AdventureWorks" tag page]: Show all articles with the tag "AdventureWorks" (including those where "AdventureWorks" is a secondary tag).
-
The AdventureWorks SQL Server Sample Database: (Sep 8, 2023) Step-by-step instructions for installing the AdventureWorks SQL Server sample database.
AI
- ["AI" tag page]: Show all articles with the tag "AI" (including those where "AI" is a secondary tag).
-
How ChatGPT Helped Me Write a Complex Stored Procedure in SQL Server: (Apr 25, 2023) Stop treating ChatGPT like an all-knowing oracle and start treating it like the hard-working, enthusiastic, but not-quite-fully-formed intern that it currently is.
-
How to Use the CLEAR Framework to Get Better Results from ChatGPT: (May 4, 2023) Five concepts to help you improve your "prompt engineering" skills.
-
ChatGPT: Genius or Fraud?: (Jul 14, 2023) There's an ongoing debate over whether developers can trust the current crop of LLMs. The problem is people are asking the wrong question.
-
"AI Will Take My Job": A Self-Fulfilling Prophecy: (Dec 18, 2023) Whether you think AI is coming to *take* your job... Or you think AI will help you *be more productive* at your job... You're probably right.
-
The One Policy That Proves Microsoft is All In on AI: (Mar 12, 2024) Spanish Conquistador Hernán Cortés would be proud.
-
The AI Ecosystem Evolves: Foundational Models Give Way to Specialized Implementations in 2024: (Mar 22, 2024) The rise of specialized AI in 2024 will bring about a new era of intelligent, industry-specific solutions that will redefine the way businesses operate.
Announcement
- ["Announcement" tag page]: Show all articles with the tag "Announcement" (including those where "Announcement" is a secondary tag).
-
Combo Boxapalooza!: (Jun 4, 2021) Join me at 9 AM EDT on Friday, June 18th, where I'll help you unlock the true potential of my favorite Access control: the combo box.
-
Are You an Access Developer in Northeast Pennsylvania?: (Oct 25, 2021) Calling all (current or aspiring) Access developers in Northeast PA: we have an immediate job opening at Grandjean & Braverman, Inc.
-
Microsoft Access MVP: (Nov 1, 2021) Say hello to the newest Microsoft MVP Awardee for Office Apps & Services (MS Access).
-
Access Roadmap Update: (Nov 15, 2021) Microsoft has recently updated the Access roadmap for 2021 and beyond. Check out what's on the horizon for the next 14 months.
-
Access Dataverse Connector Presentations: (Dec 1, 2021) A list of past and upcoming presentations on the Access Dataverse connector with Access Program Manager Michael Aldridge.
-
Access NewsCast with Karl Donaubauer: Episode 1: (Dec 15, 2021) The very first edition of Access News with Karl Donaubauer was released today. Catch up on the latest news and updates in this 30-minute video.
-
Upcoming Presentation: Troubleshooting Query Performance: (Feb 9, 2022) Join me online on Thursday, March 17, for my presentation, "Troubleshooting Query Performance," to the Denver Area Access User Group.
-
Office to Disable All VBA Code in Files from the Internet: (Feb 12, 2022) Beginning in April 2022, users will no longer have the option to manually enable VBA code in Office files downloaded from the internet.
-
Access DevCon Vienna 2022: (Mar 9, 2022) Mark your calendars and register for Access DevCon Vienna! The event will be held virtually via MS Teams on April 28 and 29, 2022, from 10 AM - 4 PM EDT.
-
Access NewsCast with Karl Donaubauer: Episode 2: (Mar 21, 2022) Catch up on the latest news and updates from the Access world in episode 2 of Karl's webcast, featuring Thomas Pfoch's Access map tool.
-
IE11 Retirement FAQ for Access Apps: (Apr 2, 2022) Internet Explorer 11 will reach end-of-life before we have an Edge-based browser control. Read on to learn how this will affect Access developers.
-
twinBASIC DevCon Vienna: Volume 2: (Apr 4, 2022) It's back! This year's Access DevCon Vienna will feature twinBASIC for the second year in a row. This time around the focus is on practical uses for Access developers.
-
Building Ribbon Interfaces in Code: (May 26, 2022) Join me online on Wednesday, July 6, for my presentation "Building Ribbon Interfaces in Code" to the Access Europe user group.
-
What Happened to the Access Roadmap: (May 31, 2022) Don't be (too) alarmed about the lack of feature development shown on the Access public roadmap. Access isn't dead...you just need to know where to look.
-
Access at Microsoft Build 2022: (Jun 14, 2022) You'll never guess what the Access team talked about at the recent annual Microsoft Build conference. I'll give you a hint: it rhymes with "beta curse."
-
Office Apps Won't Run on Windows Server After October 2025: (Jun 30, 2022) Earlier this month, Microsoft quietly announced the end of support for running (most) Office apps on Windows Server at the end of 2025.
-
Microsoft Backtracks (Temporarily?) on Policy to Block All Macros with Mark of the Web: (Jul 7, 2022) Microsoft official announces in blog comments (!) that they are rolling back their recently implemented VBA-blocking policy.
-
vbWatchdog v4 Released: (Jul 29, 2022) Version 4 of vbWatchdog just got released. If you don't already own a license for it, you should. And if you do, you should upgrade before August 31, 2022.
-
Timeline for VBA Macros Blocked by Default in Microsoft Office: (Sep 26, 2022) Enterprise customers are next in line to have macros blocked by default in Office files from the web. The policy addresses a real problem, but does it actually help?
-
Access NewsCast with Karl Donaubauer: Episode 4: (Oct 7, 2022) Catch up on the latest news and updates from the Access world in episode 4 of Karl's webcast, with guests Colin Riddington, Wayne Phillips, and, of course, Viktoria.
-
Prepare for the Upcoming Death of IE11: (Oct 28, 2022) The grim reaper takes IE11 for good on February 14, 2023. Prepare for the inevitable now to avoid unnecessary Valentine's Day pain.
-
Access DevCon Vienna 2023: April 27-28: (Feb 27, 2023) The annual Access DevCon Vienna conference will be held April 27-28, 2023. Check out this year's lineup and get registered today.
-
Richard Rost: Newest Access MVP: (Feb 28, 2023) The Access video king is back on the MVP rolls. Richard Rost earned the MVP award for the third time and his first since 2015.
-
New Edge Browser Control Now Available in Preview and Beta Versions of Microsoft Access: (Mar 15, 2023) It's finally (almost) here. The new Edge Browser control is finally available for testing in Insider versions of Microsoft 365.
-
Final Lineup Announced for Access DevCon Vienna 2023: (Mar 21, 2023) The final lineup is in for Access DevCon Vienna 2023. Check out all 12 presentation topics and speakers. And don't forget to register!
-
Edge-Based Browser Control Officially Released: (May 5, 2023) It's officially here. The new Edge-based web browser control for Microsoft Access is now Generally Available for Microsoft 365 versions 2304 and later.
-
UPDATE: Office Apps WILL Run on Windows Server After October 2025: (May 17, 2023) Earlier this year, Microsoft quietly reversed its decision to end support for running Office apps on Windows Server at the end of 2025.
-
Upcoming Presentation: Form Templates: (Jun 9, 2023) Join me online on Thursday, June 15, for my presentation, "Form Templates in Microsoft Access," to the Denver Area Access User Group.
-
DevHut.Net Goes Dark: (Jun 26, 2023) Much like the legendary Keyser Soze, Daniel Pineault's renowned Microsoft Access website--DevHut.net--suddenly disappeared last week.
-
Coming Soon: Access Developer Survey: (Jul 21, 2023) MAJOR ANNOUNCEMENT: NoLongerSet will be launching its inaugural Access Developer Survey soon. I need your help!
-
Python in Excel: (Aug 23, 2023) Microsoft just announced a built-in Python worksheet function for Excel. When can we expect similar love for Access?
-
Microsoft Announces the Death of VBScript: (Nov 1, 2023) As seems to be their new modus operandi, Microsoft has quietly rolled a hand grenade into the VBA development world with very little fanfare.
-
Upcoming Presentation: Streamline Your Import/Export Spec Workflow with VBA Classes: (Nov 9, 2023) Join me online on Wednesday, December 6, for my presentation "Streamline Your Import/Export Spec Workflow with VBA Classes" to the Access Europe user group.
-
Dropping `#If VBA7 Then` From API Declares: (Dec 21, 2023) Plus, step-by-step instructions for restoring the `#If VBA7 Then` code construct if you still need to support Office 2007 or earlier.
-
Access Day 2024: (Jan 18, 2024) Come join the Microsoft Access team, several Access MVPs (including me), and other fellow Access developers in Redmond, WA, on March 15, 2024.
-
Major Release of the Microsoft Access Version Control Add-in: (Feb 7, 2024) Version 4.x of Adam Waller's msaccess-vcs-addin has been officially released today, featuring a ribbon toolbar, SQL formatting, and basic SQL Server schema support.
-
Upcoming Presentation: Better Access Charts by Thomas Möller: (Mar 1, 2024) Thomas Möller is back with a much-anticipated follow-up to his earlier presentation on incorporating JavaScript charting frameworks in Microsoft Access.
-
twinBASIC at Access DevCon Vienna 2024: (Mar 11, 2024) Join me at Access DevCon Vienna 2024 for my presentation on creating MZ-Tools-style VBIDE addins using twinBASIC.
-
Final Lineup Announced for Access DevCon Vienna 2024: (Mar 20, 2024) The final lineup is in for Access DevCon Vienna 2024. Check out the speakers and all 12 presentation topics. And don't forget to register!
-
Access NewsCast with Karl Donaubauer: Episode 8: (Apr 4, 2024) Catch up on the latest news from the Access world in episode 8 of Karl's webcast, with guests Juanjo Luna, Alessandro Grimaldi, and fan favorite, Viktoria.
-
Sun, Sand, and Access: The 2024 Developer Conference in Valencia, Spain: (May 15, 2024) The key to a great conference is a great host. Stories from my time at the 2023 MVP Summit with Juanjo Luna show he's the perfect man for the job.
-
Microsoft Announces End of RegEx Support for VBA: (May 23, 2024) We finally have an official timeline for when Microsoft will be dropping support for VBScript--and what impact that will have on VBA developers.
-
ActiveX Disabled by Default in Office LTSC 2024: (Sep 18, 2024) The slow death of Microsoft's desktop application capabilities marches on as another COM technology struggles against a grim fate.
-
UKAUG: App-in-a-Day Conference: (Apr 24, 2026) If you live in the UK (or want a great excuse to visit!), you need to register now for the truly unique "App-in-a-Day" conference on May 19, 2026, in Birmingham, UK.
API
- ["API" tag page]: Show all articles with the tag "API" (including those where "API" is a secondary tag).
Archive
- ["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.
-
Archive Collection: Field Descriptions: (Jul 24, 2023) I'm on a short vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy this curated collection of articles. Today's topic: Field Descriptions.
-
Archive Collection: String Functions: (Jan 4, 2024) 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: String Functions.
-
Archive Collection: Combo Boxes: (Jan 5, 2024) 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: Combo Boxes.
-
Archive Collection: Window Functions: (Jan 6, 2024) 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: Window Functions.
-
Archive Collection: DevCon 2023: (Jan 7, 2024) 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: DevCon 2023.
-
Archive Collection: Design Functions: (Jan 8, 2024) 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: Design Functions.
-
Archive Collection: Debugging: (Jan 9, 2024) 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: Debugging.
-
Archive Collection: Date Functions: (Jan 10, 2024) 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: Date Functions.
-
Archive Collection: Quick Tips: (May 30, 2024) 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: Quick Tips.
-
Archive Collection: Fluent Interfaces: (May 31, 2024) 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: Fluent Interfaces.
-
Archive Collection: SQL Server: (Jun 1, 2024) 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: SQL Server.
-
Archive Collection: Nothing: (Jun 3, 2024) 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: Nothing...
AUG Video Recap
- ["AUG Video Recap" tag page]: Show all articles with the tag "AUG Video Recap" (including those where "AUG Video Recap" is a secondary tag).
-
Modern Access Interfaces: Form Resizing Solutions with Greg Regan: (Nov 25, 2024) Form Resizing Solutions in Microsoft Access: Making Applications Work Across Different Screen Resolutions (an Access User Group talk with Greg Regan)
-
Auto-Closing Access Applications: (Nov 27, 2024) A Scheduled Shutdown Solution for Multi-User Environments (an Access User Group talk with Steve Owen)
-
Migration Planning - Access to SQL Server: (Dec 1, 2024) SQL Server Migration Planning: A Strategic Approach to Transitioning from Access (an Access User Group talk with Kent Gorrell)
-
Intro to the Monaco SQL Editor with Maria Barnes: (Dec 3, 2024) Learn about the new Monaco SQL Editor feature in Microsoft Access (an Access User Group talk with Maria Barnes).
-
Web APIs in Access with George Young: (Dec 8, 2024) Using Web APIs in Microsoft Access: Connecting Access Applications to Online Services (an Access User Group talk with George Young)
-
Microsoft Graph API with Maria Barnes: (Dec 10, 2024) Working with the Microsoft Graph API from VBA: Preparing for the New Outlook (an Access User Group talk with Maria Barnes).
-
Making Access Add-ins with Crystal Long: (Dec 16, 2024) Creating Add-ins for Microsoft Access: Part One of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Building COM Add-ins with Geoffrey L. Griffith: (Dec 18, 2024) Building Office COM Add-ins with Visual Studio Tools: Part Two of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Table Design Fundamentals with Juan Soto: (Dec 20, 2024) Table Design Fundamentals in Microsoft Access: Best Practices for Beginners (an Access User Group talk with Juan Soto)
-
Custom Ribbons Using CommandBars with Adrian Bell: (Dec 29, 2024) How to Create Custom Ribbons Using CommandBars in Microsoft Access (an Access Europe User Group talk with Adrian Bell)
-
Table Field Types with Mark Edwards: (Jan 3, 2025) Understanding Field Types in Microsoft Access: A Comprehensive Guide for Table Design (an Access Beginners User Group talk with Mark Edwards)
-
Using Web APIs in Access with George Young (2024 Edition): (Jan 5, 2025) Can Your Access App Talk to the Web? A Guide to Web APIs (an Access User Group talk with George Young; updated for 2024).
-
Image Cataloguer in Access with Chris Arnold: (Jan 10, 2025) Organizing, tagging, and managing a large collection of images or photos with Microsoft Access (an Access Europe User Group presentation with Chris Arnold).
-
Relationships and Indexes with Crystal Long, Kent Gorrell, & Adrian Bell: (Jan 12, 2025) Hidden Indexes and Relationship Gotchas: Access vs SQL Server Deep Dive (plus a bonus discussion of bit flags) (an Access User Group talk with Crystal, Kent, and Ade).
-
Modern Chart Improvements with Maria Barnes: (Jan 13, 2025) Modernize Your Access Reports with Ten Powerful New Chart Types (an Access User Group talk with Maria Barnes)
-
Converting ADP to ACCDB with Juan Soto: (Jan 15, 2025) Converting Legacy ADP Files to Modern Access ACCDB Format (an Access User Group talk with Juan Soto)
-
Developing COM Add-ins with Phillip Stiefel: (Jan 19, 2025) How to Extend Access's Development Environment with Custom COM Add-ins (an Access User Group talk with Philipp Stiefel)
-
Drag and Drop: Behind the Scenes with Alessandro Grimaldi: (Jan 22, 2025) Building Drag-and-Drop Interfaces in Access with Pure VBA (an Access User Group talk with Alessandro Grimaldi)
-
Cached ODBC Connections with SSO with Ron McCarry: (Jan 24, 2025) Secure Your SQL Server Data Without Compromising the User Experience (an Access User Group talk with Ron McCarry)
-
Control Tip Text with Greg Regan: (Jan 26, 2025) Why Built-in Access Tooltips Fall Short (and How to Fix Them) (an Access User Group talk with Greg Regan)
-
When to Use SQL Server with Juan Soto: (Jan 28, 2025) How to Decide Between Access and SQL Server for Your Database Applications (an Access User Group talk with Juan Soto)
-
Runtime Ribbon Changes with Adrian Bell (NeoPa): (Jan 31, 2025) How to Add Custom Buttons to the Access Ribbon Without XML (an Access User Group talk with Adrian Bell)
-
Using Treeviews with Access with Pete Poppe (Maj P): (Feb 2, 2025) How to Handle Large Hierarchical Datasets in Access Using TreeViews (an Access User Group talk with Pete Poppe)
-
DBeaver: Database Management Tool with Kevin Bell: (Feb 5, 2025) How to Visualize and Document Complex Database Relationships Beyond Access (an Access User Group talk with Kevin Bell)
-
All About Table Relationships with Steve Owen: (Feb 9, 2025) Are You Using Access Table Relationships Correctly? (an Access User Group talk with Steve Owen)
-
Data Ingesting Pipeline with Roy Kim: (Feb 12, 2025) From IoT Hub to SQL: Real-Time Factory Data Processing in Azure (an Access User Group talk with Roy Kim)
-
Access Frameworks with John Colby: (Feb 17, 2025) Why Your Access Apps Need a Framework (and How to Build One) (an Access User Group talk with John Colby)
-
Enhanced MsgBox and Forms with Olaf Nöhring and André Minhorst: (Feb 19, 2025) Enhanced Message Box and Professional Calendar Tools for Access Applications (an Access User Group talk with Olaf Nöhring and André Minhorst)
-
Data Analysis Tips and Techniques with Luke Chung: (Feb 26, 2025) Random Sampling, Cross Tab Queries, and Other Power Tools for Access Analysis (an Access User Group talk with Luke Chung)
-
Gantt Charts: Part 1 with Aleksander Wojtasz: (Mar 2, 2025) Build Interactive Gantt Charts in Pure Access without Third-Party Controls (an Access User Group talk with Aleksander Wojtasz)
-
Gantt Charts: Part 2 with Aleksander Wojtasz: (Mar 3, 2025) Building Dynamic Gantt Charts with GDI32: Class Architecture Deep Dive (an Access User Group talk with Aleksander Wojtasz)
-
Unraveling Constraints: A Case Study in Complex Scheduling with Steve Schapel and Jack Drawbridge: (Mar 7, 2025) How to Handle Complex Scheduling When VBA Isn't Enough (an Access User Group talk with Steve Schapel)
-
Troubleshooting Access Applications with Ben Sacherich: (Mar 10, 2025) Systematic Approaches to Troubleshooting Access Applications: A Developer's Guide (an Access User Group talk with Ben Sacherich)
-
IMEX DataTask Specifications and Extended File Properties with Colin Riddington: (Mar 17, 2025) Managing Modern and Legacy Import/Export Specifications in Access (an Access User Group talk with Colin Riddington)
-
Using VBA to Create a Class Based on a Table with Adolph Dupré: (May 9, 2025) Can Your Code Write Better Class Modules Than You? (an Access User Group talk with Adolph Dupré)
-
Chat with Other Access Developers on Discord with Jim Dettman and Doug Yudovich: (May 20, 2025) Discord for Access Developers: A New Way to Connect and Collaborate (an Access User Group talk with Jim Dettman and Doug Yudovich)
-
Selling Access with SQL Server Jobs with Juan Soto: (May 27, 2025) Building a Seven-Figure Microsoft Access Consulting Practice from Scratch (an Access User Group talk with Juan Soto)
-
Professional Troubleshooting with Tom van Stiphout and Kim Young: (Jun 11, 2025) Professional Troubleshooting Techniques for Microsoft Access Applications (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Update! Update! The Company is in a State! (with Karl Donaubauer): (Jun 13, 2025) How to Protect Your Access Apps from Breaking Microsoft Updates (an Access User Group talk with Karl Donaubauer)
-
Icons for Access using Metro with Greg Regan: (Jun 18, 2025) Metro Studio Integration: 7000+ Free Icons for Modern Access Interfaces (an Access User Group talk with Greg Regan)
-
Leveraging SQL Server SPROCs with George Hepworth: (Jun 20, 2025) Should Your Business Logic Live in the Database or Interface? (an Access User Group talk with George Hepworth)
-
Using Class Modules in the Real World with Anders Ebro: (Jun 27, 2025) Event-Driven Architecture and Custom Classes: Advanced Access Development Patterns (an Access User Group talk with Anders Ebro)
-
GET and POST with JSON with Neil Sargent & Leo theDBguy: (Jul 2, 2025) Real-World JSON API Integration: GET and POST Operations in Microsoft Access (an Access User Group talk with Neil Sargent)
-
Prepping Access for Deployment with John W Colby: (Jul 18, 2025) How to Streamline Access Database Deployment Without Menu Hunting (an Access User Group talk with John W Colby)
-
Orchestrating Office with Domenico Ruggiero: (Jul 25, 2025) Supercharge the Entire Office Suite: From Excel Charts to PowerPoint Magic and Massive Word Docs (an Access User Group talk with Domenico Ruggiero)
-
AI Assistants with Alexander Denz: (Aug 8, 2025) What If Access Could Query Your Database Using Natural Language? (an Access User Group talk with Alexander Denz)
-
Outside-the-Box Access UI Design with Pete Poppe (MajP): (Aug 15, 2025) Build Excel-like Grids, Outlook-like Scheduling, Interactive Maps, and Visual Tree Navigation (an Access User Group talk with Pete Poppe)
-
Access Add-in Helper with Geoffrey L. Griffith: (Aug 22, 2025) Why Build Access Add-ins Manually When You Can Automate Everything? (an Access User Group talk with Geoffrey L. Griffith)
-
The State of Microsoft Access in 2025 with Maria Barnes: (Oct 26, 2025) Is Microsoft Access Dead? This 2025 Roadmap Update Says Absolutely Not (an Access Lunchtime talk with Maria Barnes)
-
Vibe Coding in Access with Juan Soto: (Oct 29, 2025) Can AI Really Build Your Access Database While You Just Watch and Direct? (an Access User Group talk with Juan Soto)
-
Eliminating Magic Numbers with Tom van Stiphout and Kim Young: (Nov 7, 2025) How to Successfully Take Over Someone Else's Access Project (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Access Version Control Add-in Deep Dive with Adam Waller: (Jan 12, 2026) Behind the Scenes of the Add-in That Makes Git Workflows Possible for Access Databases (an Access User Group Talk with Adam Waller)
AutoHotKey
- ["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.
Backwards Compatibility
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
-
Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
-
How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
-
Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
-
Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Access 101: A Quick Start Guide to Microsoft Access: (Oct 5, 2023) These are my Access best practices. There are many like them, but these are mine.
- Access 101: Bound vs. Unbound Forms: (Oct 6, 2023) A short primer on the difference between bound and unbound forms in Microsoft Access, along with example use cases for each.
- Access 101: What is a Table in Access?: (Oct 10, 2023) If you know Excel worksheets, Access tables will look very familiar. Be careful, though! There is a "key" difference between the two.
- Access 101: What is a Query in Access?: (Oct 11, 2023) Queries are how we get useful information from data stored in tables. They also let us make bulk changes to our data. ... Be careful with queries!
- Access 101: Front-End vs. Back-End: (Oct 12, 2023) "Front-end" and "back-end" are the terms we use to distinguish between the user interface and the data storage, respectively.
- Access 101: Local vs. Linked Tables: (Oct 17, 2023) In Access, tables can be local (stored in the front-end file) or linked (stored in a separate database). Let's explore when and why to use each type.
- Access 101: Referential Integrity: (Oct 24, 2023) Referential integrity is the key to ensuring data quality in a relational database. Learn what it is and how to enforce it among your back-end tables.
- Access 101: SELECT Query: (Oct 26, 2023) The SELECT query is the source of a relational database system's true power.
- Access 101: INSERT INTO ("Append") Query: (Nov 17, 2023) Discover the power of INSERT INTO queries in Microsoft Access, a vital tool that allows you to add a single record or transfer data from one table to another.
- Access 101: UPDATE Query: (Nov 30, 2023) The UPDATE query: a dangerously powerful tool for making bulk changes to data in your Access tables.
- Access 101: DELETE Query: (Jan 31, 2024) The DELETE query: a tool for removing records in bulk that is almost too dangerous to use.
- Access 101: UNION Query: (Jun 6, 2024) The UNION query: a way to stack multiple SELECT queries into a single resulting data set.
- ["Advanced" tag page]: Show all articles with the tag "Advanced" (including those where "Advanced" is a secondary tag).
- No Longer Set: (Nov 17, 2020) The definitive guide to JetShowPlan. How to: toggle it with a keyboard shortcut, interpret its output, and add syntax highlighting to showplan.out files.
- Recursion Demystified: Creating Subfolders: (Nov 29, 2020) Recursion: it's not just for calculating factorials any more! A practical example of using recursion to create multiple missing subfolders.
- VBA Collections: AKA, Linked Lists: (Dec 6, 2020) Everything I still remember about the Data Structures course I took 20 years ago as it applies to Collections in VBA.
- VBA Dictionaries: AKA, Hash Tables: (Dec 7, 2020) This is not an article about Amsterdam flea markets. Hash tables are the data structures upon which Dictionaries are built.
- "Complex" DTOs in VBA: (Dec 14, 2020) Can you use the OpenArgs parameter to pass multiple values to forms and reports with compile-time checking? You can if you use DTOs.
- Checklist: The Best Access Applications: (Dec 19, 2020) Good. Better. BEST. Is your Access application as good as it can be?
- Deceptively Complex Booleans: (Dec 29, 2020) Why is VBA such an optimistic language? Because there's only one way to say "No," but 65,535 ways to say "Yes."
- Super-Safe Boolean Handling: (Dec 30, 2020) If you want to be safe when working with Booleans, you need to ensure they're stored as 0 or -1. That's not as easy as you might think.
- Strongly Typed Collections in VBA: (Mar 26, 2021) Get better type safety and access to IntelliSense inside For Each loops by using "strongly-typed collections" in place of the VBA Collection type.
- The Tradeoffs of ByRef and ByVal: (Apr 3, 2021) As they say, there is no free lunch. Passing by value or by reference is the sort of distinction you can mostly ignore...until one day you can't.
- Raising Custom Events in VBA: (Apr 27, 2021) This quick tutorial will have you writing custom events in VBA in no time.
- Using WithEvents to Encapsulate Event Handling Code: (May 4, 2021) You don't need to call the event handler for every control to handle its events. Instead, you can use WithEvents to encapsulate that code in a class module.
- Handling Multiple Control Types in a WithEvents Class: (May 5, 2021) Using WithEvents to subclass form controls is a powerful technique. Here's one way to handle multiple control types in a single class.
- TypeName vs. TypeOf: (May 12, 2021) You can check the type of a variable in VBA using TypeName or TypeOf. But do you know when to use which? And why? Let's explore.
- VarType in VBA: (May 13, 2021) The VarType function lets you determine the underlying type of a variable. How does it fit in with TypeName and TypeOf?
- Approximate String Matching Workshop: (May 19, 2021) Access wizard Alessandro Grimaldi is offering a paid workshop where he will teach how to implement the Levenshtein Distance algorithm in Access.
- Double-declaring APIs: (Oct 9, 2021) Is it finally time to stop adding the `#If VBA7 Then` guard clause to PtrSafe API declarations? Let's explore.
- 64-bit Unsigned Integers in VBA: (Nov 22, 2021) VBA is missing a data type. The workaround--while not pretty--is at least straightforward.
- Side-by-Side Installs of 32-bit and 64-bit Versions of Access: (Dec 6, 2021) You can't install two different Office bitnesses side by side on the same computer. Or can you? ...
- Using Windows Authentication to Connect to SQL Server from Outside the Domain: (Dec 8, 2021) You don't need to join your computer to a domain to be able to connect to SQL Server using Windows Authentication. You just need to know this simple trick.
- JetShowPlan Manager: (Dec 18, 2021) The quickest and easiest way to get started analyzing Microsoft Access query performance is with IslaDogs' JetShowPlan Manager application.
- The Microsoft Access Ternary Operator: (Jan 6, 2022) It's a function. It's a statement. It's an operator. It's a--what the heck do we call this short-circuit-evaluating IIf() thing and why does it even matter?
- 3 Ways to Create Class Instances in VBA: (Jan 13, 2022) Before you can use a class, you need to create an instance of the class and assign it to an object variable. ... Or do you?
- Mark-of-the-Web (MOTW) Details: (Mar 12, 2022) Microsoft announced that VBA will be blocked soon in all files downloaded from the web. Let's dive into how Windows manages this "Mark of the Web."
- DISTINCT vs. GROUP BY: Microsoft Access Speed Test: (Mar 15, 2022) The GROUP BY and DISTINCT clauses can both be used to generate identical results. But which one is faster in Access? And--more importantly--why?
- References, Protocols, and Language Specifications: (Apr 9, 2022) They're not always easy to read, but when you are looking for official answers, it's hard to beat these low-level protocol and language specifications.
- HRESULT: Use "Long" and Not "LongPtr": (Aug 2, 2022) If the return type of an API function call is an HRESULT in the C++ header file, it should be declared as a Long in VBA (and not a LongPtr).
- Understanding Signed and Unsigned Numbers in VBA: (Sep 9, 2022) Signed and unsigned numbers–and their hexadecimal representations–can interact in surprising ways in VBA.
- Unicode Private Use Areas in VBA: (Sep 13, 2022) Looking for a safe temporary character or text delimiter that is guaranteed to not exist in your data set? Look no further than the Unicode Private Use Areas.
- VBA Performance Tip: How to Cache Results of Slow Processes: (Feb 17, 2023) Store expensive function call results with memoization. Learn to implement this technique with our step-by-step instructions and sample code.
- Microsoft Access's Surprising Folder Locking Behavior: (Mar 29, 2023) Microsoft Access could be the source of file and folder locks in ways that might surprise you.
- Permutation Table: (Aug 8, 2023) We use Python's handy itertools.permutations() function to populate a local Access table with unique permutation values.
- Static Linking vs. Dynamic Linking: (Jan 30, 2024) You've likely heard the terms "dynamic link library", "DLL Hell", and "static linking." But what do they mean? Why should you care? And how do they apply to Access?
AdventureWorks
- ["AdventureWorks" tag page]: Show all articles with the tag "AdventureWorks" (including those where "AdventureWorks" is a secondary tag).
-
The AdventureWorks SQL Server Sample Database: (Sep 8, 2023) Step-by-step instructions for installing the AdventureWorks SQL Server sample database.
AI
- ["AI" tag page]: Show all articles with the tag "AI" (including those where "AI" is a secondary tag).
-
How ChatGPT Helped Me Write a Complex Stored Procedure in SQL Server: (Apr 25, 2023) Stop treating ChatGPT like an all-knowing oracle and start treating it like the hard-working, enthusiastic, but not-quite-fully-formed intern that it currently is.
-
How to Use the CLEAR Framework to Get Better Results from ChatGPT: (May 4, 2023) Five concepts to help you improve your "prompt engineering" skills.
-
ChatGPT: Genius or Fraud?: (Jul 14, 2023) There's an ongoing debate over whether developers can trust the current crop of LLMs. The problem is people are asking the wrong question.
-
"AI Will Take My Job": A Self-Fulfilling Prophecy: (Dec 18, 2023) Whether you think AI is coming to *take* your job... Or you think AI will help you *be more productive* at your job... You're probably right.
-
The One Policy That Proves Microsoft is All In on AI: (Mar 12, 2024) Spanish Conquistador Hernán Cortés would be proud.
-
The AI Ecosystem Evolves: Foundational Models Give Way to Specialized Implementations in 2024: (Mar 22, 2024) The rise of specialized AI in 2024 will bring about a new era of intelligent, industry-specific solutions that will redefine the way businesses operate.
Announcement
- ["Announcement" tag page]: Show all articles with the tag "Announcement" (including those where "Announcement" is a secondary tag).
-
Combo Boxapalooza!: (Jun 4, 2021) Join me at 9 AM EDT on Friday, June 18th, where I'll help you unlock the true potential of my favorite Access control: the combo box.
-
Are You an Access Developer in Northeast Pennsylvania?: (Oct 25, 2021) Calling all (current or aspiring) Access developers in Northeast PA: we have an immediate job opening at Grandjean & Braverman, Inc.
-
Microsoft Access MVP: (Nov 1, 2021) Say hello to the newest Microsoft MVP Awardee for Office Apps & Services (MS Access).
-
Access Roadmap Update: (Nov 15, 2021) Microsoft has recently updated the Access roadmap for 2021 and beyond. Check out what's on the horizon for the next 14 months.
-
Access Dataverse Connector Presentations: (Dec 1, 2021) A list of past and upcoming presentations on the Access Dataverse connector with Access Program Manager Michael Aldridge.
-
Access NewsCast with Karl Donaubauer: Episode 1: (Dec 15, 2021) The very first edition of Access News with Karl Donaubauer was released today. Catch up on the latest news and updates in this 30-minute video.
-
Upcoming Presentation: Troubleshooting Query Performance: (Feb 9, 2022) Join me online on Thursday, March 17, for my presentation, "Troubleshooting Query Performance," to the Denver Area Access User Group.
-
Office to Disable All VBA Code in Files from the Internet: (Feb 12, 2022) Beginning in April 2022, users will no longer have the option to manually enable VBA code in Office files downloaded from the internet.
-
Access DevCon Vienna 2022: (Mar 9, 2022) Mark your calendars and register for Access DevCon Vienna! The event will be held virtually via MS Teams on April 28 and 29, 2022, from 10 AM - 4 PM EDT.
-
Access NewsCast with Karl Donaubauer: Episode 2: (Mar 21, 2022) Catch up on the latest news and updates from the Access world in episode 2 of Karl's webcast, featuring Thomas Pfoch's Access map tool.
-
IE11 Retirement FAQ for Access Apps: (Apr 2, 2022) Internet Explorer 11 will reach end-of-life before we have an Edge-based browser control. Read on to learn how this will affect Access developers.
-
twinBASIC DevCon Vienna: Volume 2: (Apr 4, 2022) It's back! This year's Access DevCon Vienna will feature twinBASIC for the second year in a row. This time around the focus is on practical uses for Access developers.
-
Building Ribbon Interfaces in Code: (May 26, 2022) Join me online on Wednesday, July 6, for my presentation "Building Ribbon Interfaces in Code" to the Access Europe user group.
-
What Happened to the Access Roadmap: (May 31, 2022) Don't be (too) alarmed about the lack of feature development shown on the Access public roadmap. Access isn't dead...you just need to know where to look.
-
Access at Microsoft Build 2022: (Jun 14, 2022) You'll never guess what the Access team talked about at the recent annual Microsoft Build conference. I'll give you a hint: it rhymes with "beta curse."
-
Office Apps Won't Run on Windows Server After October 2025: (Jun 30, 2022) Earlier this month, Microsoft quietly announced the end of support for running (most) Office apps on Windows Server at the end of 2025.
-
Microsoft Backtracks (Temporarily?) on Policy to Block All Macros with Mark of the Web: (Jul 7, 2022) Microsoft official announces in blog comments (!) that they are rolling back their recently implemented VBA-blocking policy.
-
vbWatchdog v4 Released: (Jul 29, 2022) Version 4 of vbWatchdog just got released. If you don't already own a license for it, you should. And if you do, you should upgrade before August 31, 2022.
-
Timeline for VBA Macros Blocked by Default in Microsoft Office: (Sep 26, 2022) Enterprise customers are next in line to have macros blocked by default in Office files from the web. The policy addresses a real problem, but does it actually help?
-
Access NewsCast with Karl Donaubauer: Episode 4: (Oct 7, 2022) Catch up on the latest news and updates from the Access world in episode 4 of Karl's webcast, with guests Colin Riddington, Wayne Phillips, and, of course, Viktoria.
-
Prepare for the Upcoming Death of IE11: (Oct 28, 2022) The grim reaper takes IE11 for good on February 14, 2023. Prepare for the inevitable now to avoid unnecessary Valentine's Day pain.
-
Access DevCon Vienna 2023: April 27-28: (Feb 27, 2023) The annual Access DevCon Vienna conference will be held April 27-28, 2023. Check out this year's lineup and get registered today.
-
Richard Rost: Newest Access MVP: (Feb 28, 2023) The Access video king is back on the MVP rolls. Richard Rost earned the MVP award for the third time and his first since 2015.
-
New Edge Browser Control Now Available in Preview and Beta Versions of Microsoft Access: (Mar 15, 2023) It's finally (almost) here. The new Edge Browser control is finally available for testing in Insider versions of Microsoft 365.
-
Final Lineup Announced for Access DevCon Vienna 2023: (Mar 21, 2023) The final lineup is in for Access DevCon Vienna 2023. Check out all 12 presentation topics and speakers. And don't forget to register!
-
Edge-Based Browser Control Officially Released: (May 5, 2023) It's officially here. The new Edge-based web browser control for Microsoft Access is now Generally Available for Microsoft 365 versions 2304 and later.
-
UPDATE: Office Apps WILL Run on Windows Server After October 2025: (May 17, 2023) Earlier this year, Microsoft quietly reversed its decision to end support for running Office apps on Windows Server at the end of 2025.
-
Upcoming Presentation: Form Templates: (Jun 9, 2023) Join me online on Thursday, June 15, for my presentation, "Form Templates in Microsoft Access," to the Denver Area Access User Group.
-
DevHut.Net Goes Dark: (Jun 26, 2023) Much like the legendary Keyser Soze, Daniel Pineault's renowned Microsoft Access website--DevHut.net--suddenly disappeared last week.
-
Coming Soon: Access Developer Survey: (Jul 21, 2023) MAJOR ANNOUNCEMENT: NoLongerSet will be launching its inaugural Access Developer Survey soon. I need your help!
-
Python in Excel: (Aug 23, 2023) Microsoft just announced a built-in Python worksheet function for Excel. When can we expect similar love for Access?
-
Microsoft Announces the Death of VBScript: (Nov 1, 2023) As seems to be their new modus operandi, Microsoft has quietly rolled a hand grenade into the VBA development world with very little fanfare.
-
Upcoming Presentation: Streamline Your Import/Export Spec Workflow with VBA Classes: (Nov 9, 2023) Join me online on Wednesday, December 6, for my presentation "Streamline Your Import/Export Spec Workflow with VBA Classes" to the Access Europe user group.
-
Dropping `#If VBA7 Then` From API Declares: (Dec 21, 2023) Plus, step-by-step instructions for restoring the `#If VBA7 Then` code construct if you still need to support Office 2007 or earlier.
-
Access Day 2024: (Jan 18, 2024) Come join the Microsoft Access team, several Access MVPs (including me), and other fellow Access developers in Redmond, WA, on March 15, 2024.
-
Major Release of the Microsoft Access Version Control Add-in: (Feb 7, 2024) Version 4.x of Adam Waller's msaccess-vcs-addin has been officially released today, featuring a ribbon toolbar, SQL formatting, and basic SQL Server schema support.
-
Upcoming Presentation: Better Access Charts by Thomas Möller: (Mar 1, 2024) Thomas Möller is back with a much-anticipated follow-up to his earlier presentation on incorporating JavaScript charting frameworks in Microsoft Access.
-
twinBASIC at Access DevCon Vienna 2024: (Mar 11, 2024) Join me at Access DevCon Vienna 2024 for my presentation on creating MZ-Tools-style VBIDE addins using twinBASIC.
-
Final Lineup Announced for Access DevCon Vienna 2024: (Mar 20, 2024) The final lineup is in for Access DevCon Vienna 2024. Check out the speakers and all 12 presentation topics. And don't forget to register!
-
Access NewsCast with Karl Donaubauer: Episode 8: (Apr 4, 2024) Catch up on the latest news from the Access world in episode 8 of Karl's webcast, with guests Juanjo Luna, Alessandro Grimaldi, and fan favorite, Viktoria.
-
Sun, Sand, and Access: The 2024 Developer Conference in Valencia, Spain: (May 15, 2024) The key to a great conference is a great host. Stories from my time at the 2023 MVP Summit with Juanjo Luna show he's the perfect man for the job.
-
Microsoft Announces End of RegEx Support for VBA: (May 23, 2024) We finally have an official timeline for when Microsoft will be dropping support for VBScript--and what impact that will have on VBA developers.
-
ActiveX Disabled by Default in Office LTSC 2024: (Sep 18, 2024) The slow death of Microsoft's desktop application capabilities marches on as another COM technology struggles against a grim fate.
-
UKAUG: App-in-a-Day Conference: (Apr 24, 2026) If you live in the UK (or want a great excuse to visit!), you need to register now for the truly unique "App-in-a-Day" conference on May 19, 2026, in Birmingham, UK.
API
- ["API" tag page]: Show all articles with the tag "API" (including those where "API" is a secondary tag).
Archive
- ["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.
-
Archive Collection: Field Descriptions: (Jul 24, 2023) I'm on a short vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy this curated collection of articles. Today's topic: Field Descriptions.
-
Archive Collection: String Functions: (Jan 4, 2024) 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: String Functions.
-
Archive Collection: Combo Boxes: (Jan 5, 2024) 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: Combo Boxes.
-
Archive Collection: Window Functions: (Jan 6, 2024) 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: Window Functions.
-
Archive Collection: DevCon 2023: (Jan 7, 2024) 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: DevCon 2023.
-
Archive Collection: Design Functions: (Jan 8, 2024) 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: Design Functions.
-
Archive Collection: Debugging: (Jan 9, 2024) 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: Debugging.
-
Archive Collection: Date Functions: (Jan 10, 2024) 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: Date Functions.
-
Archive Collection: Quick Tips: (May 30, 2024) 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: Quick Tips.
-
Archive Collection: Fluent Interfaces: (May 31, 2024) 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: Fluent Interfaces.
-
Archive Collection: SQL Server: (Jun 1, 2024) 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: SQL Server.
-
Archive Collection: Nothing: (Jun 3, 2024) 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: Nothing...
AUG Video Recap
- ["AUG Video Recap" tag page]: Show all articles with the tag "AUG Video Recap" (including those where "AUG Video Recap" is a secondary tag).
-
Modern Access Interfaces: Form Resizing Solutions with Greg Regan: (Nov 25, 2024) Form Resizing Solutions in Microsoft Access: Making Applications Work Across Different Screen Resolutions (an Access User Group talk with Greg Regan)
-
Auto-Closing Access Applications: (Nov 27, 2024) A Scheduled Shutdown Solution for Multi-User Environments (an Access User Group talk with Steve Owen)
-
Migration Planning - Access to SQL Server: (Dec 1, 2024) SQL Server Migration Planning: A Strategic Approach to Transitioning from Access (an Access User Group talk with Kent Gorrell)
-
Intro to the Monaco SQL Editor with Maria Barnes: (Dec 3, 2024) Learn about the new Monaco SQL Editor feature in Microsoft Access (an Access User Group talk with Maria Barnes).
-
Web APIs in Access with George Young: (Dec 8, 2024) Using Web APIs in Microsoft Access: Connecting Access Applications to Online Services (an Access User Group talk with George Young)
-
Microsoft Graph API with Maria Barnes: (Dec 10, 2024) Working with the Microsoft Graph API from VBA: Preparing for the New Outlook (an Access User Group talk with Maria Barnes).
-
Making Access Add-ins with Crystal Long: (Dec 16, 2024) Creating Add-ins for Microsoft Access: Part One of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Building COM Add-ins with Geoffrey L. Griffith: (Dec 18, 2024) Building Office COM Add-ins with Visual Studio Tools: Part Two of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Table Design Fundamentals with Juan Soto: (Dec 20, 2024) Table Design Fundamentals in Microsoft Access: Best Practices for Beginners (an Access User Group talk with Juan Soto)
-
Custom Ribbons Using CommandBars with Adrian Bell: (Dec 29, 2024) How to Create Custom Ribbons Using CommandBars in Microsoft Access (an Access Europe User Group talk with Adrian Bell)
-
Table Field Types with Mark Edwards: (Jan 3, 2025) Understanding Field Types in Microsoft Access: A Comprehensive Guide for Table Design (an Access Beginners User Group talk with Mark Edwards)
-
Using Web APIs in Access with George Young (2024 Edition): (Jan 5, 2025) Can Your Access App Talk to the Web? A Guide to Web APIs (an Access User Group talk with George Young; updated for 2024).
-
Image Cataloguer in Access with Chris Arnold: (Jan 10, 2025) Organizing, tagging, and managing a large collection of images or photos with Microsoft Access (an Access Europe User Group presentation with Chris Arnold).
-
Relationships and Indexes with Crystal Long, Kent Gorrell, & Adrian Bell: (Jan 12, 2025) Hidden Indexes and Relationship Gotchas: Access vs SQL Server Deep Dive (plus a bonus discussion of bit flags) (an Access User Group talk with Crystal, Kent, and Ade).
-
Modern Chart Improvements with Maria Barnes: (Jan 13, 2025) Modernize Your Access Reports with Ten Powerful New Chart Types (an Access User Group talk with Maria Barnes)
-
Converting ADP to ACCDB with Juan Soto: (Jan 15, 2025) Converting Legacy ADP Files to Modern Access ACCDB Format (an Access User Group talk with Juan Soto)
-
Developing COM Add-ins with Phillip Stiefel: (Jan 19, 2025) How to Extend Access's Development Environment with Custom COM Add-ins (an Access User Group talk with Philipp Stiefel)
-
Drag and Drop: Behind the Scenes with Alessandro Grimaldi: (Jan 22, 2025) Building Drag-and-Drop Interfaces in Access with Pure VBA (an Access User Group talk with Alessandro Grimaldi)
-
Cached ODBC Connections with SSO with Ron McCarry: (Jan 24, 2025) Secure Your SQL Server Data Without Compromising the User Experience (an Access User Group talk with Ron McCarry)
-
Control Tip Text with Greg Regan: (Jan 26, 2025) Why Built-in Access Tooltips Fall Short (and How to Fix Them) (an Access User Group talk with Greg Regan)
-
When to Use SQL Server with Juan Soto: (Jan 28, 2025) How to Decide Between Access and SQL Server for Your Database Applications (an Access User Group talk with Juan Soto)
-
Runtime Ribbon Changes with Adrian Bell (NeoPa): (Jan 31, 2025) How to Add Custom Buttons to the Access Ribbon Without XML (an Access User Group talk with Adrian Bell)
-
Using Treeviews with Access with Pete Poppe (Maj P): (Feb 2, 2025) How to Handle Large Hierarchical Datasets in Access Using TreeViews (an Access User Group talk with Pete Poppe)
-
DBeaver: Database Management Tool with Kevin Bell: (Feb 5, 2025) How to Visualize and Document Complex Database Relationships Beyond Access (an Access User Group talk with Kevin Bell)
-
All About Table Relationships with Steve Owen: (Feb 9, 2025) Are You Using Access Table Relationships Correctly? (an Access User Group talk with Steve Owen)
-
Data Ingesting Pipeline with Roy Kim: (Feb 12, 2025) From IoT Hub to SQL: Real-Time Factory Data Processing in Azure (an Access User Group talk with Roy Kim)
-
Access Frameworks with John Colby: (Feb 17, 2025) Why Your Access Apps Need a Framework (and How to Build One) (an Access User Group talk with John Colby)
-
Enhanced MsgBox and Forms with Olaf Nöhring and André Minhorst: (Feb 19, 2025) Enhanced Message Box and Professional Calendar Tools for Access Applications (an Access User Group talk with Olaf Nöhring and André Minhorst)
-
Data Analysis Tips and Techniques with Luke Chung: (Feb 26, 2025) Random Sampling, Cross Tab Queries, and Other Power Tools for Access Analysis (an Access User Group talk with Luke Chung)
-
Gantt Charts: Part 1 with Aleksander Wojtasz: (Mar 2, 2025) Build Interactive Gantt Charts in Pure Access without Third-Party Controls (an Access User Group talk with Aleksander Wojtasz)
-
Gantt Charts: Part 2 with Aleksander Wojtasz: (Mar 3, 2025) Building Dynamic Gantt Charts with GDI32: Class Architecture Deep Dive (an Access User Group talk with Aleksander Wojtasz)
-
Unraveling Constraints: A Case Study in Complex Scheduling with Steve Schapel and Jack Drawbridge: (Mar 7, 2025) How to Handle Complex Scheduling When VBA Isn't Enough (an Access User Group talk with Steve Schapel)
-
Troubleshooting Access Applications with Ben Sacherich: (Mar 10, 2025) Systematic Approaches to Troubleshooting Access Applications: A Developer's Guide (an Access User Group talk with Ben Sacherich)
-
IMEX DataTask Specifications and Extended File Properties with Colin Riddington: (Mar 17, 2025) Managing Modern and Legacy Import/Export Specifications in Access (an Access User Group talk with Colin Riddington)
-
Using VBA to Create a Class Based on a Table with Adolph Dupré: (May 9, 2025) Can Your Code Write Better Class Modules Than You? (an Access User Group talk with Adolph Dupré)
-
Chat with Other Access Developers on Discord with Jim Dettman and Doug Yudovich: (May 20, 2025) Discord for Access Developers: A New Way to Connect and Collaborate (an Access User Group talk with Jim Dettman and Doug Yudovich)
-
Selling Access with SQL Server Jobs with Juan Soto: (May 27, 2025) Building a Seven-Figure Microsoft Access Consulting Practice from Scratch (an Access User Group talk with Juan Soto)
-
Professional Troubleshooting with Tom van Stiphout and Kim Young: (Jun 11, 2025) Professional Troubleshooting Techniques for Microsoft Access Applications (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Update! Update! The Company is in a State! (with Karl Donaubauer): (Jun 13, 2025) How to Protect Your Access Apps from Breaking Microsoft Updates (an Access User Group talk with Karl Donaubauer)
-
Icons for Access using Metro with Greg Regan: (Jun 18, 2025) Metro Studio Integration: 7000+ Free Icons for Modern Access Interfaces (an Access User Group talk with Greg Regan)
-
Leveraging SQL Server SPROCs with George Hepworth: (Jun 20, 2025) Should Your Business Logic Live in the Database or Interface? (an Access User Group talk with George Hepworth)
-
Using Class Modules in the Real World with Anders Ebro: (Jun 27, 2025) Event-Driven Architecture and Custom Classes: Advanced Access Development Patterns (an Access User Group talk with Anders Ebro)
-
GET and POST with JSON with Neil Sargent & Leo theDBguy: (Jul 2, 2025) Real-World JSON API Integration: GET and POST Operations in Microsoft Access (an Access User Group talk with Neil Sargent)
-
Prepping Access for Deployment with John W Colby: (Jul 18, 2025) How to Streamline Access Database Deployment Without Menu Hunting (an Access User Group talk with John W Colby)
-
Orchestrating Office with Domenico Ruggiero: (Jul 25, 2025) Supercharge the Entire Office Suite: From Excel Charts to PowerPoint Magic and Massive Word Docs (an Access User Group talk with Domenico Ruggiero)
-
AI Assistants with Alexander Denz: (Aug 8, 2025) What If Access Could Query Your Database Using Natural Language? (an Access User Group talk with Alexander Denz)
-
Outside-the-Box Access UI Design with Pete Poppe (MajP): (Aug 15, 2025) Build Excel-like Grids, Outlook-like Scheduling, Interactive Maps, and Visual Tree Navigation (an Access User Group talk with Pete Poppe)
-
Access Add-in Helper with Geoffrey L. Griffith: (Aug 22, 2025) Why Build Access Add-ins Manually When You Can Automate Everything? (an Access User Group talk with Geoffrey L. Griffith)
-
The State of Microsoft Access in 2025 with Maria Barnes: (Oct 26, 2025) Is Microsoft Access Dead? This 2025 Roadmap Update Says Absolutely Not (an Access Lunchtime talk with Maria Barnes)
-
Vibe Coding in Access with Juan Soto: (Oct 29, 2025) Can AI Really Build Your Access Database While You Just Watch and Direct? (an Access User Group talk with Juan Soto)
-
Eliminating Magic Numbers with Tom van Stiphout and Kim Young: (Nov 7, 2025) How to Successfully Take Over Someone Else's Access Project (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Access Version Control Add-in Deep Dive with Adam Waller: (Jan 12, 2026) Behind the Scenes of the Add-in That Makes Git Workflows Possible for Access Databases (an Access User Group Talk with Adam Waller)
AutoHotKey
- ["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.
Backwards Compatibility
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
-
Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
-
How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
-
Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
-
Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- The AdventureWorks SQL Server Sample Database: (Sep 8, 2023) Step-by-step instructions for installing the AdventureWorks SQL Server sample database.
- ["AI" tag page]: Show all articles with the tag "AI" (including those where "AI" is a secondary tag).
- How ChatGPT Helped Me Write a Complex Stored Procedure in SQL Server: (Apr 25, 2023) Stop treating ChatGPT like an all-knowing oracle and start treating it like the hard-working, enthusiastic, but not-quite-fully-formed intern that it currently is.
- How to Use the CLEAR Framework to Get Better Results from ChatGPT: (May 4, 2023) Five concepts to help you improve your "prompt engineering" skills.
- ChatGPT: Genius or Fraud?: (Jul 14, 2023) There's an ongoing debate over whether developers can trust the current crop of LLMs. The problem is people are asking the wrong question.
- "AI Will Take My Job": A Self-Fulfilling Prophecy: (Dec 18, 2023) Whether you think AI is coming to *take* your job... Or you think AI will help you *be more productive* at your job... You're probably right.
- The One Policy That Proves Microsoft is All In on AI: (Mar 12, 2024) Spanish Conquistador Hernán Cortés would be proud.
- The AI Ecosystem Evolves: Foundational Models Give Way to Specialized Implementations in 2024: (Mar 22, 2024) The rise of specialized AI in 2024 will bring about a new era of intelligent, industry-specific solutions that will redefine the way businesses operate.
Announcement
- ["Announcement" tag page]: Show all articles with the tag "Announcement" (including those where "Announcement" is a secondary tag).
-
Combo Boxapalooza!: (Jun 4, 2021) Join me at 9 AM EDT on Friday, June 18th, where I'll help you unlock the true potential of my favorite Access control: the combo box.
-
Are You an Access Developer in Northeast Pennsylvania?: (Oct 25, 2021) Calling all (current or aspiring) Access developers in Northeast PA: we have an immediate job opening at Grandjean & Braverman, Inc.
-
Microsoft Access MVP: (Nov 1, 2021) Say hello to the newest Microsoft MVP Awardee for Office Apps & Services (MS Access).
-
Access Roadmap Update: (Nov 15, 2021) Microsoft has recently updated the Access roadmap for 2021 and beyond. Check out what's on the horizon for the next 14 months.
-
Access Dataverse Connector Presentations: (Dec 1, 2021) A list of past and upcoming presentations on the Access Dataverse connector with Access Program Manager Michael Aldridge.
-
Access NewsCast with Karl Donaubauer: Episode 1: (Dec 15, 2021) The very first edition of Access News with Karl Donaubauer was released today. Catch up on the latest news and updates in this 30-minute video.
-
Upcoming Presentation: Troubleshooting Query Performance: (Feb 9, 2022) Join me online on Thursday, March 17, for my presentation, "Troubleshooting Query Performance," to the Denver Area Access User Group.
-
Office to Disable All VBA Code in Files from the Internet: (Feb 12, 2022) Beginning in April 2022, users will no longer have the option to manually enable VBA code in Office files downloaded from the internet.
-
Access DevCon Vienna 2022: (Mar 9, 2022) Mark your calendars and register for Access DevCon Vienna! The event will be held virtually via MS Teams on April 28 and 29, 2022, from 10 AM - 4 PM EDT.
-
Access NewsCast with Karl Donaubauer: Episode 2: (Mar 21, 2022) Catch up on the latest news and updates from the Access world in episode 2 of Karl's webcast, featuring Thomas Pfoch's Access map tool.
-
IE11 Retirement FAQ for Access Apps: (Apr 2, 2022) Internet Explorer 11 will reach end-of-life before we have an Edge-based browser control. Read on to learn how this will affect Access developers.
-
twinBASIC DevCon Vienna: Volume 2: (Apr 4, 2022) It's back! This year's Access DevCon Vienna will feature twinBASIC for the second year in a row. This time around the focus is on practical uses for Access developers.
-
Building Ribbon Interfaces in Code: (May 26, 2022) Join me online on Wednesday, July 6, for my presentation "Building Ribbon Interfaces in Code" to the Access Europe user group.
-
What Happened to the Access Roadmap: (May 31, 2022) Don't be (too) alarmed about the lack of feature development shown on the Access public roadmap. Access isn't dead...you just need to know where to look.
-
Access at Microsoft Build 2022: (Jun 14, 2022) You'll never guess what the Access team talked about at the recent annual Microsoft Build conference. I'll give you a hint: it rhymes with "beta curse."
-
Office Apps Won't Run on Windows Server After October 2025: (Jun 30, 2022) Earlier this month, Microsoft quietly announced the end of support for running (most) Office apps on Windows Server at the end of 2025.
-
Microsoft Backtracks (Temporarily?) on Policy to Block All Macros with Mark of the Web: (Jul 7, 2022) Microsoft official announces in blog comments (!) that they are rolling back their recently implemented VBA-blocking policy.
-
vbWatchdog v4 Released: (Jul 29, 2022) Version 4 of vbWatchdog just got released. If you don't already own a license for it, you should. And if you do, you should upgrade before August 31, 2022.
-
Timeline for VBA Macros Blocked by Default in Microsoft Office: (Sep 26, 2022) Enterprise customers are next in line to have macros blocked by default in Office files from the web. The policy addresses a real problem, but does it actually help?
-
Access NewsCast with Karl Donaubauer: Episode 4: (Oct 7, 2022) Catch up on the latest news and updates from the Access world in episode 4 of Karl's webcast, with guests Colin Riddington, Wayne Phillips, and, of course, Viktoria.
-
Prepare for the Upcoming Death of IE11: (Oct 28, 2022) The grim reaper takes IE11 for good on February 14, 2023. Prepare for the inevitable now to avoid unnecessary Valentine's Day pain.
-
Access DevCon Vienna 2023: April 27-28: (Feb 27, 2023) The annual Access DevCon Vienna conference will be held April 27-28, 2023. Check out this year's lineup and get registered today.
-
Richard Rost: Newest Access MVP: (Feb 28, 2023) The Access video king is back on the MVP rolls. Richard Rost earned the MVP award for the third time and his first since 2015.
-
New Edge Browser Control Now Available in Preview and Beta Versions of Microsoft Access: (Mar 15, 2023) It's finally (almost) here. The new Edge Browser control is finally available for testing in Insider versions of Microsoft 365.
-
Final Lineup Announced for Access DevCon Vienna 2023: (Mar 21, 2023) The final lineup is in for Access DevCon Vienna 2023. Check out all 12 presentation topics and speakers. And don't forget to register!
-
Edge-Based Browser Control Officially Released: (May 5, 2023) It's officially here. The new Edge-based web browser control for Microsoft Access is now Generally Available for Microsoft 365 versions 2304 and later.
-
UPDATE: Office Apps WILL Run on Windows Server After October 2025: (May 17, 2023) Earlier this year, Microsoft quietly reversed its decision to end support for running Office apps on Windows Server at the end of 2025.
-
Upcoming Presentation: Form Templates: (Jun 9, 2023) Join me online on Thursday, June 15, for my presentation, "Form Templates in Microsoft Access," to the Denver Area Access User Group.
-
DevHut.Net Goes Dark: (Jun 26, 2023) Much like the legendary Keyser Soze, Daniel Pineault's renowned Microsoft Access website--DevHut.net--suddenly disappeared last week.
-
Coming Soon: Access Developer Survey: (Jul 21, 2023) MAJOR ANNOUNCEMENT: NoLongerSet will be launching its inaugural Access Developer Survey soon. I need your help!
-
Python in Excel: (Aug 23, 2023) Microsoft just announced a built-in Python worksheet function for Excel. When can we expect similar love for Access?
-
Microsoft Announces the Death of VBScript: (Nov 1, 2023) As seems to be their new modus operandi, Microsoft has quietly rolled a hand grenade into the VBA development world with very little fanfare.
-
Upcoming Presentation: Streamline Your Import/Export Spec Workflow with VBA Classes: (Nov 9, 2023) Join me online on Wednesday, December 6, for my presentation "Streamline Your Import/Export Spec Workflow with VBA Classes" to the Access Europe user group.
-
Dropping `#If VBA7 Then` From API Declares: (Dec 21, 2023) Plus, step-by-step instructions for restoring the `#If VBA7 Then` code construct if you still need to support Office 2007 or earlier.
-
Access Day 2024: (Jan 18, 2024) Come join the Microsoft Access team, several Access MVPs (including me), and other fellow Access developers in Redmond, WA, on March 15, 2024.
-
Major Release of the Microsoft Access Version Control Add-in: (Feb 7, 2024) Version 4.x of Adam Waller's msaccess-vcs-addin has been officially released today, featuring a ribbon toolbar, SQL formatting, and basic SQL Server schema support.
-
Upcoming Presentation: Better Access Charts by Thomas Möller: (Mar 1, 2024) Thomas Möller is back with a much-anticipated follow-up to his earlier presentation on incorporating JavaScript charting frameworks in Microsoft Access.
-
twinBASIC at Access DevCon Vienna 2024: (Mar 11, 2024) Join me at Access DevCon Vienna 2024 for my presentation on creating MZ-Tools-style VBIDE addins using twinBASIC.
-
Final Lineup Announced for Access DevCon Vienna 2024: (Mar 20, 2024) The final lineup is in for Access DevCon Vienna 2024. Check out the speakers and all 12 presentation topics. And don't forget to register!
-
Access NewsCast with Karl Donaubauer: Episode 8: (Apr 4, 2024) Catch up on the latest news from the Access world in episode 8 of Karl's webcast, with guests Juanjo Luna, Alessandro Grimaldi, and fan favorite, Viktoria.
-
Sun, Sand, and Access: The 2024 Developer Conference in Valencia, Spain: (May 15, 2024) The key to a great conference is a great host. Stories from my time at the 2023 MVP Summit with Juanjo Luna show he's the perfect man for the job.
-
Microsoft Announces End of RegEx Support for VBA: (May 23, 2024) We finally have an official timeline for when Microsoft will be dropping support for VBScript--and what impact that will have on VBA developers.
-
ActiveX Disabled by Default in Office LTSC 2024: (Sep 18, 2024) The slow death of Microsoft's desktop application capabilities marches on as another COM technology struggles against a grim fate.
-
UKAUG: App-in-a-Day Conference: (Apr 24, 2026) If you live in the UK (or want a great excuse to visit!), you need to register now for the truly unique "App-in-a-Day" conference on May 19, 2026, in Birmingham, UK.
API
- ["API" tag page]: Show all articles with the tag "API" (including those where "API" is a secondary tag).
Archive
- ["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.
-
Archive Collection: Field Descriptions: (Jul 24, 2023) I'm on a short vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy this curated collection of articles. Today's topic: Field Descriptions.
-
Archive Collection: String Functions: (Jan 4, 2024) 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: String Functions.
-
Archive Collection: Combo Boxes: (Jan 5, 2024) 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: Combo Boxes.
-
Archive Collection: Window Functions: (Jan 6, 2024) 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: Window Functions.
-
Archive Collection: DevCon 2023: (Jan 7, 2024) 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: DevCon 2023.
-
Archive Collection: Design Functions: (Jan 8, 2024) 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: Design Functions.
-
Archive Collection: Debugging: (Jan 9, 2024) 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: Debugging.
-
Archive Collection: Date Functions: (Jan 10, 2024) 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: Date Functions.
-
Archive Collection: Quick Tips: (May 30, 2024) 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: Quick Tips.
-
Archive Collection: Fluent Interfaces: (May 31, 2024) 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: Fluent Interfaces.
-
Archive Collection: SQL Server: (Jun 1, 2024) 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: SQL Server.
-
Archive Collection: Nothing: (Jun 3, 2024) 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: Nothing...
AUG Video Recap
- ["AUG Video Recap" tag page]: Show all articles with the tag "AUG Video Recap" (including those where "AUG Video Recap" is a secondary tag).
-
Modern Access Interfaces: Form Resizing Solutions with Greg Regan: (Nov 25, 2024) Form Resizing Solutions in Microsoft Access: Making Applications Work Across Different Screen Resolutions (an Access User Group talk with Greg Regan)
-
Auto-Closing Access Applications: (Nov 27, 2024) A Scheduled Shutdown Solution for Multi-User Environments (an Access User Group talk with Steve Owen)
-
Migration Planning - Access to SQL Server: (Dec 1, 2024) SQL Server Migration Planning: A Strategic Approach to Transitioning from Access (an Access User Group talk with Kent Gorrell)
-
Intro to the Monaco SQL Editor with Maria Barnes: (Dec 3, 2024) Learn about the new Monaco SQL Editor feature in Microsoft Access (an Access User Group talk with Maria Barnes).
-
Web APIs in Access with George Young: (Dec 8, 2024) Using Web APIs in Microsoft Access: Connecting Access Applications to Online Services (an Access User Group talk with George Young)
-
Microsoft Graph API with Maria Barnes: (Dec 10, 2024) Working with the Microsoft Graph API from VBA: Preparing for the New Outlook (an Access User Group talk with Maria Barnes).
-
Making Access Add-ins with Crystal Long: (Dec 16, 2024) Creating Add-ins for Microsoft Access: Part One of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Building COM Add-ins with Geoffrey L. Griffith: (Dec 18, 2024) Building Office COM Add-ins with Visual Studio Tools: Part Two of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Table Design Fundamentals with Juan Soto: (Dec 20, 2024) Table Design Fundamentals in Microsoft Access: Best Practices for Beginners (an Access User Group talk with Juan Soto)
-
Custom Ribbons Using CommandBars with Adrian Bell: (Dec 29, 2024) How to Create Custom Ribbons Using CommandBars in Microsoft Access (an Access Europe User Group talk with Adrian Bell)
-
Table Field Types with Mark Edwards: (Jan 3, 2025) Understanding Field Types in Microsoft Access: A Comprehensive Guide for Table Design (an Access Beginners User Group talk with Mark Edwards)
-
Using Web APIs in Access with George Young (2024 Edition): (Jan 5, 2025) Can Your Access App Talk to the Web? A Guide to Web APIs (an Access User Group talk with George Young; updated for 2024).
-
Image Cataloguer in Access with Chris Arnold: (Jan 10, 2025) Organizing, tagging, and managing a large collection of images or photos with Microsoft Access (an Access Europe User Group presentation with Chris Arnold).
-
Relationships and Indexes with Crystal Long, Kent Gorrell, & Adrian Bell: (Jan 12, 2025) Hidden Indexes and Relationship Gotchas: Access vs SQL Server Deep Dive (plus a bonus discussion of bit flags) (an Access User Group talk with Crystal, Kent, and Ade).
-
Modern Chart Improvements with Maria Barnes: (Jan 13, 2025) Modernize Your Access Reports with Ten Powerful New Chart Types (an Access User Group talk with Maria Barnes)
-
Converting ADP to ACCDB with Juan Soto: (Jan 15, 2025) Converting Legacy ADP Files to Modern Access ACCDB Format (an Access User Group talk with Juan Soto)
-
Developing COM Add-ins with Phillip Stiefel: (Jan 19, 2025) How to Extend Access's Development Environment with Custom COM Add-ins (an Access User Group talk with Philipp Stiefel)
-
Drag and Drop: Behind the Scenes with Alessandro Grimaldi: (Jan 22, 2025) Building Drag-and-Drop Interfaces in Access with Pure VBA (an Access User Group talk with Alessandro Grimaldi)
-
Cached ODBC Connections with SSO with Ron McCarry: (Jan 24, 2025) Secure Your SQL Server Data Without Compromising the User Experience (an Access User Group talk with Ron McCarry)
-
Control Tip Text with Greg Regan: (Jan 26, 2025) Why Built-in Access Tooltips Fall Short (and How to Fix Them) (an Access User Group talk with Greg Regan)
-
When to Use SQL Server with Juan Soto: (Jan 28, 2025) How to Decide Between Access and SQL Server for Your Database Applications (an Access User Group talk with Juan Soto)
-
Runtime Ribbon Changes with Adrian Bell (NeoPa): (Jan 31, 2025) How to Add Custom Buttons to the Access Ribbon Without XML (an Access User Group talk with Adrian Bell)
-
Using Treeviews with Access with Pete Poppe (Maj P): (Feb 2, 2025) How to Handle Large Hierarchical Datasets in Access Using TreeViews (an Access User Group talk with Pete Poppe)
-
DBeaver: Database Management Tool with Kevin Bell: (Feb 5, 2025) How to Visualize and Document Complex Database Relationships Beyond Access (an Access User Group talk with Kevin Bell)
-
All About Table Relationships with Steve Owen: (Feb 9, 2025) Are You Using Access Table Relationships Correctly? (an Access User Group talk with Steve Owen)
-
Data Ingesting Pipeline with Roy Kim: (Feb 12, 2025) From IoT Hub to SQL: Real-Time Factory Data Processing in Azure (an Access User Group talk with Roy Kim)
-
Access Frameworks with John Colby: (Feb 17, 2025) Why Your Access Apps Need a Framework (and How to Build One) (an Access User Group talk with John Colby)
-
Enhanced MsgBox and Forms with Olaf Nöhring and André Minhorst: (Feb 19, 2025) Enhanced Message Box and Professional Calendar Tools for Access Applications (an Access User Group talk with Olaf Nöhring and André Minhorst)
-
Data Analysis Tips and Techniques with Luke Chung: (Feb 26, 2025) Random Sampling, Cross Tab Queries, and Other Power Tools for Access Analysis (an Access User Group talk with Luke Chung)
-
Gantt Charts: Part 1 with Aleksander Wojtasz: (Mar 2, 2025) Build Interactive Gantt Charts in Pure Access without Third-Party Controls (an Access User Group talk with Aleksander Wojtasz)
-
Gantt Charts: Part 2 with Aleksander Wojtasz: (Mar 3, 2025) Building Dynamic Gantt Charts with GDI32: Class Architecture Deep Dive (an Access User Group talk with Aleksander Wojtasz)
-
Unraveling Constraints: A Case Study in Complex Scheduling with Steve Schapel and Jack Drawbridge: (Mar 7, 2025) How to Handle Complex Scheduling When VBA Isn't Enough (an Access User Group talk with Steve Schapel)
-
Troubleshooting Access Applications with Ben Sacherich: (Mar 10, 2025) Systematic Approaches to Troubleshooting Access Applications: A Developer's Guide (an Access User Group talk with Ben Sacherich)
-
IMEX DataTask Specifications and Extended File Properties with Colin Riddington: (Mar 17, 2025) Managing Modern and Legacy Import/Export Specifications in Access (an Access User Group talk with Colin Riddington)
-
Using VBA to Create a Class Based on a Table with Adolph Dupré: (May 9, 2025) Can Your Code Write Better Class Modules Than You? (an Access User Group talk with Adolph Dupré)
-
Chat with Other Access Developers on Discord with Jim Dettman and Doug Yudovich: (May 20, 2025) Discord for Access Developers: A New Way to Connect and Collaborate (an Access User Group talk with Jim Dettman and Doug Yudovich)
-
Selling Access with SQL Server Jobs with Juan Soto: (May 27, 2025) Building a Seven-Figure Microsoft Access Consulting Practice from Scratch (an Access User Group talk with Juan Soto)
-
Professional Troubleshooting with Tom van Stiphout and Kim Young: (Jun 11, 2025) Professional Troubleshooting Techniques for Microsoft Access Applications (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Update! Update! The Company is in a State! (with Karl Donaubauer): (Jun 13, 2025) How to Protect Your Access Apps from Breaking Microsoft Updates (an Access User Group talk with Karl Donaubauer)
-
Icons for Access using Metro with Greg Regan: (Jun 18, 2025) Metro Studio Integration: 7000+ Free Icons for Modern Access Interfaces (an Access User Group talk with Greg Regan)
-
Leveraging SQL Server SPROCs with George Hepworth: (Jun 20, 2025) Should Your Business Logic Live in the Database or Interface? (an Access User Group talk with George Hepworth)
-
Using Class Modules in the Real World with Anders Ebro: (Jun 27, 2025) Event-Driven Architecture and Custom Classes: Advanced Access Development Patterns (an Access User Group talk with Anders Ebro)
-
GET and POST with JSON with Neil Sargent & Leo theDBguy: (Jul 2, 2025) Real-World JSON API Integration: GET and POST Operations in Microsoft Access (an Access User Group talk with Neil Sargent)
-
Prepping Access for Deployment with John W Colby: (Jul 18, 2025) How to Streamline Access Database Deployment Without Menu Hunting (an Access User Group talk with John W Colby)
-
Orchestrating Office with Domenico Ruggiero: (Jul 25, 2025) Supercharge the Entire Office Suite: From Excel Charts to PowerPoint Magic and Massive Word Docs (an Access User Group talk with Domenico Ruggiero)
-
AI Assistants with Alexander Denz: (Aug 8, 2025) What If Access Could Query Your Database Using Natural Language? (an Access User Group talk with Alexander Denz)
-
Outside-the-Box Access UI Design with Pete Poppe (MajP): (Aug 15, 2025) Build Excel-like Grids, Outlook-like Scheduling, Interactive Maps, and Visual Tree Navigation (an Access User Group talk with Pete Poppe)
-
Access Add-in Helper with Geoffrey L. Griffith: (Aug 22, 2025) Why Build Access Add-ins Manually When You Can Automate Everything? (an Access User Group talk with Geoffrey L. Griffith)
-
The State of Microsoft Access in 2025 with Maria Barnes: (Oct 26, 2025) Is Microsoft Access Dead? This 2025 Roadmap Update Says Absolutely Not (an Access Lunchtime talk with Maria Barnes)
-
Vibe Coding in Access with Juan Soto: (Oct 29, 2025) Can AI Really Build Your Access Database While You Just Watch and Direct? (an Access User Group talk with Juan Soto)
-
Eliminating Magic Numbers with Tom van Stiphout and Kim Young: (Nov 7, 2025) How to Successfully Take Over Someone Else's Access Project (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Access Version Control Add-in Deep Dive with Adam Waller: (Jan 12, 2026) Behind the Scenes of the Add-in That Makes Git Workflows Possible for Access Databases (an Access User Group Talk with Adam Waller)
AutoHotKey
- ["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.
Backwards Compatibility
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
-
Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
-
How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
-
Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
-
Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Combo Boxapalooza!: (Jun 4, 2021) Join me at 9 AM EDT on Friday, June 18th, where I'll help you unlock the true potential of my favorite Access control: the combo box.
- Are You an Access Developer in Northeast Pennsylvania?: (Oct 25, 2021) Calling all (current or aspiring) Access developers in Northeast PA: we have an immediate job opening at Grandjean & Braverman, Inc.
- Microsoft Access MVP: (Nov 1, 2021) Say hello to the newest Microsoft MVP Awardee for Office Apps & Services (MS Access).
- Access Roadmap Update: (Nov 15, 2021) Microsoft has recently updated the Access roadmap for 2021 and beyond. Check out what's on the horizon for the next 14 months.
- Access Dataverse Connector Presentations: (Dec 1, 2021) A list of past and upcoming presentations on the Access Dataverse connector with Access Program Manager Michael Aldridge.
- Access NewsCast with Karl Donaubauer: Episode 1: (Dec 15, 2021) The very first edition of Access News with Karl Donaubauer was released today. Catch up on the latest news and updates in this 30-minute video.
- Upcoming Presentation: Troubleshooting Query Performance: (Feb 9, 2022) Join me online on Thursday, March 17, for my presentation, "Troubleshooting Query Performance," to the Denver Area Access User Group.
- Office to Disable All VBA Code in Files from the Internet: (Feb 12, 2022) Beginning in April 2022, users will no longer have the option to manually enable VBA code in Office files downloaded from the internet.
- Access DevCon Vienna 2022: (Mar 9, 2022) Mark your calendars and register for Access DevCon Vienna! The event will be held virtually via MS Teams on April 28 and 29, 2022, from 10 AM - 4 PM EDT.
- Access NewsCast with Karl Donaubauer: Episode 2: (Mar 21, 2022) Catch up on the latest news and updates from the Access world in episode 2 of Karl's webcast, featuring Thomas Pfoch's Access map tool.
- IE11 Retirement FAQ for Access Apps: (Apr 2, 2022) Internet Explorer 11 will reach end-of-life before we have an Edge-based browser control. Read on to learn how this will affect Access developers.
- twinBASIC DevCon Vienna: Volume 2: (Apr 4, 2022) It's back! This year's Access DevCon Vienna will feature twinBASIC for the second year in a row. This time around the focus is on practical uses for Access developers.
- Building Ribbon Interfaces in Code: (May 26, 2022) Join me online on Wednesday, July 6, for my presentation "Building Ribbon Interfaces in Code" to the Access Europe user group.
- What Happened to the Access Roadmap: (May 31, 2022) Don't be (too) alarmed about the lack of feature development shown on the Access public roadmap. Access isn't dead...you just need to know where to look.
- Access at Microsoft Build 2022: (Jun 14, 2022) You'll never guess what the Access team talked about at the recent annual Microsoft Build conference. I'll give you a hint: it rhymes with "beta curse."
- Office Apps Won't Run on Windows Server After October 2025: (Jun 30, 2022) Earlier this month, Microsoft quietly announced the end of support for running (most) Office apps on Windows Server at the end of 2025.
- Microsoft Backtracks (Temporarily?) on Policy to Block All Macros with Mark of the Web: (Jul 7, 2022) Microsoft official announces in blog comments (!) that they are rolling back their recently implemented VBA-blocking policy.
- vbWatchdog v4 Released: (Jul 29, 2022) Version 4 of vbWatchdog just got released. If you don't already own a license for it, you should. And if you do, you should upgrade before August 31, 2022.
- Timeline for VBA Macros Blocked by Default in Microsoft Office: (Sep 26, 2022) Enterprise customers are next in line to have macros blocked by default in Office files from the web. The policy addresses a real problem, but does it actually help?
- Access NewsCast with Karl Donaubauer: Episode 4: (Oct 7, 2022) Catch up on the latest news and updates from the Access world in episode 4 of Karl's webcast, with guests Colin Riddington, Wayne Phillips, and, of course, Viktoria.
- Prepare for the Upcoming Death of IE11: (Oct 28, 2022) The grim reaper takes IE11 for good on February 14, 2023. Prepare for the inevitable now to avoid unnecessary Valentine's Day pain.
- Access DevCon Vienna 2023: April 27-28: (Feb 27, 2023) The annual Access DevCon Vienna conference will be held April 27-28, 2023. Check out this year's lineup and get registered today.
- Richard Rost: Newest Access MVP: (Feb 28, 2023) The Access video king is back on the MVP rolls. Richard Rost earned the MVP award for the third time and his first since 2015.
- New Edge Browser Control Now Available in Preview and Beta Versions of Microsoft Access: (Mar 15, 2023) It's finally (almost) here. The new Edge Browser control is finally available for testing in Insider versions of Microsoft 365.
- Final Lineup Announced for Access DevCon Vienna 2023: (Mar 21, 2023) The final lineup is in for Access DevCon Vienna 2023. Check out all 12 presentation topics and speakers. And don't forget to register!
- Edge-Based Browser Control Officially Released: (May 5, 2023) It's officially here. The new Edge-based web browser control for Microsoft Access is now Generally Available for Microsoft 365 versions 2304 and later.
- UPDATE: Office Apps WILL Run on Windows Server After October 2025: (May 17, 2023) Earlier this year, Microsoft quietly reversed its decision to end support for running Office apps on Windows Server at the end of 2025.
- Upcoming Presentation: Form Templates: (Jun 9, 2023) Join me online on Thursday, June 15, for my presentation, "Form Templates in Microsoft Access," to the Denver Area Access User Group.
- DevHut.Net Goes Dark: (Jun 26, 2023) Much like the legendary Keyser Soze, Daniel Pineault's renowned Microsoft Access website--DevHut.net--suddenly disappeared last week.
- Coming Soon: Access Developer Survey: (Jul 21, 2023) MAJOR ANNOUNCEMENT: NoLongerSet will be launching its inaugural Access Developer Survey soon. I need your help!
- Python in Excel: (Aug 23, 2023) Microsoft just announced a built-in Python worksheet function for Excel. When can we expect similar love for Access?
- Microsoft Announces the Death of VBScript: (Nov 1, 2023) As seems to be their new modus operandi, Microsoft has quietly rolled a hand grenade into the VBA development world with very little fanfare.
- Upcoming Presentation: Streamline Your Import/Export Spec Workflow with VBA Classes: (Nov 9, 2023) Join me online on Wednesday, December 6, for my presentation "Streamline Your Import/Export Spec Workflow with VBA Classes" to the Access Europe user group.
- Dropping `#If VBA7 Then` From API Declares: (Dec 21, 2023) Plus, step-by-step instructions for restoring the `#If VBA7 Then` code construct if you still need to support Office 2007 or earlier.
- Access Day 2024: (Jan 18, 2024) Come join the Microsoft Access team, several Access MVPs (including me), and other fellow Access developers in Redmond, WA, on March 15, 2024.
- Major Release of the Microsoft Access Version Control Add-in: (Feb 7, 2024) Version 4.x of Adam Waller's msaccess-vcs-addin has been officially released today, featuring a ribbon toolbar, SQL formatting, and basic SQL Server schema support.
- Upcoming Presentation: Better Access Charts by Thomas Möller: (Mar 1, 2024) Thomas Möller is back with a much-anticipated follow-up to his earlier presentation on incorporating JavaScript charting frameworks in Microsoft Access.
- twinBASIC at Access DevCon Vienna 2024: (Mar 11, 2024) Join me at Access DevCon Vienna 2024 for my presentation on creating MZ-Tools-style VBIDE addins using twinBASIC.
- Final Lineup Announced for Access DevCon Vienna 2024: (Mar 20, 2024) The final lineup is in for Access DevCon Vienna 2024. Check out the speakers and all 12 presentation topics. And don't forget to register!
- Access NewsCast with Karl Donaubauer: Episode 8: (Apr 4, 2024) Catch up on the latest news from the Access world in episode 8 of Karl's webcast, with guests Juanjo Luna, Alessandro Grimaldi, and fan favorite, Viktoria.
- Sun, Sand, and Access: The 2024 Developer Conference in Valencia, Spain: (May 15, 2024) The key to a great conference is a great host. Stories from my time at the 2023 MVP Summit with Juanjo Luna show he's the perfect man for the job.
- Microsoft Announces End of RegEx Support for VBA: (May 23, 2024) We finally have an official timeline for when Microsoft will be dropping support for VBScript--and what impact that will have on VBA developers.
- ActiveX Disabled by Default in Office LTSC 2024: (Sep 18, 2024) The slow death of Microsoft's desktop application capabilities marches on as another COM technology struggles against a grim fate.
- UKAUG: App-in-a-Day Conference: (Apr 24, 2026) If you live in the UK (or want a great excuse to visit!), you need to register now for the truly unique "App-in-a-Day" conference on May 19, 2026, in Birmingham, UK.
- ["API" tag page]: Show all articles with the tag "API" (including those where "API" is a secondary tag).
Archive
- ["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.
-
Archive Collection: Field Descriptions: (Jul 24, 2023) I'm on a short vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy this curated collection of articles. Today's topic: Field Descriptions.
-
Archive Collection: String Functions: (Jan 4, 2024) 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: String Functions.
-
Archive Collection: Combo Boxes: (Jan 5, 2024) 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: Combo Boxes.
-
Archive Collection: Window Functions: (Jan 6, 2024) 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: Window Functions.
-
Archive Collection: DevCon 2023: (Jan 7, 2024) 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: DevCon 2023.
-
Archive Collection: Design Functions: (Jan 8, 2024) 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: Design Functions.
-
Archive Collection: Debugging: (Jan 9, 2024) 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: Debugging.
-
Archive Collection: Date Functions: (Jan 10, 2024) 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: Date Functions.
-
Archive Collection: Quick Tips: (May 30, 2024) 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: Quick Tips.
-
Archive Collection: Fluent Interfaces: (May 31, 2024) 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: Fluent Interfaces.
-
Archive Collection: SQL Server: (Jun 1, 2024) 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: SQL Server.
-
Archive Collection: Nothing: (Jun 3, 2024) 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: Nothing...
AUG Video Recap
- ["AUG Video Recap" tag page]: Show all articles with the tag "AUG Video Recap" (including those where "AUG Video Recap" is a secondary tag).
-
Modern Access Interfaces: Form Resizing Solutions with Greg Regan: (Nov 25, 2024) Form Resizing Solutions in Microsoft Access: Making Applications Work Across Different Screen Resolutions (an Access User Group talk with Greg Regan)
-
Auto-Closing Access Applications: (Nov 27, 2024) A Scheduled Shutdown Solution for Multi-User Environments (an Access User Group talk with Steve Owen)
-
Migration Planning - Access to SQL Server: (Dec 1, 2024) SQL Server Migration Planning: A Strategic Approach to Transitioning from Access (an Access User Group talk with Kent Gorrell)
-
Intro to the Monaco SQL Editor with Maria Barnes: (Dec 3, 2024) Learn about the new Monaco SQL Editor feature in Microsoft Access (an Access User Group talk with Maria Barnes).
-
Web APIs in Access with George Young: (Dec 8, 2024) Using Web APIs in Microsoft Access: Connecting Access Applications to Online Services (an Access User Group talk with George Young)
-
Microsoft Graph API with Maria Barnes: (Dec 10, 2024) Working with the Microsoft Graph API from VBA: Preparing for the New Outlook (an Access User Group talk with Maria Barnes).
-
Making Access Add-ins with Crystal Long: (Dec 16, 2024) Creating Add-ins for Microsoft Access: Part One of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Building COM Add-ins with Geoffrey L. Griffith: (Dec 18, 2024) Building Office COM Add-ins with Visual Studio Tools: Part Two of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
-
Table Design Fundamentals with Juan Soto: (Dec 20, 2024) Table Design Fundamentals in Microsoft Access: Best Practices for Beginners (an Access User Group talk with Juan Soto)
-
Custom Ribbons Using CommandBars with Adrian Bell: (Dec 29, 2024) How to Create Custom Ribbons Using CommandBars in Microsoft Access (an Access Europe User Group talk with Adrian Bell)
-
Table Field Types with Mark Edwards: (Jan 3, 2025) Understanding Field Types in Microsoft Access: A Comprehensive Guide for Table Design (an Access Beginners User Group talk with Mark Edwards)
-
Using Web APIs in Access with George Young (2024 Edition): (Jan 5, 2025) Can Your Access App Talk to the Web? A Guide to Web APIs (an Access User Group talk with George Young; updated for 2024).
-
Image Cataloguer in Access with Chris Arnold: (Jan 10, 2025) Organizing, tagging, and managing a large collection of images or photos with Microsoft Access (an Access Europe User Group presentation with Chris Arnold).
-
Relationships and Indexes with Crystal Long, Kent Gorrell, & Adrian Bell: (Jan 12, 2025) Hidden Indexes and Relationship Gotchas: Access vs SQL Server Deep Dive (plus a bonus discussion of bit flags) (an Access User Group talk with Crystal, Kent, and Ade).
-
Modern Chart Improvements with Maria Barnes: (Jan 13, 2025) Modernize Your Access Reports with Ten Powerful New Chart Types (an Access User Group talk with Maria Barnes)
-
Converting ADP to ACCDB with Juan Soto: (Jan 15, 2025) Converting Legacy ADP Files to Modern Access ACCDB Format (an Access User Group talk with Juan Soto)
-
Developing COM Add-ins with Phillip Stiefel: (Jan 19, 2025) How to Extend Access's Development Environment with Custom COM Add-ins (an Access User Group talk with Philipp Stiefel)
-
Drag and Drop: Behind the Scenes with Alessandro Grimaldi: (Jan 22, 2025) Building Drag-and-Drop Interfaces in Access with Pure VBA (an Access User Group talk with Alessandro Grimaldi)
-
Cached ODBC Connections with SSO with Ron McCarry: (Jan 24, 2025) Secure Your SQL Server Data Without Compromising the User Experience (an Access User Group talk with Ron McCarry)
-
Control Tip Text with Greg Regan: (Jan 26, 2025) Why Built-in Access Tooltips Fall Short (and How to Fix Them) (an Access User Group talk with Greg Regan)
-
When to Use SQL Server with Juan Soto: (Jan 28, 2025) How to Decide Between Access and SQL Server for Your Database Applications (an Access User Group talk with Juan Soto)
-
Runtime Ribbon Changes with Adrian Bell (NeoPa): (Jan 31, 2025) How to Add Custom Buttons to the Access Ribbon Without XML (an Access User Group talk with Adrian Bell)
-
Using Treeviews with Access with Pete Poppe (Maj P): (Feb 2, 2025) How to Handle Large Hierarchical Datasets in Access Using TreeViews (an Access User Group talk with Pete Poppe)
-
DBeaver: Database Management Tool with Kevin Bell: (Feb 5, 2025) How to Visualize and Document Complex Database Relationships Beyond Access (an Access User Group talk with Kevin Bell)
-
All About Table Relationships with Steve Owen: (Feb 9, 2025) Are You Using Access Table Relationships Correctly? (an Access User Group talk with Steve Owen)
-
Data Ingesting Pipeline with Roy Kim: (Feb 12, 2025) From IoT Hub to SQL: Real-Time Factory Data Processing in Azure (an Access User Group talk with Roy Kim)
-
Access Frameworks with John Colby: (Feb 17, 2025) Why Your Access Apps Need a Framework (and How to Build One) (an Access User Group talk with John Colby)
-
Enhanced MsgBox and Forms with Olaf Nöhring and André Minhorst: (Feb 19, 2025) Enhanced Message Box and Professional Calendar Tools for Access Applications (an Access User Group talk with Olaf Nöhring and André Minhorst)
-
Data Analysis Tips and Techniques with Luke Chung: (Feb 26, 2025) Random Sampling, Cross Tab Queries, and Other Power Tools for Access Analysis (an Access User Group talk with Luke Chung)
-
Gantt Charts: Part 1 with Aleksander Wojtasz: (Mar 2, 2025) Build Interactive Gantt Charts in Pure Access without Third-Party Controls (an Access User Group talk with Aleksander Wojtasz)
-
Gantt Charts: Part 2 with Aleksander Wojtasz: (Mar 3, 2025) Building Dynamic Gantt Charts with GDI32: Class Architecture Deep Dive (an Access User Group talk with Aleksander Wojtasz)
-
Unraveling Constraints: A Case Study in Complex Scheduling with Steve Schapel and Jack Drawbridge: (Mar 7, 2025) How to Handle Complex Scheduling When VBA Isn't Enough (an Access User Group talk with Steve Schapel)
-
Troubleshooting Access Applications with Ben Sacherich: (Mar 10, 2025) Systematic Approaches to Troubleshooting Access Applications: A Developer's Guide (an Access User Group talk with Ben Sacherich)
-
IMEX DataTask Specifications and Extended File Properties with Colin Riddington: (Mar 17, 2025) Managing Modern and Legacy Import/Export Specifications in Access (an Access User Group talk with Colin Riddington)
-
Using VBA to Create a Class Based on a Table with Adolph Dupré: (May 9, 2025) Can Your Code Write Better Class Modules Than You? (an Access User Group talk with Adolph Dupré)
-
Chat with Other Access Developers on Discord with Jim Dettman and Doug Yudovich: (May 20, 2025) Discord for Access Developers: A New Way to Connect and Collaborate (an Access User Group talk with Jim Dettman and Doug Yudovich)
-
Selling Access with SQL Server Jobs with Juan Soto: (May 27, 2025) Building a Seven-Figure Microsoft Access Consulting Practice from Scratch (an Access User Group talk with Juan Soto)
-
Professional Troubleshooting with Tom van Stiphout and Kim Young: (Jun 11, 2025) Professional Troubleshooting Techniques for Microsoft Access Applications (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Update! Update! The Company is in a State! (with Karl Donaubauer): (Jun 13, 2025) How to Protect Your Access Apps from Breaking Microsoft Updates (an Access User Group talk with Karl Donaubauer)
-
Icons for Access using Metro with Greg Regan: (Jun 18, 2025) Metro Studio Integration: 7000+ Free Icons for Modern Access Interfaces (an Access User Group talk with Greg Regan)
-
Leveraging SQL Server SPROCs with George Hepworth: (Jun 20, 2025) Should Your Business Logic Live in the Database or Interface? (an Access User Group talk with George Hepworth)
-
Using Class Modules in the Real World with Anders Ebro: (Jun 27, 2025) Event-Driven Architecture and Custom Classes: Advanced Access Development Patterns (an Access User Group talk with Anders Ebro)
-
GET and POST with JSON with Neil Sargent & Leo theDBguy: (Jul 2, 2025) Real-World JSON API Integration: GET and POST Operations in Microsoft Access (an Access User Group talk with Neil Sargent)
-
Prepping Access for Deployment with John W Colby: (Jul 18, 2025) How to Streamline Access Database Deployment Without Menu Hunting (an Access User Group talk with John W Colby)
-
Orchestrating Office with Domenico Ruggiero: (Jul 25, 2025) Supercharge the Entire Office Suite: From Excel Charts to PowerPoint Magic and Massive Word Docs (an Access User Group talk with Domenico Ruggiero)
-
AI Assistants with Alexander Denz: (Aug 8, 2025) What If Access Could Query Your Database Using Natural Language? (an Access User Group talk with Alexander Denz)
-
Outside-the-Box Access UI Design with Pete Poppe (MajP): (Aug 15, 2025) Build Excel-like Grids, Outlook-like Scheduling, Interactive Maps, and Visual Tree Navigation (an Access User Group talk with Pete Poppe)
-
Access Add-in Helper with Geoffrey L. Griffith: (Aug 22, 2025) Why Build Access Add-ins Manually When You Can Automate Everything? (an Access User Group talk with Geoffrey L. Griffith)
-
The State of Microsoft Access in 2025 with Maria Barnes: (Oct 26, 2025) Is Microsoft Access Dead? This 2025 Roadmap Update Says Absolutely Not (an Access Lunchtime talk with Maria Barnes)
-
Vibe Coding in Access with Juan Soto: (Oct 29, 2025) Can AI Really Build Your Access Database While You Just Watch and Direct? (an Access User Group talk with Juan Soto)
-
Eliminating Magic Numbers with Tom van Stiphout and Kim Young: (Nov 7, 2025) How to Successfully Take Over Someone Else's Access Project (an Access User Group talk with Tom van Stiphout and Kim Young)
-
Access Version Control Add-in Deep Dive with Adam Waller: (Jan 12, 2026) Behind the Scenes of the Add-in That Makes Git Workflows Possible for Access Databases (an Access User Group Talk with Adam Waller)
AutoHotKey
- ["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.
Backwards Compatibility
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
-
Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
-
How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
-
Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
-
Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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.
- Archive Collection: Field Descriptions: (Jul 24, 2023) I'm on a short vacation (shh...don't tell anyone)! I'll be back soon, but until then enjoy this curated collection of articles. Today's topic: Field Descriptions.
- Archive Collection: String Functions: (Jan 4, 2024) 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: String Functions.
- Archive Collection: Combo Boxes: (Jan 5, 2024) 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: Combo Boxes.
- Archive Collection: Window Functions: (Jan 6, 2024) 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: Window Functions.
- Archive Collection: DevCon 2023: (Jan 7, 2024) 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: DevCon 2023.
- Archive Collection: Design Functions: (Jan 8, 2024) 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: Design Functions.
- Archive Collection: Debugging: (Jan 9, 2024) 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: Debugging.
- Archive Collection: Date Functions: (Jan 10, 2024) 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: Date Functions.
- Archive Collection: Quick Tips: (May 30, 2024) 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: Quick Tips.
- Archive Collection: Fluent Interfaces: (May 31, 2024) 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: Fluent Interfaces.
- Archive Collection: SQL Server: (Jun 1, 2024) 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: SQL Server.
- Archive Collection: Nothing: (Jun 3, 2024) 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: Nothing...
- ["AUG Video Recap" tag page]: Show all articles with the tag "AUG Video Recap" (including those where "AUG Video Recap" is a secondary tag).
- Modern Access Interfaces: Form Resizing Solutions with Greg Regan: (Nov 25, 2024) Form Resizing Solutions in Microsoft Access: Making Applications Work Across Different Screen Resolutions (an Access User Group talk with Greg Regan)
- Auto-Closing Access Applications: (Nov 27, 2024) A Scheduled Shutdown Solution for Multi-User Environments (an Access User Group talk with Steve Owen)
- Migration Planning - Access to SQL Server: (Dec 1, 2024) SQL Server Migration Planning: A Strategic Approach to Transitioning from Access (an Access User Group talk with Kent Gorrell)
- Intro to the Monaco SQL Editor with Maria Barnes: (Dec 3, 2024) Learn about the new Monaco SQL Editor feature in Microsoft Access (an Access User Group talk with Maria Barnes).
- Web APIs in Access with George Young: (Dec 8, 2024) Using Web APIs in Microsoft Access: Connecting Access Applications to Online Services (an Access User Group talk with George Young)
- Microsoft Graph API with Maria Barnes: (Dec 10, 2024) Working with the Microsoft Graph API from VBA: Preparing for the New Outlook (an Access User Group talk with Maria Barnes).
- Making Access Add-ins with Crystal Long: (Dec 16, 2024) Creating Add-ins for Microsoft Access: Part One of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
- Building COM Add-ins with Geoffrey L. Griffith: (Dec 18, 2024) Building Office COM Add-ins with Visual Studio Tools: Part Two of a Two-Part Deep Dive (an Access Pacific user group talk with Crystal Long and Geoffrey L. Griffith)
- Table Design Fundamentals with Juan Soto: (Dec 20, 2024) Table Design Fundamentals in Microsoft Access: Best Practices for Beginners (an Access User Group talk with Juan Soto)
- Custom Ribbons Using CommandBars with Adrian Bell: (Dec 29, 2024) How to Create Custom Ribbons Using CommandBars in Microsoft Access (an Access Europe User Group talk with Adrian Bell)
- Table Field Types with Mark Edwards: (Jan 3, 2025) Understanding Field Types in Microsoft Access: A Comprehensive Guide for Table Design (an Access Beginners User Group talk with Mark Edwards)
- Using Web APIs in Access with George Young (2024 Edition): (Jan 5, 2025) Can Your Access App Talk to the Web? A Guide to Web APIs (an Access User Group talk with George Young; updated for 2024).
- Image Cataloguer in Access with Chris Arnold: (Jan 10, 2025) Organizing, tagging, and managing a large collection of images or photos with Microsoft Access (an Access Europe User Group presentation with Chris Arnold).
- Relationships and Indexes with Crystal Long, Kent Gorrell, & Adrian Bell: (Jan 12, 2025) Hidden Indexes and Relationship Gotchas: Access vs SQL Server Deep Dive (plus a bonus discussion of bit flags) (an Access User Group talk with Crystal, Kent, and Ade).
- Modern Chart Improvements with Maria Barnes: (Jan 13, 2025) Modernize Your Access Reports with Ten Powerful New Chart Types (an Access User Group talk with Maria Barnes)
- Converting ADP to ACCDB with Juan Soto: (Jan 15, 2025) Converting Legacy ADP Files to Modern Access ACCDB Format (an Access User Group talk with Juan Soto)
- Developing COM Add-ins with Phillip Stiefel: (Jan 19, 2025) How to Extend Access's Development Environment with Custom COM Add-ins (an Access User Group talk with Philipp Stiefel)
- Drag and Drop: Behind the Scenes with Alessandro Grimaldi: (Jan 22, 2025) Building Drag-and-Drop Interfaces in Access with Pure VBA (an Access User Group talk with Alessandro Grimaldi)
- Cached ODBC Connections with SSO with Ron McCarry: (Jan 24, 2025) Secure Your SQL Server Data Without Compromising the User Experience (an Access User Group talk with Ron McCarry)
- Control Tip Text with Greg Regan: (Jan 26, 2025) Why Built-in Access Tooltips Fall Short (and How to Fix Them) (an Access User Group talk with Greg Regan)
- When to Use SQL Server with Juan Soto: (Jan 28, 2025) How to Decide Between Access and SQL Server for Your Database Applications (an Access User Group talk with Juan Soto)
- Runtime Ribbon Changes with Adrian Bell (NeoPa): (Jan 31, 2025) How to Add Custom Buttons to the Access Ribbon Without XML (an Access User Group talk with Adrian Bell)
- Using Treeviews with Access with Pete Poppe (Maj P): (Feb 2, 2025) How to Handle Large Hierarchical Datasets in Access Using TreeViews (an Access User Group talk with Pete Poppe)
- DBeaver: Database Management Tool with Kevin Bell: (Feb 5, 2025) How to Visualize and Document Complex Database Relationships Beyond Access (an Access User Group talk with Kevin Bell)
- All About Table Relationships with Steve Owen: (Feb 9, 2025) Are You Using Access Table Relationships Correctly? (an Access User Group talk with Steve Owen)
- Data Ingesting Pipeline with Roy Kim: (Feb 12, 2025) From IoT Hub to SQL: Real-Time Factory Data Processing in Azure (an Access User Group talk with Roy Kim)
- Access Frameworks with John Colby: (Feb 17, 2025) Why Your Access Apps Need a Framework (and How to Build One) (an Access User Group talk with John Colby)
- Enhanced MsgBox and Forms with Olaf Nöhring and André Minhorst: (Feb 19, 2025) Enhanced Message Box and Professional Calendar Tools for Access Applications (an Access User Group talk with Olaf Nöhring and André Minhorst)
- Data Analysis Tips and Techniques with Luke Chung: (Feb 26, 2025) Random Sampling, Cross Tab Queries, and Other Power Tools for Access Analysis (an Access User Group talk with Luke Chung)
- Gantt Charts: Part 1 with Aleksander Wojtasz: (Mar 2, 2025) Build Interactive Gantt Charts in Pure Access without Third-Party Controls (an Access User Group talk with Aleksander Wojtasz)
- Gantt Charts: Part 2 with Aleksander Wojtasz: (Mar 3, 2025) Building Dynamic Gantt Charts with GDI32: Class Architecture Deep Dive (an Access User Group talk with Aleksander Wojtasz)
- Unraveling Constraints: A Case Study in Complex Scheduling with Steve Schapel and Jack Drawbridge: (Mar 7, 2025) How to Handle Complex Scheduling When VBA Isn't Enough (an Access User Group talk with Steve Schapel)
- Troubleshooting Access Applications with Ben Sacherich: (Mar 10, 2025) Systematic Approaches to Troubleshooting Access Applications: A Developer's Guide (an Access User Group talk with Ben Sacherich)
- IMEX DataTask Specifications and Extended File Properties with Colin Riddington: (Mar 17, 2025) Managing Modern and Legacy Import/Export Specifications in Access (an Access User Group talk with Colin Riddington)
- Using VBA to Create a Class Based on a Table with Adolph Dupré: (May 9, 2025) Can Your Code Write Better Class Modules Than You? (an Access User Group talk with Adolph Dupré)
- Chat with Other Access Developers on Discord with Jim Dettman and Doug Yudovich: (May 20, 2025) Discord for Access Developers: A New Way to Connect and Collaborate (an Access User Group talk with Jim Dettman and Doug Yudovich)
- Selling Access with SQL Server Jobs with Juan Soto: (May 27, 2025) Building a Seven-Figure Microsoft Access Consulting Practice from Scratch (an Access User Group talk with Juan Soto)
- Professional Troubleshooting with Tom van Stiphout and Kim Young: (Jun 11, 2025) Professional Troubleshooting Techniques for Microsoft Access Applications (an Access User Group talk with Tom van Stiphout and Kim Young)
- Update! Update! The Company is in a State! (with Karl Donaubauer): (Jun 13, 2025) How to Protect Your Access Apps from Breaking Microsoft Updates (an Access User Group talk with Karl Donaubauer)
- Icons for Access using Metro with Greg Regan: (Jun 18, 2025) Metro Studio Integration: 7000+ Free Icons for Modern Access Interfaces (an Access User Group talk with Greg Regan)
- Leveraging SQL Server SPROCs with George Hepworth: (Jun 20, 2025) Should Your Business Logic Live in the Database or Interface? (an Access User Group talk with George Hepworth)
- Using Class Modules in the Real World with Anders Ebro: (Jun 27, 2025) Event-Driven Architecture and Custom Classes: Advanced Access Development Patterns (an Access User Group talk with Anders Ebro)
- GET and POST with JSON with Neil Sargent & Leo theDBguy: (Jul 2, 2025) Real-World JSON API Integration: GET and POST Operations in Microsoft Access (an Access User Group talk with Neil Sargent)
- Prepping Access for Deployment with John W Colby: (Jul 18, 2025) How to Streamline Access Database Deployment Without Menu Hunting (an Access User Group talk with John W Colby)
- Orchestrating Office with Domenico Ruggiero: (Jul 25, 2025) Supercharge the Entire Office Suite: From Excel Charts to PowerPoint Magic and Massive Word Docs (an Access User Group talk with Domenico Ruggiero)
- AI Assistants with Alexander Denz: (Aug 8, 2025) What If Access Could Query Your Database Using Natural Language? (an Access User Group talk with Alexander Denz)
- Outside-the-Box Access UI Design with Pete Poppe (MajP): (Aug 15, 2025) Build Excel-like Grids, Outlook-like Scheduling, Interactive Maps, and Visual Tree Navigation (an Access User Group talk with Pete Poppe)
- Access Add-in Helper with Geoffrey L. Griffith: (Aug 22, 2025) Why Build Access Add-ins Manually When You Can Automate Everything? (an Access User Group talk with Geoffrey L. Griffith)
- The State of Microsoft Access in 2025 with Maria Barnes: (Oct 26, 2025) Is Microsoft Access Dead? This 2025 Roadmap Update Says Absolutely Not (an Access Lunchtime talk with Maria Barnes)
- Vibe Coding in Access with Juan Soto: (Oct 29, 2025) Can AI Really Build Your Access Database While You Just Watch and Direct? (an Access User Group talk with Juan Soto)
- Eliminating Magic Numbers with Tom van Stiphout and Kim Young: (Nov 7, 2025) How to Successfully Take Over Someone Else's Access Project (an Access User Group talk with Tom van Stiphout and Kim Young)
- Access Version Control Add-in Deep Dive with Adam Waller: (Jan 12, 2026) Behind the Scenes of the Add-in That Makes Git Workflows Possible for Access Databases (an Access User Group Talk with Adam Waller)
AutoHotKey
- ["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.
Backwards Compatibility
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
-
Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
-
How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
-
Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
-
Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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.
- ["Backwards Compatibility" tag page]: Show all articles with the tag "Backwards Compatibility" (including those where "Backwards Compatibility" is a secondary tag).
- Adding Procedure Parameters Without Breaking Backwards Compatibility in VBA: (Nov 22, 2022) Sometimes you need to add a parameter to a Function or Sub in VBA. But you don't need to break all of your calling code to do it.
- How to Use VBA to Set the ControlSource Property of an Access Image Control (and Other Deeply Hidden Object Properties): (Apr 5, 2023) Ever wonder why you can set some values in the form/report designer Property Sheet but not in VBA? You may just need this well-hidden workaround.
- Discoverability vs. Compatibility: The Dilemma of Evolving the Access Object Model: (Mar 18, 2024) Stringly-typed properties: a necessary evil for maintaining backward compatibility in Access?
- Refactoring Procedure Signatures: The Do's and Don'ts: (Mar 26, 2024) Best practices for modifying procedure signatures while maintaining backward compatibility.
Basic
- ["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...
-
Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
-
Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
-
How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
-
Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
-
Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
-
Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
Best Of
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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...
- Why You Should Always Use Option Explicit in VBA: (Apr 18, 2023) Don't let typos and logic errors ruin your VBA code. Read our latest blog post to learn about the importance of Option Explicit and how to use it.
- Should you install 32-bit or 64-bit Access in 2023?: (May 19, 2023) Which version of Access (and/or Office) should you install: 32-bit or 64-bit? We go way deep into the differences and similarities between the two options.
- How Many Forms and Reports Should Go in the Back-End Database File?: (Oct 13, 2023) Spoiler alert! The correct answer is zero.
- Local vs. Linked Tables in Microsoft Access: (Oct 31, 2023) An introduction to the differences between local and linked tables in Microsoft Access, including five situations where local tables are the better choice.
- Creating and Editing Import Specifications via the Wizard: (Nov 3, 2023) For one-off text file data imports, it's hard to beat the simplicity of Microsoft Access's built-in wizard.
- Using the Wizard to Export to Text Files with Microsoft Access: (Dec 5, 2023) In an effort to remain simple, the Access export to text file wizard manages to do the opposite, making simple updates to export specs unnecessarily cumbersome.
- ["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.
Book Review
- ["Book Review" tag page]: Show all articles with the tag "Book Review" (including those where "Book Review" is a secondary tag).
-
Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
Bug Alert
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
-
MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
-
Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
-
Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
-
Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
-
Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
-
Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
-
Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
-
Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
-
Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
-
BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
-
Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
-
WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
-
Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
-
BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
-
Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
-
BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
-
Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
-
RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
-
Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
-
Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
-
Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
-
Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
-
Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
-
Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
-
Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
-
Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
-
Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
-
Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
-
Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
-
Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Code that Fits in Your Head: (Aug 15, 2023) "Code that Fits in Your Head" is to senior software developers what "Code Complete" is to junior software developers. I can think of no higher praise.
- ["Bug Alert" tag page]: Show all articles with the tag "Bug Alert" (including those where "Bug Alert" is a secondary tag).
- MS Access Report Horizontal Scroll Bar Bug: (Apr 1, 2021) When certain reports open, the horizontal scroll bar gets drawn on the screen and then gets stuck in its original draw location.
- Bug Alert: vbWatchdog: (May 31, 2021) How to fix the E_VBWATCHDOG_UNSUPPORTED_VBAVERSION error.
- Bug Alert: Malwarebytes: (Sep 25, 2021) New behavior-matching algorithms in Malwarebytes block execution of Access applications that call out to the Shell function.
- Compact on Close Danger: (Oct 21, 2021) Compact on Close. It seems innocent enough. But lurking under this seeming convenience is the spectre of corruption just lying in wait.
- Access Bug Alert: Errors When Opening Network Database Files: (Dec 17, 2021) If you started receiving the error "File in use" or "Could not lock file" in December 2021, you may be the victim of an Access bug. Here's how to fix it.
- Partial Workaround for the "Could not lock file" Bug: (Dec 28, 2021) This experimental function could help you avoid the "Could not lock file" error when running the OpenDatabase method of a DBEngine object.
- Patching Access 2013 Runtime to Fix "File Already In Use" Bug: (Jan 8, 2022) Step-by-step process to patch the 2021 Holiday Bug for Office/Access 2013. These same steps can be adapted to patch other versions, too.
- Bug Alert: Can't Access Shared Folders via UNC Alias: (Jan 18, 2022) UNC aliases are a great way to set up development environments for Access applications that rely on UNC paths. It's too bad Microsoft broke them.
- Bug Alert: Cannot Open Any More Tables/Databases: (Feb 5, 2022) Check out the latest bug release from Microsoft: "Cannot open any more tables/databases.", .laccdb file remains, msaccess.exe hangs, and more...
- BUG ALERT: No Current Record: (May 11, 2022) An Access bug introduced in the latest Patch Tuesday update caused major headaches for developers around the world today.
- Office FeatureGates: How Microsoft Can Break and Fix Their Applications in Under 24 Hours: (May 30, 2022) Microsoft Access regularly breaks following Office updates. But, sometimes, it *starts* working again just as suddenly. Here's how that works.
- WARNING: Do NOT Declare DAO Fields As Field2, Field3, etc.: (Jul 13, 2022) While declaring DAO Field objects as Field2 will get you additional IntelliSense, it comes at the risk of breaking working code when MS releases a new Field type.
- Bug Alert: Wizards Don't Work with MVFs and Attachment Fields: (Aug 22, 2022) Beginning with version 2006, Access hangs when running the Report or Labels Wizard on a table with a multi-valued field (MVF) or attachment field.
- BUG ALERT: CurrentDb and DAO.OpenDatabase: (Oct 6, 2022) If you are getting intermittent error messages saying you don't have exclusive access to your database, then this workaround may help.
- Bug Alert Follow-Up: CurrentDb and DAO.OpenDatabase: (Oct 10, 2022) A member of the Microsoft Access engineering team provides an official explanation for the "buggy" CurrentDb and DAO.OpenDatabase behavior.
- BUG ALERT: FortiClient VPN and Windows Update KB5018410: (Oct 13, 2022) A recent Windows Update broke my FortiClient VPN. Learn which update was responsible, how to uninstall it, *and* how to keep it from coming back.
- Roll Back to Previous Version of Office When on Microsoft 365 Current Channel (Preview): (Jan 24, 2024) Rolling back to previous versions of Microsoft 365 (nee Office 365) is hard enough in the best-case scenario. Troubleshooting problems is a nightmare.
- RefreshLink Bug: "Primary key already exists": (Feb 28, 2024) Workarounds, status updates, and forum discussion links for the RefreshLink bug from the fine folks at AccessForever.org.
- Bug Alert: InStr() in WHERE Crashes Access: (Apr 15, 2024) Using string expressions like InStr(), InStrRev(), and Replace() in the WHERE clause of a query can crash Access in certain recent releases.
- Bug Fix: RefreshLink: (Apr 22, 2024) A fix for an error that impacted some users with linked SQL Server tables was announced in Microsoft's latest monthly bug fix roundup.
- Bug Alert: Scroll Wheel Causes Annoying Ding: (May 17, 2024) Did you ever notice Microsoft Access occasionally "dings" when you scroll with the mouse wheel in datasheets and continuous forms? You're not going crazy!
- Bug Alert: Version 2405 Causing Form Performance Problems and Increased Crashing of Access: (Jun 21, 2024) Our friends at AccessForever.org have all the details on the latest bug affecting the Current Channel of Microsoft Access.
- Generic Text Only Printer Driver Bug: (Jun 26, 2024) "There isn't enough free memory to update the display." Recent Windows Updates are causing this bug to appear on reports that use the Generic/Text Only Printer Driver.
- Bug Fix: Access Version 2406 Fixes the Slow Forms and Crashing Bug From 2405: (Jun 28, 2024) A bug fix is here for the error introduced with last month's Access update (which has been causing slow form performance and occasional crashing for affected users).
- Bug Fix: Generic / Text Only Printer Driver Memory Error: (Jul 14, 2024) Microsoft released a fix for the error, "There isn't enough free memory to update the display," when printing to the Generic/Text Only Printer Driver.
- Access + Outlook PDF Bug: (Jul 21, 2024) Has Outlook recently started freezing when trying to send PDFs via email from Microsoft Access? If so, you may be a victim of the latest bug from Microsoft.
- Bug Alert: Version 2408 Causes msaccess.exe to Hang on Exit: (Sep 3, 2024) Access Version 2408 is causing two widespread bugs: msaccess.exe hangs around after closing Access and Error 3048, "Cannot open any more databases."
- Bug Alert: MouseWheel Event Broken in Access Version 2412: (Jan 17, 2025) Info and a workaround on the latest Microsoft Access bug which breaks custom VBA handling of the Form's MouseWheel event.
- Bug Fix: Mousewheel Event Bug: (Feb 7, 2025) Microsoft releases an official fix for the MouseWheel events bug originally introduced in Access Version 2412.
- Bug Alert: Assertion Failed on RegExp Calls in Access 2508: (Aug 29, 2025) Two separate sightings of the same error on two entirely different machines within hours of each other is likely no coincidence. I hope this doesn't ruin my long weekend...
Bug Types
- ["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.
-
Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
Business
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
-
My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
-
My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
-
Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
-
Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
-
Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
-
The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
-
The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
-
How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
-
Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
-
Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
-
Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
-
The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
-
Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
-
Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
-
Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
-
The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
-
Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
-
Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
-
The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
-
Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
-
The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
-
Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
-
Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
-
The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
-
Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
-
Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
-
Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
-
Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
-
Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
-
I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
-
The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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.
- Why You Should Learn to Love Syntax Errors: (Apr 24, 2023) The immediate negative feedback loop that syntax errors provide is a powerful learning tool.
- ["Business" tag page]: Show all articles with the tag "Business" (including those where "Business" is a secondary tag).
- My Personal Journey: (Jan 5, 2021) Join me on a self-indulgent trip down memory lane, rationalized as a "context-setting" exercise for future business-focused articles.
- My Biggest Business Mistake: (Jan 6, 2021) What's the best way to bill for ongoing technical support? I don't really know (HA!). But I think I know the worst way to do it.
- Pricing Annual Technical Support: (Jan 7, 2021) How am I trying to fix my biggest business mistake? By giving my clients three options that explicitly address their risk tolerance.
- Google Analytics Alternatives: (Jan 11, 2021) Avoid GDPR cookie-consent forms and respect your website users' privacy with one of these privacy-friendly Google Analytics alternatives.
- Site Search for NoLongerSet!: (Apr 5, 2021) It was long past time I added sitewide search to this Ghost-powered blog. I could have used Solr, ElasticSearch, or Google. I chose something else...
- The Biggest Mistake Access Developers Make When Writing a Custom Software Proposal: (Jun 19, 2021) I made this mistake myself for years. The good news is it is very easy to fix!
- The Most Profitable Mindset Shift for Access Consultants: (Jun 22, 2021) What do you call it when a client uses emotional language on multiple occasions to describe the same problem? A business opportunity.
- How Access Developers Can Charge Their Existing Clients More (Without Feeling Guilty): (Jun 23, 2021) When you offer only a single option, a proposal is an ultimatum. Add in some monopoly power, and that proposal can start to feel like extortion.
- Prices vs. Estimates (And How to Educate Your Clients on the Difference): (Jun 25, 2021) A price is a fixed amount. An estimate is just a guess. But try telling that to an angry client at the end of an over-budget project. There's a better way.
- Manage Email Addresses for Multiple Domains with One Gmail Account Using Opalstack: (Oct 11, 2021) Some practical advice on how to configure email addresses for multiple domains so that you can still send and receive from a single Gmail account.
- Configuring a Send-Only Email Address in Outlook 2019: (Oct 13, 2021) How to add an account in Outlook 2019 where the user name is NOT the same as the email address.
- The Hour-Tracking Journey: (Oct 22, 2021) From Palm Pilots to Google Sheets to Clockify, I take a trip down hour-tracking memory lane.
- Level Billing: A More Predictable Way to Bill Hourly: (Nov 2, 2021) If you bill by the hour, you probably have clients with whiplash as their invoices yo-yo from month to month. Provide them predictability with level billing.
- Comparative Advantage: (Nov 8, 2021) One person can be more productive than another in every way, and yet, by trading freely with each other, both sides can come out ahead.
- Shared Reports in Clockify: (Nov 18, 2021) Never waste time preparing a detailed list of hours for your clients again using this handy feature from Clockify.
- The Most Important Rule in Client Contracts: (Aug 3, 2022) This rule can be the difference between project success and project failure; joy and misery; profit and loss.
- Sole Proprietorship vs. Partnership vs. LLC vs. S Corp. vs. C Corp.: (Aug 4, 2022) What's the best type of business for you? It depends on where you're at on your journey.
- Impact vs. Effort: A Simple Formula for Estimating ROI: (Mar 28, 2023) There are two variables that determine the financial success of a software project. You only control one.
- The Value Matrix: A Framework for Prioritizing Development: (May 11, 2023) Software developers are content writing great applications, but consultants understand the importance of delivering big business impact.
- Reader Question: How Do I Make Value-Based Pricing Work?: (May 23, 2023) Value-based pricing is not a synonym for fixed-bid pricing. To make it work, you need to focus on the business value you can generate for the client.
- The Secret to a Profitable Career as an Access Consultant: (Sep 11, 2023) It may not be flashy, but it is effective.
- Challenges in Estimating Software Development: Complicated vs. Complex Processes: (Sep 13, 2023) In software development, some processes are easier to estimate than others. Whether the process is complex or complicated has a profound impact on estimate reliability.
- Productized Services: Finding the Sweet Spot Between Products and Services: (Oct 16, 2023) If you don't relish the thought of running sales meetings and writing proposals, productized services may be a good fit for you.
- The Worst Way to Price Software Development Work: (Nov 13, 2023) There are several ways to price software development work, each with its own pros and cons. But there is one option with nothing but cons.
- Profit Centers vs. Cost Centers: (Nov 24, 2023) Both impact a company's net profits, but one tends to be a better fit for most Microsoft Access projects.
- Positioning: What You Need to Know to Run an Access Business: (Apr 8, 2024) The clearer you are about who you don't work with, the more likely you are to attract those you do.
- Tactics vs. Operations vs. Strategy: (May 27, 2024) Want to build a successful long-term business? Take the time to understand these concepts (and apply them in the right order!).
- Choosing and Executing a Strategy: A 4-Step Approach: (May 28, 2024) Forget the military analogies. What do strategy, operations, and tactics look like inside a software development company?
- Software Pricing Battle Royale: (Aug 9, 2024) Hourly Billing vs. Value-Based Pricing: What's the morally right way to bill for software development? Two software business superheroes face off.
- I Paid $600,000 per Hour for LASIK Eye Surgery: (Sep 4, 2024) And that's why ophthalmologists don't bill by the hour.
- The Secret to Better Proposals: Know Which Question to Answer: (Dec 15, 2024) Whether your prospect is questioning the need for custom software or evaluating developers, discover how to craft proposals that speak directly to their concerns.
ChatGPT
- ["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.
-
ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
Class Modules
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
-
Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
-
Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
-
Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
-
clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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.
- ChatGPT: Code-Writing Intern, Code-Reading Mentor: (Feb 13, 2024) An exploration of ChatGPT's relative strengths and weaknesses when it comes to writing vs. reading code.
- ["Class Modules" tag page]: Show all articles with the tag "Class Modules" (including those where "Class Modules" is a secondary tag).
- Caching Object Instances in VBA Classes: (Feb 7, 2022) Simplify the object initialization code in your class modules without sacrificing performance using this easy technique.
- Great Intro to Class Programming in VBA: (Apr 5, 2022) Former Access MVP Ben Clothier's primer on class programming in VBA should be required reading for all Access developers.
- Better Global Constants in VBA with Dot-Driven Development: (Mar 27, 2023) My global constant "C" class--with PredeclaredId = True--is a great alternative to traditionally-declared global Public Const's.
- clsLog: A VBA Logging Framework: (Jul 19, 2024) Introducing clsLog, the no-frills logging framework. Prepare to supercharge your Access logging with the closest thing to NLog or Log4j in the VBA world.
Code Complete
- ["Code Complete" tag page]: Show all articles with the tag "Code Complete" (including those where "Code Complete" is a secondary tag).
-
Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
Code Library
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
-
Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
-
Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
-
One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
-
The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
-
Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
-
Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules?
A: Version control and backward compatibility zealotry.
-
My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
-
Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
-
Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
-
Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
-
Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
-
Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
-
Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
-
Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
-
"Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
-
Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
-
KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
-
Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
-
The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
-
Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename.
Oftentimes, the user wants to immediately
-
Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
-
Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
-
Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
-
Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
-
Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
-
Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
-
Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
-
VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
-
IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
-
Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
-
Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
-
Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
-
Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
-
RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
-
RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
-
Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
-
Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
-
Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
-
Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
-
Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
-
Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
-
How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
-
Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
-
Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
-
Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
-
Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
-
Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
-
Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
-
Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
-
weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
-
The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
-
How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
-
Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
-
How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
-
Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
-
Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
-
Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
-
A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
-
A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
-
How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
-
Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
-
How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
-
Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
-
How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
-
How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
-
The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
-
Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
-
Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
-
Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
-
Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
-
SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
-
TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
-
XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
-
GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
-
Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
-
LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
-
clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
-
3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
-
SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
-
IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
-
CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
-
GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
-
LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
-
MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
-
EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
-
3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
-
UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
-
NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
-
ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
-
Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
-
A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
-
SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
-
WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
-
Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
-
Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
-
GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
-
GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
-
Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
-
Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
-
Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Pseudocode Programming: Think First, Code Second: (Feb 9, 2024) Writing pseudocode before coding forces critical thinking, iterates on the best approaches, and enables programmers to implement complex logic flawlessly.
- ["Code Library" tag page]: Show all articles with the tag "Code Library" (including those where "Code Library" is a secondary tag).
- Quoth thy SQL? Evermore!: (Sep 29, 2020) Solving the "O'Malley problem" with dedicated functions to sanitize our strings. Little Bobby Tables would be proud.
- Come Together: (Sep 30, 2020) Do you build strings in loops? Stop trimming the delimiter at the end of the loop. There's a better way.
- One Thing at a (Hundred) Times: (Oct 7, 2020) How to use Run() and GetTickCount() for some quick and dirty performance profiling. Come for the code, stay for the scolding on premature optimization.
- The Dependency Train: (Oct 17, 2020) Let's torture a train metaphor to illustrate the dangers of dependency chaining.
- Creating Optional Dependencies: (Oct 18, 2020) Using conditional compilation to avoid the "Dependency Train" problem.
- Code Library Updates: (Oct 29, 2020) Q: How do you manage updates to code library modules? A: Version control and backward compatibility zealotry.
- My Dirty Little Secret: (Nov 2, 2020) I don't use Me.Dirty = False in my #msaccess code. I wrap it up and call it from a "guard clause" instead.
- Filling in the Blanks: (Nov 3, 2020) One of the keys to being a good developer is to make the *easy way* also be the *right way*. Exhibit A: the ControlIsBlank() function.
- Why so lazy, Access?: (Nov 4, 2020) Introducing FormIsOpen() and ReportIsOpen(), two simple functions to help deal with Access's laziness.
- Environmentally Friendly Access: (Nov 5, 2020) Using the Windows Registry to manage Production, Development, and Testing environments in #VBA and #MSAccess.
- Don't Settle for the "Status" Quo: (Nov 6, 2020) Wherein I wrap Access's built-in status bar functions inside a class module for more readable code.
- Part and Parse()-l: (Nov 8, 2020) Take the Tag property and OpenArgs argument to the next level. This function makes it easy to assign and extract multiple values from a single string.
- Listing External Table Sources: (Nov 9, 2020) Using the Parse() function to list linked tables by source. Use this when you want to refer to Linked Table Manager info while writing code.
- Now you have two problems: (Nov 16, 2020) Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. --Jamie Zawinski
- "Convenience" Date Functions: (Nov 24, 2020) The DateSerial function is easy to write, but it's not as easy to read. Let's make our code easier to read with some "convenience functions."
- Fun with Form Windows: (Nov 26, 2020) Using my FillAccessWindow function to resize Form and Report objects relative to the amount of available space on the Access canvas.
- KeepFormOnCanvas(): Get Back Here, Form!: (Nov 27, 2020) What happens if the user resizes their Access window so that our form can't open in its entirety? KeepFormOnCanvas() to the rescue!
- Converting Numbers to Text: (Nov 28, 2020) Need to print business checks directly from Microsoft Access? You'll need a way to convert numbers into text. The NumToString function does just that.
- The Subtle Dangers of Dir(): (Dec 1, 2020) If Len(Dir(FullPath)) > 0 Then 'the file exists. This potential bug patiently waits to pounce and ruin another poor programmer's day.
- Kill Failed? Let User Try Again: (Dec 2, 2020) My Access applications regularly need to overwrite existing files. A common example is exporting data to a text file, such as a .csv. Sometimes the user chooses to overwrite the existing file, and sometimes the program is hard-coded to save to a specific filename. Oftentimes, the user wants to immediately
- Text Files: Read, Write, Append: (Dec 4, 2020) There is beauty in simplicity. These three functions for reading, writing, and appending text files are simple, but effective.
- Writing Code with Code in VBA: (Dec 10, 2020) Can you write code with code in VBA? Yes. Should you write code wit--OH, BE QUIET YOU!!! Where's your sense of adventure? ;-)
- Clearing a List Box in Access: (Dec 21, 2020) Sometimes you need to wipe the slate clean and start fresh. Here's a simple function to do just that for an Access list box.
- Unicode-Safe Filtered Filename Lookups: (Dec 23, 2020) Need a Unicode-safe way to retrieve a list of filenames from a folder? And its subfolders? And filtered by filename? It's all here!
- Get a Handle on Window State: (Dec 28, 2020) Using the IsZoomed and IsIconic API calls to return the window state (minimized, maximized, or restored) of a form, report, or Access itself.
- Setting MultiSelect At Runtime: (Jan 14, 2021) You can't actually set a list box's MultiSelect property at runtime. But there are a few ways to work around the limitation. Let's explore them.
- Federal Holidays in VBA: (Feb 1, 2021) How do you calculate US federal holiday observances in VBA? One option is to use brute force and skip the calculation altogether.
- VBA IsBusinessDay() Function: (Feb 2, 2021) A simple function that returns True except for weekends and US federal holidays.
- IsLastBusinessDayOfMonth() Function: (Feb 3, 2021) I bet you can't guess what this function does.
- Counting Weekdays in VBA: (Feb 4, 2021) This otherwise mundane function is made a bit more interesting through its use of the little-known VBA backslash operator, which performs integer division.
- Counting Business Days in VBA: (Feb 5, 2021) Counting business days is easy with the WeekDayCount() and FederalHolidays() functions. What's interesting is how we test the WorkingDayCount() function.
- Using TDD to Calculate Holidays in VBA: (Feb 6, 2021) This article takes you step-by-step through the Test Driven Design process, unencumbered by the complexity of any sort of testing framework.
- Joining Paths in VBA: (Feb 11, 2021) How many times have you gotten a runtime error because you had duplicate or missing backslashes in your file paths? Never again!
- RegOp Class for 64-bit VBA: (Feb 17, 2021) Updating a classic VBA registry reading and writing class module for 64-bit compatibility.
- RegOp Quick Tip: (Feb 18, 2021) Be respectful of your user's registry. Store all your applications' settings in a dedicated publisher subkey.
- Sticky Wicket: Looping by Month: (Feb 20, 2021) Some programming problems are difficult to solve. Others are difficult to solve clearly.
- Looping by Month: DateSerial: (Feb 21, 2021) The first approach to looping by month uses only the builtin VBA functions DateSerial() and DateDiff().
- Looping by Month: Custom Functions: (Feb 22, 2021) By using a couple of custom functions, we can write very readable loops that iterate one month at a time.
- Creating a Monthly Lookup Table: (Feb 23, 2021) Having a table where each record represents a single month can come in quite handy. Let's create such a table.
- Looping by Month: Lookup Table: (Feb 24, 2021) Have I ever used this method? No. Can I imagine a situation where it could be useful? Maybe. Should I write an article about it? Sure, why not.
- Looping by Month: Loop Until with DateAdd: (Feb 25, 2021) Reader Francesco Foti writes in with his own solution to the Looping by Month challenge.
- How to Set a Breakpoint Inside of an Access Query: (Mar 4, 2021) Did you ever want to set a breakpoint inside of an executing query? How about inside a form event property? This trick lets you do it.
- Nothing To See Here: (Mar 22, 2021) Introducing InformNoData(), a simple function to improve the user experience when there is no report data to show.
- Finding the Temporary Folder with VBA: (Mar 23, 2021) Be a good steward of your users' file system. If you are creating temporary files, be sure to create them in the designated temporary folder.
- Getting a Temporary File Name with VBA: (Mar 24, 2021) Here is a simple function to generate an unused temporary file name in VBA.
- Strongly-Typed Collections: The Easy Way: (Mar 27, 2021) Creating a strongly-typed collection class in VBA requires jumping through code export-import hoops. What if you didn't have to, though?
- Get Form By Control: (May 14, 2021) A VBA function that returns the first form parent of the control you pass to it.
- Microsoft Access: Check if Form Object is a Subform: (May 15, 2021) How do you check if the form object is a subform in Access without triggering a runtime error? Hint: this is a trick question.
- Get Top Form By Control: (May 17, 2021) A VBA function that returns the topmost form parent of any control you pass to it.
- weArrowKeyNav Class: (May 18, 2021) Do you want the up and down arrow keys to move to the previous and next records in a continuous Access form? Here's how to do that with only two lines of code.
- The One Function Every VBA Developer Needs in a WithEvents Class: (Jun 15, 2021) Your WithEvents event handlers will only run if you set the event property to "[Event Procedure]." Here's a safe and easy way to do that.
- How to Highlight the Current Record in a Continuous Form: (Jul 2, 2021) Step-by-step instructions for applying a custom highlight to the currently selected record in a continuous form in Microsoft Access.
- Fix for the error: "You can't hide a control that has the focus" in Microsoft Access: (Jul 7, 2021) The DefocusIfActive() procedure shifts the focus away from a control so that it may be hidden or disabled.
- How to Safely Hide Controls in Microsoft Access: (Jul 10, 2021) I *never* set the Visible property of a form control directly. Instead, I use a convenience function so that I don't have to worry about run-time error 2165.
- Quickly List the Properties of an Object in Access: (Aug 23, 2021) Here's a quick and dirty procedure to iterate through an Access object's Properties collection.
- Converting the DataTypeEnum Values to Equivalent VBA Types: (Oct 5, 2021) Two simple functions to convert DataTypeEnum values to descriptive strings and their VBA data type counterparts.
- Preventing File-Writing Race Conditions in VBA: (Dec 7, 2021) If you're waiting on an external process to write a file to disk, how can you be sure it's really done? This routine helps avoid (or at least rule out) some race conditions in VBA.
- A Safer Alternative to BETWEEN When Filtering Dates: (Dec 11, 2021) This convenient function generates defensive SQL statements to help you avoid the subtle dangers of the BETWEEN statement when filtering dates.
- A Function to Quote Literal Dates When Building SQL in VBA: (Dec 13, 2021) This improved version of my date-quoting convenience function eliminates a common source of date-handling ambiguity via the ISO date format.
- How to Check if VBA is Running in 64-bit Mode: (Dec 20, 2021) A simple function (or class property) that returns whether the VBA code is running under 32-bit mode or 64-bit mode.
- Automatically Cleaning Up Temporary Files on Program Exit: (Dec 22, 2021) A dead-simple way to clean up temporary files without having to worry about waiting until they are no longer in use.
- How to Remove Special Characters from a VBA String: (Dec 23, 2021) A simple function to remove special characters from a string in VBA. Useful for sanitizing file names, sheet names in Excel, and lots of other stuff.
- Convert CIDR Notation to IP Address Range in VBA: (Jan 22, 2022) A VBA function to convert from CIDR notation (192.168.1.1/24) to the corresponding IP range (192.168.1.0 - 192.168.1.255).
- How to Return the Precision and Scale of a Decimal Field in Access: (Feb 22, 2022) There's no way to use DAO to return the scale and precision of a Decimal field in Access. Luckily, there's an easy workaround using ADO.
- How to Check If Two Variant Values Are Equal (or Not) in VBA: (Mar 19, 2022) While tempting, you can't simply use the equality (=) or inequality (<>) operators to compare Variant values in VBA. Here's a safer alternative.
- The Pluralize Function: (Apr 1, 2022) You don't have to settle for messages like, "1 record(s) inserted." This simple function is an easy way to format strings for pluralization in VBA.
- Displaying Human Readable Time Spans: (Apr 13, 2022) The HumanizedSeconds() and ConvertToSeconds() functions work hand-in-hand to provide a general solution for storage and display of time spans.
- Displaying Very Long Human Readable Time Spans: (Apr 14, 2022) With 29-million-year time spans, you can handle almost any task (besides evolution, continental drift, and adding the LAA flag to MS Access).
- Printf Function: (Apr 19, 2022) User @wqweto's string interpolation VBA function has some neat tricks, like using Unicode's Private Use Area to get safe temporary placeholder characters.
- Show a Friendly Message When a Report Has No Data: (May 10, 2022) A handy function you can call from an Access report's Property Sheet to gracefully inform the user when their report has no data to display.
- SQL Server "Codify" Function: (May 20, 2022) This function will jump-start the process of converting long descriptions into meaningful abbreviations. It's great for creating "Code" columns in lookup tables.
- TagWrap() Function: (Jun 20, 2022) This convenience function helps you write more readable code when building strings with HTML-style opening and closing tags.
- XmlWrap() Function: (Jun 21, 2022) This convenience function helps you write more readable code when building Office Ribbon-flavored XML strings.
- GetAttr(): Ribbon XML String-Building Helper Function: (Jun 24, 2022) When you're building strings in code with lots of optional values--such as ribbon XML attributes--this simple function helps keep your code readable.
- Set Report Properties in Bulk: (Jun 27, 2022) Looking to set a report property, such as an event handler, to the same value for multiple reports? Use this routine to automate the whole process.
- LogToTempFile() Function: (Jul 4, 2022) A quick and dirty method for debugging large strings in VBA.
- clsApp: My Application-Wide MS Access Singleton Class Module: (Jul 11, 2022) I use many class modules in my applications, but this is the one I cannot live without.
- 3 Ways to Get and Set the TitleBar Text for an MS Access Application: (Jul 12, 2022) Here are three ways to set the Application Title for an MS Access application. My preferred method allows getting and setting with a single line of code.
- SelectedListBoxItems() Function: (Jul 14, 2022) It's not difficult to get the selected items from a multi-select list box, but it is tedious. This function makes it simple and easy.
- IMPROVED: SelectedListBoxItems() Function: (Jul 15, 2022) A clearer and (very slightly) more performant version of my SelectedListBoxItems function.
- CreateGuid: A Reliable Way to Generate GUIDs in VBA: (Aug 5, 2022) A well-tested method to generate GUIDs in both 32-bit and 64-bit VBA.
- GetTempPath: Using the Windows API for Maximum Performance: (Aug 8, 2022) If you are looking to maximize performance in VBA, using the Windows API will almost always be your best bet.
- LimitTextLength: Enforce Max Text Length for Unbound Text Boxes and Combo Boxes: (Aug 10, 2022) A handy function to enforce maximum string lengths for unbound text boxes and combo boxes in Microsoft Access.
- MakeSurePathExists: Using the Windows API to Create Missing Subfolders in VBA: (Aug 12, 2022) A Windows API function makes verifying (and creating, if necessary) a full folder hierarchy dead simple.
- EnsurePathExists: A Unicode-Safe Way to Create Missing Subfolders in VBA: (Aug 15, 2022) The EnsurePathExists function--based on the API function SHCreateDirectoryExW--is the ultimate tool for verifying and creating folder structures.
- 3 Ways to Create Missing Subfolders in VBA: (Aug 16, 2022) If you need to generate multiple levels of subfolders using VBA, these three functions will each get the job done.
- UseHand(): Changing the Mouse Cursor in Microsoft Access: (Aug 31, 2022) A classic Microsoft Access mouse cursor trick gets simplified and updated for 64-bit VBA compatibility.
- NewSort(): Sort a Continuous Form by Clicking on the Column Label: (Sep 1, 2022) Sort a continuous form in MS Access by simply pointing at a column label. These functions make it easy.
- ObscureInfo(): Hide Sensitive Information in Access Form Controls: (Sep 7, 2022) Avoid over-the-shoulder attacks and prevent accidental disclosures in your Microsoft Access forms with this easy-to-implement function.
- Getting the Temp Folder in VBA: (Sep 30, 2022) There are many ways to get the temporary folder in VBA. But if you look behind the curtain, there's really only one...
- A GUID-Based Temporary File Name Generator: (Oct 3, 2022) If you need a reliable and fast way to create lots of temporary file paths, a GUID-based filename generator has some compelling benefits.
- SetPredeclaredId(): Change the Hidden PredeclaredId Attribute of a VBA Class Module: (Oct 5, 2022) This simple function overcomes the lack of a hidden attribute editor for PredeclaredId values in the VBA development environment.
- WriteTempFile(): A Simple VBA Function to Save Text to a New Temporary File: (Oct 11, 2022) If you need to save a string to a temporary file in VBA, this simple function will do the trick.
- Writing Boilerplate Code by Hand is for Suckers: (Oct 17, 2022) Writing repetitive code may be a necessary evil in VBA, but it's a lot less tedious if you generate most of it in VBA itself.
- Create a Class Module from a String in Microsoft Access: (Oct 18, 2022) Generate VBA class modules from strings during design time using this simple function in Microsoft Access.
- GetLatestOdbcDriver(): Use VBA to get the Latest SQL Server ODBC Driver: (Dec 12, 2022) This simple VBA function will check the user's registry and return the latest ODBC driver from a list of supported drivers that you can customize.
- GetLatestOledbProvider(): Use VBA to get the Latest SQL Server OLE DB Provider: (Dec 14, 2022) This simple VBA function will check the user's registry and return the latest OLE DB provider from a list of supported providers that you can customize.
- Dt() Function v2: Handling Time-Only Date Values: (Dec 19, 2022) An important bug fix for my previously published date-wrapping VBA function that addresses an issue integrating time-only values with SQL Server.
- Dt() Function v3: Refactoring with Automated Tests: (Dec 20, 2022) Reader Brenda Bachtold provides a more readable version of my date-wrapping function. Automated doc tests prove that her version functions the same as mine.
- Converting VBA Long Color Values to RGB: (Dec 29, 2022) The VBA RGB() function converts red, green, and blue values into a VBA long integer color value. This simple function works in the other direction.
Code That Fits in Your Head
- ["Code That Fits in Your Head" tag page]: Show all articles with the tag "Code That Fits in Your Head" (including those where "Code That Fits in Your Head" is a secondary tag).
-
Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
-
Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
COM
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
-
What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
-
High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
-
Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
-
Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
-
COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
-
The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
-
The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
-
Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
-
Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
-
Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
-
Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
-
Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
-
ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
-
How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
-
Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Checklists: (Aug 17, 2023) What flying a B-17 bomber can teach us about software development.
- Command Query Separation: A Technique for Reducing Code Complexity: (Sep 12, 2023) One helpful way to reduce the complexity of your code is to be intentional about how and where your code produces side effects.
- ["COM" tag page]: Show all articles with the tag "COM" (including those where "COM" is a secondary tag).
- What the #$%& is COM!?: (Nov 19, 2021) One of the most important concepts in VBA is also one of the least understood. Let's shine a light on the Component Object Model.
- High Level Overview of COM: (Nov 20, 2021) This whirlwind tour of the Component Object Model technology will jump start your journey of automating Excel from VBA in Access.
- Early Binding vs. Late Binding: The Essential Guide for VBA Developers: (Nov 27, 2021) The Absolute Minimum Every VBA Developer Absolutely, Positively Must Know About Early and Late Binding in COM (No Excuses!)
- Microsoft Office COM Automation Libraries: (Dec 3, 2021) The VBA developer's guide to automating Microsoft Office applications: early vs late binding; CreateObject vs GetObject; and tips on cleaning up after yourself.
- COM Server Types: In-Process vs. Local vs. Remote: (Dec 27, 2021) There are three basic types of COM servers: in-process, local, and remote. What do they have in common? What are the differences? Let's explore.
- The IUnknown Interface: (Mar 7, 2022) All COM objects are required to support at least one interface: the IUnknown interface. In this short article, we explore the three methods of IUnknown.
- The IDispatch Interface: (Mar 25, 2022) For a COM object to support late binding in VBA, it must implement the IDispatch interface. Let's explore IDispatch and its four methods.
- Overcoming Programming Language Barriers with COM: (Mar 26, 2022) COM is sort of like a Chinese restaurant.
- Early vs. Late Binding at the Chinese Restaurant: (Mar 28, 2022) In this continuation of our Chinese restaurant-COM metaphor, we expand the example to illustrate the differences between early and late binding.
- Managing Memory in COM: (Mar 30, 2022) We continue on with our restaurant analogy to explain the concept of reference counting and COM object cleanup.
- Reference Counting's Fatal Flaw: Circular References: (Mar 31, 2022) We look at several types of circular references along with a handy tool that you can use to help identify circular references in your own code.
- Loading VBE Addins - A Windows Registry Tour: (Apr 25, 2022) Let's pull back the curtain and see how VBA loads VBE COM add-ins via a series of registry calls.
- ActiveX vs. Standard DLLs: (Jun 15, 2022) What's the difference between an ActiveX (COM) and Standard DLL? When would you choose one over the other?
- How VBA IDE Addins Get Loaded From the Windows Registry: (Apr 12, 2024) A deep dive into how VBA IDE addins get loaded from the Windows Registry to help you avoid getting stuck in DLL hell.
- Invisible Instances of Office Applications: Who is to Blame?: (May 21, 2024) These two words can help you determine whether a hanging copy of Word, Excel, Access, or Outlook is a bug in Office...or a problem with your own VBA code.
Combo Boxes
- ["Combo Boxes" tag page]: Show all articles with the tag "Combo Boxes" (including those where "Combo Boxes" is a secondary tag).
-
Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
-
Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
-
Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
-
Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
-
Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
-
Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
-
Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
-
5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
-
A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
-
A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
-
ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
-
How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
-
Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
-
Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
-
ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
Commentary
- ["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.
-
The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
-
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.
-
The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
-
The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
-
Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
-
AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
-
Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
-
VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
-
The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence.
Thrice is a pattern.
-
Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
-
"I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
-
Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
-
Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
-
"Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
-
Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
-
The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
-
Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
-
Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
-
Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
-
Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
-
"How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
-
What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
-
7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
-
Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
-
Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
-
Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
-
Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
-
How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
-
Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
-
Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
-
How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
-
Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
-
Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
-
Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
-
Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Combo Boxes and Target Sizes: (Jun 7, 2021) Just like in darts, it's easier to hit a larger target when using the mouse. With this in mind, let's make our combo boxes more user-friendly.
- Combo Boxes: Use Responsibly: (Jun 8, 2021) Comic book legend Stan Lee captured the essence of the Microsoft Access combo box control in six words, "With great power, comes great responsibility."
- Combo Box Benefits: (Jun 9, 2021) An overview of some of the benefits of combo boxes, including autocomplete, hierarchical searching, and auto-updated most frequently used lists.
- Progressive Combo Box Filtering: (Jun 10, 2021) Autocomplete for combo boxes with hundreds of thousands of entries? It's possible with the progressive filtering technique.
- Multi-Column Progressive Combo Box Filtering: (Jun 11, 2021) You, too, can learn to filter your combo boxes by every visible column.
- Cascading Combo Boxes: (Jun 12, 2021) Cascading combo boxes are one of the best ways to find data in a fixed hierarchy. Here's what the concept looks like in action.
- Lazy Loading Combo Boxes: (Jun 14, 2021) Don't load tens of thousands of records into a combo box. Instead, wait for the user to start typing, and then load only what they need.
- 5 Advanced Combo Box Techniques to Take Your Access Forms to the Next Level: (Jun 16, 2021) Increase the combo box's "target area," lazy load your data, add progressive filtering (for multiple columns!), and implement dead-simple cascading.
- A Wonderful, Magical Class Module: (Jul 30, 2021) Imagine a single class module you can use for progressive combo box filtering, lazy loading combo boxes, AND multi-column filtering!
- A Lazy-Loading Combo Box In Only 3 Lines of Code: (Jul 31, 2021) Combo boxes that pull down too many records can slow down your Access forms. Boost performance with my class module and 3 lines of code.
- ComboBox .Undropdown Method: (Aug 11, 2021) Combo boxes have a .Dropdown method. But what if you want the opposite: a .CloseDropdown method? This tip from Adam Waller has the answer.
- How to Add a Catch-all Value to a Combo Box in Access: (Oct 29, 2021) Two ways to let your users choose "All of the above" when using your combo boxes.
- Dealing with Inactive Items in a Combo Box Row Source: (Feb 15, 2022) There are many ways to deal with inactive RowSource items in combo boxes. Here's a no-code technique that I find myself coming back to time and again.
- Using the NotInList Event in Microsoft Access to Dynamically Update Combo Boxes: (Aug 31, 2023) The Microsoft Access combo box's NotInList event lets you provide "just-in-time" features for building a simple and intuitive user experience.
- ComboBox NotInList Event: Revisited: (Sep 5, 2023) We improve our NotInList event code with a workaround for the "text you entered isn't an item in the list" error message via the little-known Form Error event handler.
- ["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.
- The Extra Resume: Revisited: (Mar 2, 2021) Pre-staging the extra Resume means, "there's no code to change when debugging." But is that really a good thing?
- 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.
- The 5 Surprising Lessons I Learned About Developing Software: (Mar 30, 2023) Many of the things I thought I knew about writing software were not only wrong, but often the exact opposite of the truth.
- The Zen of Python: 19 Pieces of Programming Wisdom: (Mar 31, 2023) The Zen of Python is the famous philosophical foundation of one of the world's most popular programming languages. And that's no coincidence.
- Spinning Plates: What this Parlor Trick Has in Common with Software Development: (Apr 4, 2023) The fewer items you need to mentally track the less likely you are to make mistakes or generate bugs.
- AI is the Future...And the Future is Now: (Apr 21, 2023) Used properly, AI is the greatest force-multiplying technology the world has ever seen.
- Documentation-First Development: (May 16, 2023) The act of writing end-user documentation before software development offers a host of surprising benefits.
- VBA Cracks RedMonk's Stack Overflow Top 15 for 2023: (May 18, 2023) VBA may never be a GitHub heavyweight, but it holds its own among other top languages in terms of Stack Overflow popularity.
- The Rule of Thrice: Know When to Build Generic Solutions in Code: (Jun 22, 2023) Once is a fluke. Twice is a coincidence. Thrice is a pattern.
- Priorities and Time Management for Microsoft Access Consultants: (Jul 4, 2023) Whether you realize it or not, every decision you make about how to manage your time is a result of what you prioritize.
- "I'm Not Touching That!": (Jul 31, 2023) Hey, who wants to maintain this legacy code? Beuller? Beuller?
- Three Factors that Lead to Complex Code: (Aug 3, 2023) "Three properties determine the complexity of an environment. ... The greater the multiplicity, interdependence, and diversity, the greater the complexity."
- Microsoft Access vs. SQLite: Security Comparison: (Aug 4, 2023) Microsoft Access or SQLite: Which one is more secure? The answer may surprise you.
- "Old" is the New "New": (Aug 18, 2023) Do you have a software project littered with now-old items named "XxxxNew"? If you're determined to avoid doing it the right way, here's a less terrible approach.
- Wrapper vs. Port vs. Rewrite: (Aug 21, 2023) Wrappers, ports, and rewrites are three techniques for incorporating non-native code into our applications. Let's explore the pros and cons of each approach.
- The Complicator's Gloves: A Cautionary Tale for Software Developers: (Sep 27, 2023) This classic tale reminds us as software developers to resist the urge to go down the rabbit hole of an over-engineered solution.
- Working on Someone Else's Code Base: Why Applications are Easier to Write Than Maintain: (Oct 9, 2023) Writing greenfield code is easier (and more fun!) than maintaining an existing application. But that doesn't mean it's a good idea.
- Documenting Recurring Processes: (Oct 30, 2023) The two-pronged approach we use to document recurring processes internally.
- Everything in Life is a Tradeoff: (Nov 6, 2023) There will never be a shortage of people willing to spend other people's money.
- Career Advice from Patrick McKenzie: (Nov 7, 2023) Patrick McKenzie is the best writer on the topics of software and business that you've never heard of.
- "How Hard Can It Be?" Five of the Most Dangerous Words for Access Developers: (Nov 10, 2023) Software projects often turn out to be much more complex than initially anticipated. Here's how to avoid getting in over your head.
- What Dwight Eisenhower Can Teach Us About Microsoft Access: (Nov 22, 2023) IT departments love to hate Access. With an open mind, though, Access can play an important role in a holistic approach to in-house software development.
- 7 Things Most People Don't Know About Microsoft Access: (Nov 23, 2023) Number four is the most frustrating for professional Access developers.
- Bananas Bring Bad Luck on Boats: (Nov 27, 2023) An important lesson in the hidden danger of unknown unknowns, and a good reminder of why non-developers create some of the most useful Access apps.
- Microsoft Access has an Anemic Third-Party Ecosystem...But There is a Silver Lining: (Dec 1, 2023) Sometimes, less is more.
- Microsoft Access: The Only Low-Code/No-Code/High-Code Data Application on the Market: (Jan 15, 2024) Microsoft Access was the original low-code tool before low-code tools were all the rage. There's an important reason why Access remains the king.
- Microsoft MVP Summit 2024: (Mar 13, 2024) Engaging with the Access team, exploring the future of VBA, and advocating for the Access community.
- How to Tell the Technical Abilities of a User Without Asking: (Apr 17, 2024) How do you assess the technical abilities of someone who might not even know how to accurately assess themselves? By making the garden weed itself.
- Thomas Jefferson's Accidental Programming Advice: (Apr 23, 2024) Premature declaration is nothing to be embarrassed about. It can happen to anyone. You don't want to make a habit of it, though.
- Premature Declaration Redux: (May 2, 2024) Let's revisit the argument about whether to declare variables at the top of a procedure or closest to first use. We'll ask ChatGPT to make the best case for each position.
- How Many People Use Microsoft Access?: (May 16, 2024) Anecdotal estimates vary wildly. After scouring the internet, I've only found one (semi-) official number. And it's probably a lot higher than you think.
- Will OfficeScripts Replace VBA?: (May 24, 2024) As always, reports of VBA's demise are greatly exaggerated.
- Why You Should Take Client Psychology Into Account as an Access Developer: (Jul 9, 2024) Should you pay off your mortage early or invest? The answer depends on both math AND psychology. The same is true when working with clients.
- Killing VBA in Outlook: Reduced Functionality is the Whole Point: (Jul 11, 2024) In the name of security and cross-platform compatibility, Microsoft is intentionally neutering one of its flagship applications.
- Breaking Changes: New Outlook Auto-Migration Begins January 2025: (Dec 6, 2024) Microsoft announces timeline for breaking your Access applications: automatic migration to New Outlook begins January 2025. Here's why you shouldn't rush to rewrite everything (yet).
Convenience Functions
- ["Convenience Functions" tag page]: Show all articles with the tag "Convenience Functions" (including those where "Convenience Functions" is a secondary tag).
-
Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
-
The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
-
Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
Conventions
- ["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?
-
PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Avoiding the Error "invalid reference to the property CurrentRecord": (Jul 1, 2021) Error number 2455, "You entered an expression that has an invalid reference to the property CurrentRecord," is annoying, but there is an easy fix.
- The TrySetFocus Convenience Function: (Jul 6, 2021) The TrySetFocus function attempts to set focus to a control. If the operation succeeds, it returns True; otherwise, it returns False.
- Convenience Functions (My Secret Weapon to Create Self-Commenting Code): (Jul 8, 2021) How much can you really gain by replacing one line of code with a different, functionally equivalent line of code? Quite a bit, as it turns out.
- ["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?
- PascalCase All the Things: (Jun 30, 2023) There is only one correct capitalization convention in VBA: PascalCase.
Database Design
- ["Database Design" tag page]: Show all articles with the tag "Database Design" (including those where "Database Design" is a secondary tag).
-
Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
-
When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
-
The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
-
Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
-
Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
-
Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
-
When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
-
Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
-
Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
Debugging
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
-
Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
-
How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
-
Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
-
Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
-
Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
-
Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
-
Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
-
Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
-
Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
-
3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
-
Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
-
Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
-
SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
-
Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
-
Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
-
TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
-
Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
-
Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
-
FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
-
Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
-
The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Autonumber Primary Keys: (Nov 17, 2021) They're fake ... and they're spectacular!
- When to Store Numbers as Text: (Nov 25, 2021) Introducing the "Numeroliteral Test," a one-question heuristic for deciding whether to store numeric data in a character-based field.
- The 13 Kinds of Business Application Tables: (May 27, 2022) Database tables in a line-of-business application generally fall into one of these thirteen categories.
- Reader Q&A: Single-Row Tables: (Dec 8, 2022) Are single-row tables something you should use or not? Can they be trusted? I answer that and more in this installment of Reader Q&A.
- Sample Database Schemas for the Database Design Phase: (Dec 15, 2022) The most important phase of any Microsoft Access application project is the database design. This site has tons of sample schemas to get you started.
- Beware of "Over-Normalizing" Your Database: (Jan 2, 2023) Sometimes the two primary goals of database normalization--reduced data redundancy and improved data integrity--are at odds with each other.
- When Should You Include an Autonumber Column in a Table?: (Jun 14, 2023) Surrogate vs. Natural Keys. GUIDs vs. Autonumbers. What factors dictate whether to include an autonumber column in your table? When should you do it?
- Reader Question: How to Match Names from Multiple Systems: (Jun 27, 2023) It's a common data cleansing challenge: how do you eliminate duplicate data from multiple systems without accidentally deleting unique data?
- Common Uses for One-to-One Database Relationships: (Dec 29, 2023) One-to-one relationships are the red-headed step-children of the relational database world. Here are 25 reasons it doesn't have to be that way.
- ["Debugging" tag page]: Show all articles with the tag "Debugging" (including those where "Debugging" is a secondary tag).
- Debugging Automation Errors: (Nov 19, 2020) Come join me on a journey debugging hard-to-reproduce "Automation error" bugs.
- How to Set a Breakpoint in Startup Code in VBA: (Dec 4, 2021) Ever set a breakpoint in your Access application's startup code, only to have it get cleared before it got hit? There's a simple workaround.
- Checking Specific TCP Port Access to a Remote Machine: (Jan 11, 2022) Troubleshooting network connections is tough. Generic error messages make it hard to identify the root of the problem. This PowerShell cmdlet can help.
- Troubleshooting SQL Server Connection Errors: (Feb 28, 2022) "SQL Server does not exist or access denied." One error. Dozens of possible causes. Read on for a bunch of practical troubleshooting tips.
- Find the Yellow Highlighted Line When Debugging in VBA: (Mar 3, 2022) Did you ever lose your place while debugging in VBA? Here's an easy way to find it.
- Troubleshooting Access Hanging When Switching to Design View: (Mar 12, 2022) How I used two low-level tools--ProcMon and WireShark--to figure out why Access was taking forever to switch to design view in forms and reports.
- Troubleshooting the "Unable to create target directory" Error in PDQ Deploy with ProcMon: (Apr 7, 2022) Let's use my jack-of-all-trades troubleshooting tool--Process Monitor--to find the root cause of a recurring PDQ Deploy error.
- Breaking Down Windows Error Codes: (May 23, 2022) Did you know there is a method to the madness behind those crazy-looking VBA error numbers like 0x80070005 or its decimal equivalent -2,147,024,891?
- Fixing a Persistent "Write Conflict" Error: (Jun 10, 2022) If you are getting consistent "Write Conflict" warnings when using bound forms to update SQL Server tables with datetime fields, there may be an easy fix.
- 3 Benefits of Documenting Your Debugging Process: (Sep 5, 2022) It may sound counterintuitive, but taking the time to document your debugging process will save you time--both now and in the future.
- Debug Documentation: Signal vs. Noise Edition: (Jan 19, 2023) Debugging an issue can generate a lot of content. This technique helps you keep track of and find the parts that really matter.
- Using PowerShell to Provide TCP Port Details of Running SQL Server Instances: (Jun 6, 2023) A PowerShell script that returns useful debugging information about the TCP port details of running instances of SQL Server.
- SSE Setup: Fix for Error -2147024671: (Jun 28, 2023) This is a great example of how we can break down seemingly random Windows error codes to guide our debugging efforts.
- Written Rubberducking: My Debugging Superpower: (Jul 5, 2023) While rubber ducks make good code buddies, they make even better pen pals.
- Written Rubberducking: A Practical Example: (Jul 6, 2023) A practical example of the written rubberducking technique taken straight from our FogBugz issue tracking software.
- TCP Port Test Fails When SQL Server Service Is Stopped: (Jul 19, 2023) There are three likely causes for a failed TCP Port test: 1) firewall on the SQL Server host; 2) SQL Server uses dynamic ports; or 3) SQL Server service is stopped.
- Break Down Complex Expressions for More Debuggable Code: (Sep 18, 2023) Combining multiple operations into a single line of code may be an effective way to play "code golf", but it's no way to develop maintainable software.
- Use XML to Share Access Table Data and Avoid Internet Warnings: (Dec 4, 2023) Anti-virus software and Microsoft policies make it harder than ever to share table data among Access users. The XML format is a simple way to avoid those roadblocks.
- FIXED: "You entered an expression that has no value.": (Dec 20, 2023) "You entered an expression that has no value," is a common Microsoft Access error message. Luckily, while the fix is not obvious, it is easy.
- Rubberducking: (Feb 5, 2024) This one-step process is a surprisingly effective way to troubleshoot the most complex programming problems.
- The Windows Hosts File: A Powerful Debugging Tool for Developers: (Jun 12, 2024) Unlock the secrets of the Windows hosts file and take your debugging skills to the next level.
Defensive Programming
- ["Defensive Programming" tag page]: Show all articles with the tag "Defensive Programming" (including those where "Defensive Programming" is a secondary tag).
-
Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
-
The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
-
Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
-
5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
-
Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
-
Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
-
A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
-
In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
-
Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
-
3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
-
When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
-
Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
-
Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
-
Bug Alert: Accidental
Double-Clicking
of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
-
"Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
-
CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
Deployment
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
-
Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
-
Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
-
Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
-
Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
-
Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
-
HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Defensive Programming: (Oct 10, 2020) Don't build digital Maginot Lines. Program your defenses in depth.
- The RecordsAffected Property is a Powerful Tool for Defensive Programming: (Aug 4, 2021) As developers, we need to constantly be thinking about how to handle unknown unknowns. The RecordsAffected property helps us do that.
- Reduce Logic Errors in Critical Code: (Sep 30, 2021) Software Developers Can Almost Eliminate Logic Errors With This Powerful Technique
- 5 Ways to Reduce Logic Errors Using Automated Double-Checks: (Oct 1, 2021) Identify the critical functions in your application. Then, apply one or more of these techniques to ensure that if they break, someone will notice.
- Data Validity Checks: (Oct 18, 2021) Increase the quality of your existing data by running it through a series of validity checks and showing your users the results.
- Frictionless Validity Checks: (Oct 30, 2021) Let's apply the concept of frictionless development to the defensive programming technique of data validity checks.
- A Safe Way to Add Temporary Code: (Feb 26, 2022) A quick tip to ensure your temporary code disappears when the sun sets.
- In Defense of Security Through Obscurity: (Jun 3, 2022) There are two key elements to defending a military position: cover AND concealment. It's not an either-or proposition.
- Guard Clauses: (Jan 16, 2023) Guard clauses are one of my favorite low-friction defensive programming tools.
- 3 Techniques for Programming Reversible Processes: (Feb 1, 2023) How would you recover from a large accidental UPDATE operation? You'd better be able to answer that question *before* it happens.
- When Reliable Software Goes Bad: (Feb 16, 2023) Back in the 1980's, misplaced user trust in the software of a radiation therapy machine led to six deaths and several other serious injuries.
- Five Ways to Turn Logic Errors into Runtime Errors in VBA: (Apr 17, 2023) Runtime errors are cheaper and easier to fix than logic errors. Here are five ways to make that happen.
- Five Ways to Turn Runtime Errors into Compile Errors in VBA: (Apr 19, 2023) Compile errors are cheaper and easier to fix than runtime errors. Here are five ways to turn potential runtime errors into compile errors.
- Bug Alert: Accidental Double-Clicking of Long-Running Processes: (Jan 19, 2024) This is not a bug in Access itself, but rather a common pattern that leads to occasional logic errors that can be nearly impossible to reproduce (and debug).
- "Hiding" Global Data in VBA: (May 14, 2024) How to implement Steve McConnell's sage advice for handling global data, with techniques for both global constants and global variables.
- CrowdStrike and Delta: Victims of the Software Reliability Paradox: (Aug 2, 2024) As software reliability increases, so too does the degree of harm it has the potential to create. Just ask Delta.
- ["Deployment" tag page]: Show all articles with the tag "Deployment" (including those where "Deployment" is a secondary tag).
- Adding a Machine-Wide Trusted Location in MS Access: (Feb 14, 2022) Let me show you how to add a Trusted Location for every user on a device even if that device doesn't have a full copy of Microsoft Access.
- Mark of the Web (MOTW) Support Among Zip Utilities: (Jun 8, 2022) What happens to the Mark of the Web when you extract files from a downloaded .zip file? It depends on what you use to do the extraction.
- Distributing One-Time Data "Hot Fixes": (Jul 8, 2022) Rolling out changes to *production data* when you don't have direct access to that data can be tricky. This tip makes the process easier.
- Creating Pre-packaged Software with Microsoft Access: (Jul 21, 2022) Microsoft Access is a poor choice for creating pre-packaged software applications. But does it really have to be that way?
- Feature Gates: How Microsoft Switched to a Single Code Base for Multiple Versions of Office: (Apr 3, 2023) Did you ever wonder why SysCmd(acSysCmdAccessVer) returns 16.0 for every version of Access starting with Office 2016? I have a theory...
- HOW TO: Compile to .accde or .mde From the Command Line: (Apr 26, 2024) "The Joel Test" requires that you can "make a build in one step." With these instructions, you can create an .accde from an .accdb without even opening Access.
DevCon
- ["DevCon" tag page]: Show all articles with the tag "DevCon" (including those where "DevCon" is a secondary tag).
-
Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
-
Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
-
Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
-
Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
-
Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
-
Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
-
Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
-
Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
-
Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
-
Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
-
Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
-
Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
-
Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
-
Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
-
Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
-
VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
-
News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
-
Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
-
Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
-
twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
DoEvents
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
-
Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
-
How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
-
How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
-
When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
-
A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
-
How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
-
DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Access DevCon Vienna 2022 - Day One Recap (Part 1): (Apr 30, 2022) I cover Maria Barnes's Dataverse Connector talk and Microsoft's Access Roadmap update in this Access DevCon Vienna 2022 recap.
- Access DevCon Vienna 2022 - Day One Recap (Part 2): (May 2, 2022) I cover Kevin Bell's appLauncher service, Chris Arnold's SSMS-like Access tool, my COM talk, and Colin Riddington's Google Maps API demo in this Day 1 DevCon Vienna 2022 recap.
- Access DevCon Vienna 2022 - Day Two Recap (Part 1): (May 3, 2022) I cover my twinBASIC Update, VBA Tips and Tricks with AG, Word Automation with Crystal Long, and Peter Cole's Themes talk in this Day 2 DevCon Vienna 2022 recap.
- Access DevCon Vienna 2022 - Day Two Recap (Part 2): (May 4, 2022) I cover Northwind 2.0, Continuous Datasheets with Chris Arnold, Peter Cole's 64-bit VBA converter, and Colin Riddington's Translate & Speak tool in this Day 2 DevCon Vienna 2022 recap.
- Access DevCon Vienna 2022 - Access Roadmap Update: (Sep 8, 2022) Highlights include a new "High Confidence" approach to the roadmap, a sneak peek at the modern browser control, and background on the Monster Bug.
- Access DevCon Vienna 2023 - Day One Recap: (Apr 28, 2023) A brief recap of the six sessions on Day 1 of Access DevCon Vienna, the premiere annual English-speaking Microsoft Access global conference.
- Access DevCon Vienna 2023 - Day Two Recap: (May 1, 2023) A brief recap of the five sessions on Day 2 of Access DevCon Vienna, the premiere English-speaking Microsoft Access global conference.
- Microsoft Access - Latest Innovations and the Road Ahead - Access DevCon 2023: (May 2, 2023) The Microsoft Access team provides updates on Code Signing, Dataverse, In-App Messaging, the Edge Browser Control, and future development priorities.
- Documentation Update from Jeff Conrad: (May 3, 2023) Microsoft content manager Jeff Conrad provides a surprisingly interesting behind-the-scenes look at how Access documentation is created and managed.
- Northwind 2.0: The Access Database Template You've Been Waiting For: (May 9, 2023) It only took 30 years, but Microsoft Access finally has a set of templates showcasing the best of what Access and its community of experts have to offer.
- Access in an Azure VM: (Jun 21, 2023) Denver Area Access User Group president, George Young, provides a blueprint for how to move your existing Access applications to the cloud.
- Sneak Peek: Monaco SQL Editor for MS Access: (May 8, 2024) The VS Code editing experience is on its way to the Microsoft Access SQL editor. Get an early look at this exciting upcoming feature.
- Sneak Peek: Modern Access Charts: (May 10, 2024) A slew of new chart options is coming soon to Microsoft Access. Check out this video excerpt from DevCon Vienna 2024 to learn more.
- Access DevCon Vienna 2025 - Day One Recap: (Apr 13, 2025) Day 1 of Access DevCon Vienna 2025 showcases community updates, modern charts, Graph API solutions, VBA enhancements, and Microsoft's roadmap.
- Access DevCon Vienna 2025 - Day Two Recap: (Apr 14, 2025) Day 2 of DevCon Vienna 2025 covered sales strategies, version control, Power Automate, twinBASIC, AI, and developer tools.
- Access Community Update with Karl Donaubauer: (Apr 16, 2025) Microsoft Access in 2024: Usage Statistics and Future Roadmap (an Access DevCon Vienna talk with Karl Donaubauer)
- Programming Modern Charts with Colin Riddington: (Apr 18, 2025) Mastering the 11 New Chart Types in Access 365: Complete Developer Guide (an Access DevCon Vienna talk with Colin Riddington)
- Microsoft Graph API with Maria Barnes: (Apr 23, 2025) How to Create and Send Outlook Emails from Access without COM via Microsoft's Graph API (an Access DevCon Vienna talk with Maria Barnes)
- VBE_Extras with John Mallinson: (Apr 28, 2025) Write Better Access Code Faster with Intelligent VBA Editor Tools (an Access DevCon Vienna talk with John Mallinson)
- News from the Access Team with Microsoft: (May 2, 2025) Is Microsoft Still Improving Access? The Development Team Reveals Exciting New Features (an Access DevCon Vienna talk with Dale Rector and Team)
- Proven Sales Strategies with Juan Soto: (May 6, 2025) How to Command Higher Rates for Your Access Development Services (an Access DevCon Vienna talk with Juan Soto)
- Power Automate with VBA with Ynte Jan Kuindersma: (May 13, 2025) Extend Your Access Applications with Cloud Services Using Power Automate (an Access DevCon Vienna talk with Ynte Jan Kuindersma)
- twinBASIC+AI in Access Development with Mike Wolfe: (Jan 23, 2026) twinBASIC Progress and AI Tools for Modern Access Development (an Access DevCon Vienna talk with Mike Wolfe)
- ["DoEvents" tag page]: Show all articles with the tag "DoEvents" (including those where "DoEvents" is a secondary tag).
- Demystifying DoEvents: (Jul 12, 2021) The DoEvents function may be the single most misunderstood piece of code in the entire VBA language. In this series of articles, I'll try to remedy that.
- How to Teach a Six-Year Old About the DoEvents Function: (Jul 15, 2021) I challenge you to read this article without laughing or learning anything new about the DoEvents function.
- How to Use the DoEvents Function: A Demonstration: (Jul 16, 2021) The demonstration and downloadable sample code in this article make it easy to understand how DoEvents works.
- When (or Should I Say, How Often) to Call DoEvents: (Jul 17, 2021) Too few calls to DoEvents, and your app may appear to be "(Not Responding)." Too many calls to DoEvents, and your app will run slow. Let's Goldilocks this thing.
- A High-Level Overview of the DoEvents Function Call: (Jul 19, 2021) Why does calling DoEvents save us from the dreaded "(Not Responding)" treatment? It's all about handling "Windows Messages."
- How DoEvents Works: The Nitty-Gritty Technical Details: (Jul 23, 2021) A peek behind the scenes at the inner workings of the DoEvents function.
- DoEvents vs. Repaint in Microsoft Access: (Jul 26, 2021) Can you use the Repaint method in place of the DoEvents function? It depends on what you're trying to do. Let's explore with some sample code.
Edge Browser Control
- ["Edge Browser Control" tag page]: Show all articles with the tag "Edge Browser Control" (including those where "Edge Browser Control" is a secondary tag).
-
An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
-
Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
-
How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
Email
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
-
Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
-
Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
-
The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
-
Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
-
Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
-
Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
-
SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
-
The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
-
Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- An Early Look at Security Features in the New Browser Control: (Mar 16, 2023) Among the differences between the old and new Microsoft Access browser controls is an emphasis on security in the new version. What does that mean for you?
- Resources for the Modern Edge-Based Browser Control in Microsoft Access: (Jun 7, 2023) Looking for information or help with the modern Edge-based browser control in Microsoft Access? You've come to the right place.
- How to Access the .Document Property to Parse Web Pages Using the New Edge Browser Control: (Dec 26, 2023) The loss of the .Object property in the new Edge browser control is a big blow to web automation in VBA, but a workaround from Daniel Pineault helps fill the gap.
- ["Email" tag page]: Show all articles with the tag "Email" (including those where "Email" is a secondary tag).
- Mailgun: An Email-Sending Alternative for Access Developers: (Dec 11, 2024) For VBA developers grappling with the looming specter of "New Outlook" and Microsoft's general disdain for COM automation, Mailgun offers an intriguing alternative.
- Mailgun: Quick Start Guide for VBA Developers: (Dec 13, 2024) Sample VBA code and step-by-step instructions for sending a simple test email via the Mailgun email service (no credit card needed).
- The Truth About New Outlook: A Guide for IT Decision Makers: (Dec 22, 2024) With automatic migrations beginning January 2025, protecting your business-critical automations and custom solutions requires immediate attention.
- Beyond the Send Button: How Your Emails Actually Reach Their Destination: (Mar 12, 2025) Before implementing email APIs, Access developers should understand the fundamentals of how email works.
- Why Your Emails Get Blocked: Security Protocols and Deliverability Explained: (Mar 14, 2025) As spam filtering becomes more aggressive, understanding how SPF, DKIM, and DMARC authenticate your messages is crucial for ensuring they reach their intended recipients.
- Putting It All Together: Email Authentication Fundamentals for Access Developers: (Mar 21, 2025) Transitioning from Outlook automation to SMTP services? Learn the fundamentals of SPF, DKIM, and DMARC to keep your Access application's emails out of spam folders.
- SPF Configuration: What Access Developers Need to Know for Reliable Email Delivery: (Mar 23, 2025) Moving beyond Outlook automation? Your Access application's emails will be blocked without proper SPF configuration. Here's what you need to know.
- The Final Pieces: DKIM and DMARC Implementation for Access Developers: (Mar 25, 2025) Moving from Outlook automation in your Access apps? This guide explains DKIM and DMARC implementation for reliable email delivery.
- Mailgun: Setting Up a Custom Sending Domain: (Mar 26, 2025) Set up a custom Mailgun sending domain to replace Outlook COM automation. This guide walks through SPF, DKIM, and MX record setup.
Error Handling
- ["Error Handling" tag page]: Show all articles with the tag "Error Handling" (including those where "Error Handling" is a secondary tag).
-
Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
-
Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
-
Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
-
Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong.
(Shocking, I know.)
-
Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
-
The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
Events
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Error Handling Evolution: (Sep 6, 2020) How you handle errors says a lot about you as a programmer. Most people evolve with experience in how they handle errors. From the most naïve to the most advanced, here is what that evolution looks like.
- Throwing Errors in VBA: (Oct 11, 2020) Introducing a frictionless alternative to Err.Raise.
- Graduate Level Error Handling: (Oct 14, 2020) Once again, I borrowed an idea from Python. To smuggle this concept into VBA, I turned to a rarely-used language feature...
- Why "Add an Error Handler to Every Routine" is Bad Advice: (Nov 10, 2021) For every complex problem, there is an answer that is clear, simple, and wrong. (Shocking, I know.)
- Showing User-Friendly Error Messages for Missing Data on Bound Forms in MS Access: (Jan 13, 2023) Here are two ways to show custom error messages on a bound form using (1) the Form_BeforeUpdate event or (2) the Form_Error event.
- The Form Error Event: How to Handle "Untrappable" Access Errors: (Sep 4, 2023) The Form Error event comes to the rescue for a category of errors impervious to `On Error Resume Next` and `DoCmd.SetWarnings False`.
- ["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
- ["Fluent API" tag page]: Show all articles with the tag "Fluent API" (including those where "Fluent API" is a secondary tag).
-
Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
-
Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
-
When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
Form Design
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
-
Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
-
Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
-
Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
-
Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
-
IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
-
Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
-
Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
-
Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
-
Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
-
5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
-
Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
-
Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
-
Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
-
Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
-
5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
-
Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
-
The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
-
Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
-
Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
-
Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
-
Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
-
Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
-
Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
-
Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
-
Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
-
How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
-
Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
-
Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
-
Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Fluent Interfaces: (Jan 10, 2021) It's probably irresponsible of me to share the following technique with you because you'll be so tempted to abuse it. But let's do it anyway.
- Diving Deeper into the World of Fluent APIs: An Unusual Way of Constructing Class Modules: (Nov 29, 2022) Martin Fowler first coined the term fluent interfaces back in 2005. What are they, what do you need to know about them, and what do they look like in VBA?
- When to Build Fluent APIs: (Nov 30, 2022) Fluent programming interfaces can be your best friend or your worst enemy. So how do you know when they are appropriate to use?
- ["Form Design" tag page]: Show all articles with the tag "Form Design" (including those where "Form Design" is a secondary tag).
- Form Design Gallery: (Dec 29, 2021) An ever-expanding gallery of Microsoft Access form design tips, techniques, and inspiration.
- Master Lookup Form: (Dec 30, 2021) The Master Lookup Form is the hub of my Access applications.
- Progress Tracker Form: (Dec 31, 2021) For recurring processes that have lots of required subtasks but with no dependencies among the subtasks, I turn to my Progress Tracker Form.
- Two-Way Many-to-Many Form: (Jan 1, 2022) Presenting many-to-many relationships intuitively is tricky. I use this style of form when the two sides of the relationship have a small number of records.
- IslaDogs: Getting Creative with the Access Application Interface: (Jan 4, 2022) This one-hour video from Colin Riddington (aka IslaDogs) is jam-packed with API-based Access user interface hacks.
- Modern Message Boxes in Access: (Jan 5, 2022) These modern message boxes from Kevin Bell will help set your Access applications apart from the crowd.
- Tabbed Master-Detail Form: (Jan 26, 2022) The tabbed master-detail form is the heart of my Access applications. The first tab has record details, while the other tabs provide subforms for one-to-many relationships.
- Add a Custom Right-Click Menu to an Access Control: (Feb 2, 2022) It's easier than you might think to add a right-click menu to a control on your Access form.
- Overlapping Windows vs. Tabbed Documents: (Mar 22, 2022) Access gives you two options for displaying forms and report objects: windows or tabs. Read on for the advantages of each and which one I prefer.
- 5 Ways to Set a Default Font on Microsoft Access Forms: (May 6, 2022) If you don't like the default fonts in MS Access, you don't have to change them one control at a time. Here are 5 techniques to simplify the task.
- Abbreviations in Lookup Tables: (May 19, 2022) One way to boost the signal-to-noise ratio on your continuous forms is to use abbreviations rather than full descriptions for lookup tables.
- Choosing the Right Font: (Jun 1, 2022) Fonts fall into six main categories. There is no one "best" type of font. Rather, each type serves different purposes.
- Modern On/Off Button in Access: (Jul 26, 2022) Leave those boring checkboxes behind and move into the 21st century with these modern on-off switches for Microsoft Access. Very little code required!
- Triple-State Modern On/Off Switch in Access: (Aug 19, 2022) Yes, No, or I Don't Know (or Don't Care). With this updated design, you can offer your users a third option with your modern on/off switches.
- 5 Ways to Build Consistent Form User Interfaces in Microsoft Access: (Feb 20, 2023) Make your Access application feel more professional with a consistent user interface design. Form templates make it easy.
- Setting Column-Specific Colors in Microsoft Access List Boxes and Combo Boxes: (Apr 13, 2023) How to use the Format property of a query or table field to set custom colors for columns in a Microsoft Access list box or combo box control.
- The Hard Truth About Message Boxes in Microsoft Access: (May 10, 2023) Just because you know it's true, that doesn't make it any less frustrating.
- Reducing Cognitive Load: The Benefits of Consistent UI Design: (Jun 13, 2023) Reducing cognitive load through consistent UI design offers numerous benefits for both users and developers.
- Accessible Design Resources from Goldman Sachs: (Jun 20, 2023) Building accessibility into your applications improves the user experience for all users, not just those that are visually impaired.
- Avoid Double Negatives for a Better User Experience: (Jul 3, 2023) Double negatives are highly effective--if your goal is to introduce confusion--as my Beast Barracks story shows. They have no place in a user interface, though.
- Using Emoji as Button "Images" in Access: (Aug 9, 2023) One easy way to make your Access applications appear more modern is to embed emoji in the command button text.
- Size to Fit: Text Box Edition: (Sep 14, 2023) You've likely used the Size to Fit command on labels and command buttons, but did you know it can also be used for text boxes, combo boxes, and list boxes?
- Use Hidden Controls for More Reliable Code: (Sep 20, 2023) Former Access MVP Ben Clothier drops some sage advice to help us avoid potential problems with our form code-behind modules.
- Pass Values Between Forms in Access Without Using a Hidden Global Form: (Oct 2, 2023) Using a hidden "global" form is a common way to return user-entered data to your program, but there is a better way.
- Highlight the Current Control in an Access Form...Without VBA!: (Nov 20, 2023) Let's adapt Colin Riddington's excellent no-code current control highlighting technique to work with different form background colors.
- How to Filter Reports in Microsoft Access: (Dec 28, 2023) Here are 5 ways to filter reports in Microsoft Access, along with a closer look at my personal favorite approach.
- Tab Controls with Hidden Tabs: (Jan 3, 2024) This little-known and underused feature opens up some interesting design possibilities for creative Access developers.
- Viewer Question: Sort a Continuous Form by Clicking on the Column Label of a Combo Box: (Jan 11, 2024) My NewSort() function lets you easily add support for giving users a way to sort your continuous forms. But how do we sort by combo boxes' displayed text?
- Deep Dive: Improving the Access User Experience with Attached Labels: (Jan 29, 2024) In this comprehensive article, we explore attached labels in extensive depth: what they are, why you want them, and how to work with them in both the UI and VBA.
Forms
- ["Forms" tag page]: Show all articles with the tag "Forms" (including those where "Forms" is a secondary tag).
-
Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
-
Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
-
2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
-
AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
-
6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
-
7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
-
The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
Hidden Features
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
-
Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
-
Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
-
Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
-
A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
-
Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
-
VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
-
Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
-
VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
-
Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
-
Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
-
How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
-
Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
-
Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
-
DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
-
Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
-
Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
-
Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
-
Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
-
How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
-
Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
-
HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
-
VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
-
AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
-
WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
-
Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
-
Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
-
Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
-
Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
-
Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
-
Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
-
3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
-
Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
-
NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
-
Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
-
AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
-
Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Lazy Loading a Tabbed Form in Microsoft Access: (Aug 31, 2021) How to use "just-in-time population" to dramatically decrease the load times of complex Access forms.
- Escaping Semicolons in a Multi-Column Access ListBox: (Oct 2, 2021) When adding items to a multi-column list box, the semicolon character is used to separate columns. What if the items themselves contain semicolons?
- 2 Ways to Escape Leading Quotes when Adding Items to a List Box: (Oct 4, 2021) Leading quotation marks can cause problems when adding items to a list box or combo box. Here are 2 easy ways to deal with the issue.
- AutoFitDatasheet: A Function to Prettify Your Access Datasheets: (Oct 20, 2021) This routine resizes the columns of the active datasheet window (plus the window itself) based on its contents to make the best use of the available space.
- 6 Techniques to Control Where Forms Open On-Screen in Access: (Mar 23, 2022) With Overlapping Windows in Access, you need to think about where each form should open on-screen for the user. Here are 6 techniques to help you do that.
- 7 Ways to Loop Through Controls on a Microsoft Access Form: (Sep 6, 2022) There are many ways to use VBA to hide/show or lock/unlock groups of controls on an Access form. Here are seven different techniques you can use.
- The Reason MS Access Forms and Reports are Limited to 22 Inches: (Nov 16, 2022) With today's large monitors, many Access developers have bumped into the 22" maximum form width. But do you know why it's not 21" or 23"?
- ["Hidden Features" tag page]: Show all articles with the tag "Hidden Features" (including those where "Hidden Features" is a secondary tag).
- Database Properties for Thee: (Sep 11, 2020) The DAO Database object has a Properties collection. You can read through the list of properties to extract saved database options. You can also add your own properties to the object.
- Wherefore art thou, database properties?: (Sep 12, 2020) In my previous post, I talked about adding custom properties to the database object. I covered how to do it, but did not go into any detail about why you might want to do it. Let's remedy that now.
- Expressions vs. Code: (Oct 3, 2020) When is code not code? When it's an expression. What's the difference and who really cares? Let's explore.
- A Rounding We Will Go: (Oct 6, 2020) Two kinds of rounding, the VBA language spec vs. the Office VBA implementation, and a drop-in replacement for VBA.Round().
- Requery a Form in Place: (Oct 12, 2020) Form.Recordset.Requery. That's it. That's the whole article.
- VBA Alchemy: Turning Methods Into Properties: (Oct 19, 2020) One can check the status of screen painting in Excel, but not in Access. This turns out to be an important shortcoming. Let's remedy it.
- Blast From the Past: (Oct 26, 2020) Why use keyboard shortcuts from Access 2003 when developing in 2020? Because starting with Access 2007, the new shortcuts suck.
- VBA's Case Changing "Feature": (Nov 14, 2020) VBA likes to change the casing of our code (upper/lower/mixed). It may seem random, but it's not. Read all the details here.
- Careful What You Watch For: (Dec 8, 2020) Can the simple act of creating a Watch change the behavior of your code while debugging? Why yes, yes it can.
- Debugging Private Procedures: (May 7, 2021) After more than 14 years as a VBA developer, I recently discovered that you can debug private procedures without temporarily making them public!
- How to Check if a User Clicked [Cancel] on an InputBox in VBA: (Aug 30, 2021) It's possible to distinguish between a user clicking [OK] on an empty box or clicking [Cancel]. You just need to use this simple trick.
- Expressions vs. Code: Implicit Type Conversion: (Sep 7, 2021) In Microsoft Access, is a whole number literal implicitly treated as a Long or an Integer or a Double? As it turns out, it depends on where you ask.
- Hidden Feature: Drag and Drop Access Objects Between Files: (Dec 2, 2021) Skip the "Import Access Objects" dialog screens and use your mouse to move Tables, Queries, Forms, Reports, and code modules between Access files.
- DefType Statements in VBA: The Dark Side of Backward Compatibility: (Jan 10, 2022) Young VBA programmer, be not tempted by the dark side. DefType statements must be understood, but never used!
- Access Error Number Message Lookup: (Jan 20, 2022) Did you ever come across an error number in your Access code--maybe in an If or Select Case statement--and wonder what it was for? Wonder no longer.
- Quick and Dirty For Loops in the Immediate Window: (Feb 21, 2022) Did you know that you can write and execute entire For Loops in the VBA Immediate Window?
- Inspecting the End of a Long Variable Value in VBA: (Feb 23, 2022) You know how VBA cuts off the right side of a really long variable when inspecting its value via mouse hover? Did you know you can show the right side instead?
- Declaring and Initializing Variables in the Same Line in VBA: (Feb 24, 2022) You can't declare and initialize a variable in a single code *statement* in VBA, but you can do it in a single *line* of code with this handy trick.
- How to Show Hidden Items in the VBA Object Browser: (Apr 11, 2022) One possible fix for the "Cannot jump to '|' because it is hidden" error is to show hidden members in the VBA object browser.
- Why Does My Access Web Browser Control Default to IE 7?: (Apr 27, 2022) If web pages don't look right on your Access web browser control, it might be due to a little-known registry setting.
- HOW TO: Run Scheduled Tasks with Microsoft Access: (May 9, 2022) This underused MS Access command-line argument opens up a whole new world of possibilities when it comes to scheduling recurring tasks in Access.
- VBA Immediate Window Line and Character Limits: (Jul 1, 2022) Don't take my word for it (or anyone else's on the internet, for that matter). Prove the limits to yourself with some simple VBA.
- AccHitTest: Returns the Form Control the Mouse Clicked On: (Aug 1, 2022) This undocumented form function can help you write a generic click event for label controls.
- WizHook: A Hidden Access Object With Intriguing Potential: (Oct 25, 2022) Font-aware AutoFit of text and combo boxes, auto-bracketing of illegal field names, sorting an array of strings...the possibilities are finite!
- Select Entire Sub or Function in VBA with a Double-Click: (Nov 14, 2022) Yet another hidden feature of the VBA editor that eluded me for more than fifteen years.
- Select Entire Module in VBA With Control + Click: (Nov 15, 2022) Learn 4 different ways to select the entire contents of a VBA module, plus a bonus keyboard shortcut tip for switching between two active code modules.
- Access End-User Shortcuts: (Nov 24, 2022) Shortcut keys to toggle the dropdown state of a combo box, copy field values from the previous record, enter the current date and time, and more.
- Dark Mode in VBA: (Dec 13, 2022) VBA may not have a preset "Dark Mode" like other modern development environments, but it's not hard to create one yourself.
- Understanding the Access ColumnWidth VBA Property: (May 22, 2023) The ColumnWidth property of an Access datasheet has some strange behavior, especially when it comes to its special values: Default Width and Size to Fit.
- Quick & Dirty Block Comments in VBA: (Jun 23, 2023) Everybody knows there's no block comment character in VBA, right? Or is there...
- 3 Situations for Using Named Arguments in VBA: (Jul 27, 2023) One of the lesser-known features of VBA is the ability to use named arguments in your calling code. Here are three situations just begging for named arguments.
- Customizing the Quick Access Toolbar in Microsoft Access: (Aug 25, 2023) Get back some of that pre-2007 Office toolbar goodness with the Quick Access Toolbar (QAT). Vote for your favorite QAT commands.
- NEW & IMPROVED: The "Unset" Enum Item: (Nov 29, 2023) This hidden feature of VBA lets you take advantage of my "Unset" enum item technique without cluttering up your IntelliSense.
- Concatenating Strings in VBA: Plus (+) vs. Ampersand (&): (Jan 1, 2024) Both the ampersand and the plus sign operators can be used to join strings in VBA. Clever developers can use this to their advantage.
- AutoKeys: One of Access's Most Well-Hidden Secrets: (Mar 28, 2024) How I used one of the least discoverable features of Microsoft Access to create a global help shortcut key integrated with wiki-based documentation.
- Three Reasons to Use Named Arguments in VBA: (May 22, 2024) This relatively unknown (and massively underused) syntax can make your VBA code much more readable in certain situations.
Hiding Dupe Values
- ["Hiding Dupe Values" tag page]: Show all articles with the tag "Hiding Dupe Values" (including those where "Hiding Dupe Values" is a secondary tag).
-
Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
-
Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
-
Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
-
Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
-
Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
-
Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
-
Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
-
Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
-
Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
-
Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
Holiday
- ["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.”
-
Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
-
Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
-
Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
-
Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
-
Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
-
Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
-
Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Hiding Duplicate Values in Microsoft Access Forms and Reports: (Feb 14, 2024) A series of articles with basic through advanced techniques for hiding duplicate column values in Microsoft Access reports and continuous forms.
- Sample Data for the "Hiding Duplicate Values" Series: (Feb 15, 2024) This article contains the sample data for following along with the rest of the "Hiding Duplicate Values" series.
- Hiding Duplicate Values in Reports: (Feb 16, 2024) There are two primary ways to group records in an Access report: with AND WITHOUT group headers. ... Wait, what?!?!
- Hiding Duplicate Values in Continuous Forms via Subqueries: (Feb 19, 2024) In this installment, we use GROUP BY subqueries to generate a read-only record source for a continuous form that hides duplicate header values.
- Hiding Duplicate Values in Continuous Forms via Left Joins: (Feb 20, 2024) In this installment, we use Bill Karwin's inequality LEFT JOIN technique to handle multi-column sorting without grinding everything to a halt.
- Use DCount() to Make Editable Continuous Forms with Hidden Duplicate Values: (Feb 21, 2024) In this installment, we use the DCount() domain aggregate function to create an editable continuous form with hidden group header values.
- Use Custom Functions to Hide Multi-Level Group Headers on Editable Continuous Forms: (Feb 22, 2024) In this installment, we use custom recordset-based VBA functions to implement multi-level group headers in an editable continuous form.
- Use Caching to Speed Up Editable Forms with Hidden Duplicate Values: (Feb 23, 2024) In this installment, we reduce our database calls by more than 80% by shifting the bulk of the work to high-performing VBA dictionary structures.
- Invalidating the Cache on the Hidden Duplicate Values Form: (Feb 26, 2024) In this installment, we demonstrate how simple it is to refresh the cache when you use self-healing object variables.
- Triggering Cache Invalidation on the Hidden Duplicate Values Form: (Feb 27, 2024) In this installment, we explore two different approaches for deciding when to invalidate our cache: user-triggered and automatic.
- ["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.”
- Happy Easter: (Apr 9, 2023) “Because you have seen me, you have believed; blessed are those who have not seen and yet have believed.”
- Merry Christmas: (Dec 25, 2023) "The Word became flesh and made his dwelling among us. We have seen his glory, the glory of the one and only Son..."
- Happy Easter: (Mar 31, 2024) "Do not be afraid, for I know that you are looking for Jesus, who was crucified. He is not here; he has risen, just as he said."
- Merry Christmas: (Dec 25, 2024) "For to us a child is born, to us a son is given..."
- Happy Easter: (Apr 20, 2025) “[Mary] saw two angels in white, seated where Jesus’ body had been…They asked her, ‘Woman, why are you crying?’”
- Merry Christmas: (Dec 25, 2025) "Then they opened their treasures and presented him with gifts of gold, frankincense, and myrrh."
- Happy Easter: (Apr 5, 2026) "For since death came through a man, the resurrection of the dead comes also through a man. For as in Adam all die, so in Christ all will be made alive."
Humorous
- ["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
- ["Interfaces" tag page]: Show all articles with the tag "Interfaces" (including those where "Interfaces" is a secondary tag).
Intermediate
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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
- ["Intermediate" tag page]: Show all articles with the tag "Intermediate" (including those where "Intermediate" is a secondary tag).
-
Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
-
Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
-
Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
-
Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
-
Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
-
Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
-
Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
-
Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
-
Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
-
VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
-
Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
-
The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
-
Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
-
Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
-
To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
-
Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
-
Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
-
Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
-
Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
-
Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
-
First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
-
4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
-
The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
-
Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
-
Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
-
Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
-
How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
-
4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
-
CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
-
4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
-
How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
-
The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
-
Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
-
5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
-
Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
-
Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
-
Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
Leadership
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
-
Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
-
Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Interfaces, Conceptually: (Oct 20, 2020) Interfaces can be a difficult concept to grasp conceptually. To help make sense of the concept, consider these real world examples.
- Interfaces, Practically: (Oct 21, 2020) A real world example using Active Directory lookups.
- Backward-Compatible Refactoring: (Oct 22, 2020) How can you completely change the way you interact with a class without breaking backward compatibility? Interfaces.
- Cookie Cutter Forms: (Oct 23, 2020) How do you reuse a form with external dependencies in multiple projects? Interfaces.
- Dependency Injection (sort of): (Oct 24, 2020) For a few common dependencies, we can cheat by using a singleton class. Within that class, we'll type those dependencies as interfaces.
- Cleaner IntelliSense: (Oct 25, 2020) How to clean up your object's auto-complete dropdown list when it starts to look like that of the MacBook Wheel.
- Debugging Sideways Images in Access: (Nov 22, 2020) Ever import a normal-looking image in Access, only to have it turn sideways on you in the image control? The problem may lie in the EXIF data.
- Decompile then Deploy: (Nov 23, 2020) Save disk space and increase startup performance of your program updates by running /decompile before deployment.
- Bang! Dot. Default: (Dec 9, 2020) Three ways to reference form and report controls. Which way is best?
- VBA Code Generation Trick: (Dec 12, 2020) Using Notepad++ to transform existing code into a VBA string that generates itself.
- Data Transfer Objects in VBA: (Dec 13, 2020) You can't create a collection of custom types in VBA. What can we do instead?
- The Subtle Dictionary Key Bug: (Dec 15, 2020) Always explicitly call the .Value property when using fields or controls as Dictionary keys. Else the bugs come crawling!
- Checklist: Better Access Applications: (Dec 18, 2020) Good. BETTER. Best. Is your Access application good enough to sell?
- Short-Circuiting VBA?: (Dec 22, 2020) Beware of clever workarounds for missing language features. Sometimes the simple approach is best.
- To Compile or Not to Compile: (Jan 12, 2021) With the proper deployment infrastructure in place, distributing uncompiled Access apps can simplify your life versus compiled Access apps.
- Decompile Before Deployment: (Jan 13, 2021) Before deploying my Access applications, I like to strip them down to their bare bones.
- Sources of Technical Debt: (Jan 16, 2021) Dealing with technical debt is no fun. It's better to avoid it in the first place. To help with that, here's a list of common sources of technical debt.
- Parameterized Constructors in VBA: (Mar 21, 2021) VBA does not allow for parameterized constructors. We can work around that, though, using the Factory pattern and a strong naming convention.
- Access Web Browser Control: (Apr 15, 2021) Documentation is scarce for the legacy Access Web Browser Control. And that makes Daniel Pineault's page a goldmine of information.
- Come Here Often?: (Jun 3, 2021) When designing a user experience (UX), the single most important question to ask yourself is this: How often will this feature be used?
- First, Make It Right (Then Make It Fast): (Jun 28, 2021) In queries, nested IIf statements are fast and (relatively) easy to write. The problem is they are nearly impossible to read.
- 4 Uses for Transparent Command Buttons in Microsoft Access: (Jul 3, 2021) When you set a command button's Transparent property to True, you won't see it but you can still interact with it. This opens up a world of possibilities.
- The "Unset" Enum Item: (Jul 21, 2021) This simple technique is a foolproof way to avoid the sort of logic bug that can live undetected in your codebase for years.
- Office 2019 Runs in 64-bit Mode By Default. Here's What That Means for VBA Developers: (Jul 27, 2021) Through Office 2016, default installs used the 32-bit version of the software. Now that 64-bit is the default, it's time to bite the bullet and convert your VBA code.
- Enforcing a Single-Row Table in MS Access and SQL Server: (Jul 28, 2021) There are many uses for a table with one--and only one--row in it. Using such a table is simpler if you can rely on the sanctity of its one-row-ness.
- Runtime Mode in Microsoft Access: (Aug 12, 2021) There are two ways to force a full version of Access to run a front-end file in runtime mode: the /runtime switch and changing the extension to .accdr.
- How to Construct a Bit Mask in VBA: (Aug 16, 2021) What's the safest way to construct a bit mask in VBA? Your preferred approach may be more dangerous than you realize.
- 4 Ways to Automate Sending Emails from Microsoft Access: (Aug 27, 2021) Manually sending a single email from an email client is easy. Automating email sending, by contrast, is deceptively hard.
- CurrentDB and the "Object invalid or no longer set" error: (Oct 6, 2021) Misuse of the CurrentDb function is a common cause of the "Object invalid or no longer set" error. Are you using it safely?
- 4 VBA PowerShell Functions: (Oct 23, 2021) Microsoft Access MVP Daniel Pineault provides four easy-to-use routines for integrating PowerShell with VBA.
- How to Remove the Time Portion From a Date Variable in VBA: (Dec 14, 2021) In this article, I run a series of experiments to explore how different time-stripping approaches work in VBA.
- The IIf() Function vs. The IIf() Statement: (Jan 3, 2022) They may look identical, but there is a very important difference in how they get evaluated.
- Karl's Catalog: A Checklist of Access Best Practices: (Nov 9, 2022) Karl Donaubauer's checklist of Microsoft Access best practices offers a wealth of information to beginners and professional developers alike.
- 5 Types of Settings for Microsoft Access Applications: (Jan 31, 2023) How you store settings in Microsoft Access depends on their scope. Understanding the scope of your settings is critical to ensure you store them the right way.
- Open the Windows Color Dialog from VBA: (Feb 6, 2023) If you need to get Access color values from your users, this is the easiest way to do it.
- Documenting the Import-Export Specification System Tables: (Nov 8, 2023) Documentation of the meaning and typical values that get saved to the Import-Export specification system tables: MSysIMEXSpecs and MSysIMEXColumns.
- Set the Access Application Title Bar to the Full Path of the File at Startup: (Jan 26, 2024) Today's tip helps you keep track of which Access file is which when you have several similar Access files open at the same time.
- ["Leadership" tag page]: Show all articles with the tag "Leadership" (including those where "Leadership" is a secondary tag).
- Leadership Principles: (Oct 19, 2022) If you live by these six principles, it is impossible to fail as a leader.
- Leadership Principle: You Can Delegate Authority But Not Responsibility: (Nov 8, 2022) It's not easy to earn the trust of a "subordinate" who's almost twice your age. It's even harder to do it in a single day.
List Fields
- ["List Fields" tag page]: Show all articles with the tag "List Fields" (including those where "List Fields" is a secondary tag).
-
ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
-
ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
-
ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
Long-Form
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- ListFields() Part 1: Listing Table Fields in the Immediate Window: (Dec 6, 2022) An easy way to reduce context switching between the VBA IDE and the Access application window is to list table field names in the immediate window.
- ListFields() Part 2: An Optional Prefix: (Dec 7, 2022) The ListFields() routine expands to include optional table/alias prefixes for outputting fully qualified field names.
- ListFields() Part 3: Field Details: (Dec 9, 2022) In part 3, we add an optional parameter to the ListFields() function to display the field details in the immediate window.
- ["Long-Form" tag page]: Show all articles with the tag "Long-Form" (including those where "Long-Form" is a secondary tag).
Memory Management
- ["Memory Management" tag page]: Show all articles with the tag "Memory Management" (including those where "Memory Management" is a secondary tag).
-
Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
-
Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
-
Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
-
Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
-
Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
Meta
- ["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.
-
Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
-
Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Large Address Aware Flag: (Nov 16, 2021) Getting a lot of "Out of memory" errors in newer versions of Access? This trick can more than triple your available memory in 32-bit versions of Access.
- Memory Management in VBA: 3 Keys to Avoiding Memory Leaks: (Mar 29, 2022) Managing memory in VBA is a piece of cake, especially if you follow three simple guidelines.
- Virtual vs. Physical Memory in the Context of Microsoft Access: (Nov 23, 2022) Are you noticing more "System Resource Exceeded" and "Out of Memory" errors in newer versions of 32-bit Access? It's not your imagination. Here's what's going on.
- Virtual Machine Memory: An Explainer for Access Developers: (Dec 1, 2022) Virtual machines present an interesting twist when it comes to memory management issues in Microsoft Access.
- Monitoring Memory Usage in a 64-bit Access Application: (Dec 2, 2022) According to the Windows API, my 64-bit Access application uses more than 2 TB (that's *terra*-bytes) of memory. Something tells me that's not right...
- ["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.
- Scaling Back: (Jun 7, 2024) Publishing every day is a grind.
- Comentario: The New Commenting Engine for NoLongerSet.com: (Mar 31, 2025) NoLongerSet.com is migrating from Commento to Comentario for our comment hosting platform. Everything should look the same...but better.
Migration
- ["Migration" tag page]: Show all articles with the tag "Migration" (including those where "Migration" is a secondary tag).
-
Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
-
Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
-
SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
-
Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
Military
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Mystery of the Ancients: (Sep 1, 2021) The Ultimate Guide to Recovering Password-Protected, Access 97 Format .MDB Files
- Convert Common Access Field Defaults to SQL Server: (Apr 21, 2022) Here's the Select Case statement I use to convert common Access field default calculations--Now(), Date(), etc.--to their SQL Server equivalents.
- SQL Server Migration Steps: (Jun 7, 2022) My SQL Server migration philosophy consists of two priorities: (1) Avoid disasters and (2) Minimize production downtime.
- Scripted SQL Server Migrations: (Jun 9, 2022) Use this batch file to automatically backup a database on one instance of SQL Server and restore it on a different instance of SQL Server.
- ["Military" tag page]: Show all articles with the tag "Military" (including those where "Military" is a secondary tag).
Performance Tips
- ["Performance Tips" tag page]: Show all articles with the tag "Performance Tips" (including those where "Performance Tips" is a secondary tag).
-
Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
Presentations
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
-
Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
-
Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
-
Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
-
twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
-
3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
-
¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
-
twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
-
Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
-
Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
-
twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
-
Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
-
clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
-
Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
-
DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
-
DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
-
DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
-
UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
-
Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
-
twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
-
UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
-
Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
-
Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Reader Question: Is it worth running an Access front-end from a RAM disk?: (Oct 19, 2023) Is it worth the complication to run an Access front-end file from within a RAM disk? The answer may surprise you. Or it may not. (Am I doing clickbait wrong?)
- ["Presentations" tag page]: Show all articles with the tag "Presentations" (including those where "Presentations" is a secondary tag).
- Advanced Combo Box Techniques: (Jun 18, 2021) A list of resources and further reading to support my presentation on Advanced Combo Box Techniques.
- Troubleshooting Query Performance: (Mar 17, 2022) A recording of the presentation, a list of resources, and further reading for my presentation on Troubleshooting Query Performance.
- Understanding COM - DevCon 2022: (Apr 28, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, Understanding COM.
- twinBASIC Update - DevCon 2022: (Apr 29, 2022) Links and resources from my talk today at Access DevCon Vienna 2022, twinBASIC: Happy First Birthday!
- 3 Access DevCon 2022 Video Recordings Released: (May 12, 2022) Check out the recordings of my twinBASIC Update, Kevin Bell's new AppLauncher service, and Alessandro Grimaldi's VBA Tips and Tricks.
- ¡twinBASIC Va a Madrid!: (Jun 17, 2022) ¡Hola, Madrid! Muchas gracias a Juanjo Luna por invitarme a hablar en su conferencia anual de Access.
- twinBASIC en Español: (Jun 29, 2022) My presentation on twinBASIC to the Spanish Access User Group is now available on YouTube. Go check it out!
- Building Ribbons in Code: (Jul 6, 2022) A list of resources and further reading to go with my Access User Group presentation on Building Ribbon Interfaces in Code.
- Defensive Programming - DevCon 2023: (Apr 26, 2023) Links and resources from my talk tomorrow at Access DevCon Vienna 2023, Some Bugs are Better than Others: Defensive Programming Tips and Tricks.
- twinBASIC Update: DevCon 2023: (Apr 27, 2023) Links and resources from my talk today at Access DevCon Vienna 2023, twinBASIC + Access: Future Plans.
- Form Templates Presentation to the Denver Area Access User Group: (Jun 15, 2023) A list of resources and further reading for my presentation on Form Templates in Microsoft Access.
- clsImExSpecs Presentation to the Access Europe User Group: (Dec 6, 2023) A list of resources and further reading for my presentation on my custom Import/Export Specifications class module.
- Access Day 2024: The Access Developer's Guide to Version Control: (Mar 15, 2024) A list of resources and further reading for my 2024 Access Day presentation on version control with Microsoft Access.
- DevCon 2024: VBIDE Addin Creation with twinBASIC: (Apr 18, 2024) Links and resources from my talk today at Access DevCon Vienna 2024, Custom VBIDE Addin Creation with twinBASIC.
- DevCon 2024: Version Control with Access: (Apr 19, 2024) A list of resources and further reading for my 2024 DevCon Vienna mini-presentation on version control with Microsoft Access.
- DevCon Vienna 2024 Public Session Recordings: (Apr 30, 2024) Check out the recordings of my twinBASIC Update and Colin Riddington's Advanced Form Designs from Access DevCon Vienna 2024.
- UKAUG 2024: twinBASIC: Past, Present, and Future: (Nov 20, 2024) Links and resources from my talk today at the UK Access User Group 2024 Autumn Conference at the historic University of Oxford.
- Access Day 2025: Outlook COM Automation Alternatives: (Mar 28, 2025) Links and resources from my talk today for J Street Technology's in-person Access Day conference at the mothership (aka, Microsoft Headquarters).
- twinBASIC and AI: DevCon 2025: (Apr 11, 2025) Links and resources from my presentation today on twinBASIC and AI at Access DevCon Vienna 2025.
- UK AUG: Access Development with AI: (Jan 28, 2026) Links and resources for my presentation today to the UK Access User Group.
- Access Day 2026: Long-Term Care for Access: (Mar 27, 2026) Links and resources from my talk today at J Street Technology's in-person Access Day conference at Microsoft Headquarters in Redmond, WA.
- Practical twinBASIC: DevCon 2026: (Apr 17, 2026) Links and resources from my presentation today on twinBASIC at Access DevCon Vienna 2026.
Professional Development
- ["Professional Development" tag page]: Show all articles with the tag "Professional Development" (including those where "Professional Development" 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?
Prompt School
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
-
Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
-
A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
-
Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
-
Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
-
Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
-
Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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?
- ["Prompt School" tag page]: Show all articles with the tag "Prompt School" (including those where "Prompt School" is a secondary tag).
- Reformat an INSERT INTO...VALUES Statement with ChatGPT: (Aug 7, 2023) Let's use ChatGPT to help us debug an SQL INSERT INTO ... VALUES statement by lining up the fields with the values.
- A Simple Trick to Help ChatGPT Provide Correct Answers: (Aug 24, 2023) How you ask ChatGPT to provide a solution can have a profound impact on the correctness of the solution it provides.
- Build Better Prompts with AI: (Sep 28, 2023) Who better to help you improve your AI prompts than AI itself? This meta prompt will help you get better results from your most used prompts.
- Using AI to Explain Unfamiliar Command Lines from the Internet: (Jan 25, 2024) Let's use ChatGPT to explain how complex command lines work.
- Get Max Row by Group with ChatGPT: (Feb 8, 2024) This ChatGPT prompt lets you easily implement Bill Karwin's clever LEFT JOIN solution to a common data selection problem in SQL.
- Understanding Context Length: 5 Techniques for Maximizing AI Chat Effectiveness: (Jan 29, 2025) Context length affects every AI chat session, but few developers know how to manage it effectively. Learn these essential strategies to improve your AI-assisted development work.
Quick Tip
- ["Quick Tip" tag page]: Show all articles with the tag "Quick Tip" (including those where "Quick Tip" is a secondary tag).
-
Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
-
Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
-
Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
-
Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
-
Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
-
Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
-
Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
-
Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
-
Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
-
How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
-
Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
-
Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
-
Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
-
QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
-
HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
-
Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
-
QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
-
Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
-
Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
Quotes
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
-
Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
-
Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
-
"Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Quick Tip: Emoji Lookup in Windows: (Oct 28, 2021) Looking for the fastest way to look up and insert emojis in Windows? This shortcut makes it quick and easy.
- Quick Tip: Alt Codes in Windows: (Nov 6, 2021) Checkmarks, bulleted lists, section symbols, pi, daggers, copyrights, etc. Each of these symbols can be entered in Windows using an easy keyboard shortcut.
- Inserting a Blank Line in the VBA Immediate Window: (Feb 3, 2022) Did you know you can insert a newline character in the Immediate Window without executing the current line of code?
- Quick Tip: Force IntelliSense to Appear When Writing VBA: (Feb 18, 2022) Does the IntelliSense dropdown ever disappear when you're writing VBA? Do you backspace and re-type the dot to get it back? There's a better way.
- Preventing Line Break After Debug.Print Statement: (Mar 1, 2022) Every time you call Debug.Print in VBA it outputs to a new line in the Immediate Window. ... But what if it didn't?!?!
- Shortcut Key to Comment/Uncomment Blocks of Code in VBA: (Apr 18, 2022) You don't need 3rd-party tools to add keyboard shortcuts for commenting and uncommenting code blocks in VBA with this trick.
- Quick Tip: Set Next Statement with Mouse: (May 5, 2022) Try this tip the next time you use the Edit & Continue feature when debugging. After more than 15 years of developing VBA, I'm still learning new things.
- Adding References from VBA: (Aug 25, 2022) Did you ever wish you could bypass the Tools > References dialog entirely when adding references in Access? Automate the process with some simple VBA.
- Micro-Efficiency: Duplicating Line(s) of Code in VBA: (Jan 17, 2023) With this technique, you'll save enough time to steal two and a half extra glances at your watch each day. Use it wisely.
- How to Duplicate a Line of Code in VBA: (Jan 18, 2023) It's not quite a single shortcut key, but it's nearly as efficient.
- Quick Tip: 4 Ways to Select the Bottom Control in a Stack: (Jan 30, 2023) There are many situations that call for two (or more) controls to be stacked on top of each other. In those situations, how does one select the bottom control?
- Quick Tip: Code Comment Breadcrumbs: (May 26, 2023) This quick tip is a great way to boost the signal-to-noise ratio of your code without sacrificing valuable context from your decision-making process.
- Quick Tip: Preventing Accidental Double-Clicks: (May 31, 2023) Pop quiz, hotshot: What would happen if a user double-clicked every button in your Access application? Would there be any unintended consequences?
- QuickTip: Navigation Captions: (Jan 22, 2024) Even after 17 years of developing in Microsoft Access, I'm still learning about features that have been there the whole time...
- HOW TO: Access the Windows Startup Folder: (Feb 2, 2024) In previous versions of Windows, the Startup folder was easy to find from the Start Menu. This quick tip makes the Startup folder easy to find again.
- Clearing the Windows 10 "White Bar of Doom": (Feb 6, 2024) A quick fix for the "White Bar of Doom" that occasionally appears on maximized windows in Windows 10. No reboot required!
- QuickTip: Reproducible SELECT Results: (Apr 2, 2024) Reproducing behavior is the essential first step to debugging problems. Save yourself future SQL debugging headaches with this quick tip.
- Quick Tip: Connect Multiple Outlook Accounts to Zapier: (Apr 9, 2024) Automatic login is convenient most of the time, but it can be frustrating when trying to configure multiple accounts for Zapier application integrations.
- Quick Tip: Instant Find in the VBA IDE: (May 1, 2024) Somehow I went more than 20 years writing code in VBA without knowing about this handy shortcut key.
- ["Quotes" tag page]: Show all articles with the tag "Quotes" (including those where "Quotes" is a secondary tag).
- Byte-Sized Wisdom: Debugging: (Mar 14, 2023) You know what debugging is like? Debugging is like...
- Byte-Sized Wisdom: Testing: (Mar 4, 2024) All software is tested...
- "Lead Generation is a Misnomer": (May 9, 2024) "We don't generate leads, we intercept opportunity."
Reader Challenge
- ["Reader Challenge" tag page]: Show all articles with the tag "Reader Challenge" (including those where "Reader Challenge" is a secondary tag).
-
Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
-
Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
-
Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
-
Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
-
Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
-
Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
-
Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
-
Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
Recap
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
-
Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
-
Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
-
Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
-
Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Reader Challenge: Write a Formula to Calculate Gift Totals in "The Twelve Days of Christmas": (Dec 21, 2022) How many total gifts does one's true love deliver by the nth day of Christmas? It's a deceptively tricky problem to solve.
- Calculating Gift Counts for "The Twelve Days of Christmas": Looping Edition: (Dec 22, 2022) In the first solution to my recent reader challenge, I use a loop to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
- Calculating Gift Counts for "The Twelve Days of Christmas": Recursion Edition: (Dec 23, 2022) In the second solution to my recent reader challenge, I use recursion to calculate the cumulative number of gifts given for each day of the "12 Days of Christmas."
- Reader Challenge: Einstein's Five-House Logic Problem: (May 24, 2023) In part 1 of this series, I introduce a classic logic problem that took me nearly two hours to solve by hand. Later in the series, we'll use Access to program a solution.
- Solving the Five-House Logic Problem by Hand: (May 25, 2023) In this follow-up to my post on the classic Five-House Logic Problem, I provide the solution to the riddle plus a few tips for finding it.
- Logic Puzzle Solution Part 1: The oNeighborhood Class Module: (May 29, 2023) In part 1 of my Access solution for the five-house logic problem, I demonstrate the class module I used to model a neighborhood configuration.
- Logic Puzzle Solution Part 2: Testing the neighborhood Class Module: (May 30, 2023) In part 2 of my Access solution for the five-house logic problem, we test the neighborhood class module.
- Logic Puzzle Solution Bonus: SQL Server Edition: (Jun 5, 2023) Reader Johann Preissl writes in with a pure T-SQL solution to the Five-House Logic Puzzle. No tables or VBA required!
- Logic Puzzle Solution Part 3: Counting the Possible Configurations: (Jul 28, 2023) When I first read through the five-house logic puzzle, I kept thinking, "I should just brute force this thing." I was so naive...
- ["Recap" tag page]: Show all articles with the tag "Recap" (including those where "Recap" is a secondary tag).
- Access Dev Team Progress Update: New Web Browser Control: (Nov 21, 2022) The Access team offers a sneak peek at the upcoming Edge-based browser control. Highlights include an estimated release date and future migration challenges.
- Access Dev Team Progress Update: VBA Macro Code Signing: (Nov 25, 2022) The Access team offers a sneak peek at the new and improved VBA code signing experience. The feature is in public beta, and Microsoft is looking for testers.
- Access Dev Team Progress Update: Dataverse Export Improvements: (Nov 28, 2022) The Access team provides an update on impending improvements to the Dataverse export feature.
- Microsoft MVP Summit 2024: Top Takeaways for Access Developers: (Mar 21, 2024) From new Access features to VBScript deprecation and the coming end of VBA in Outlook, here's what you need to know from the 2024 MVP Summit.
Report Builder
- ["Report Builder" tag page]: Show all articles with the tag "Report Builder" (including those where "Report Builder" is a secondary tag).
-
Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
-
Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
-
Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
-
Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
Reports
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
-
Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
-
Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
-
OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
-
The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
-
Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
-
Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
-
PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
-
Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
-
Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
-
Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
-
Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
-
HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Advanced Report Builder: (Oct 18, 2023) Announcing a new cookbook-style series of advanced articles focused on creating a custom report builder in Microsoft Access.
- Advanced Report Builder Form: (Oct 20, 2023) This is a reference for my Advanced Report Builder form. The form is broken down into eight sections with links to articles explaining each one.
- Report Builder: The Local ReportControls Table: (Oct 23, 2023) A description of the local table that serves as the foundation for my Advanced Report Builder.
- Report Builder: The Reports & Templates Tables: (Oct 25, 2023) A description of the tables used to store built-in and user-created report templates for use with my Advanced Report Builder.
- ["Reports" tag page]: Show all articles with the tag "Reports" (including those where "Reports" is a secondary tag).
- Report Annoyances: (Mar 10, 2021) Five things I hate about the default behavior of DoCmd.OpenReport.
- Previewing Reports: (Mar 11, 2021) That sound of your printer warming up means you forgot the acViewPreview flag again. You're better off avoiding DoCmd.OpenReport entirely.
- OpenReport Shows Wrong Data: (Mar 12, 2021) Calling DoCmd.OpenReport on a report that's already open will not update the filtering on the report. You have to close it first.
- The 'OpenReport' Action Was Canceled: (Mar 13, 2021) Does it annoy you that using the Report NoData event as Codd intended results in a runtime error? Because it annoys me.
- Avoid the Cascading Maximize: (Mar 14, 2021) Prevent a full screen report from forcing the calling form to be maximized with this clever workaround.
- Future Compatibility: (Mar 15, 2021) Use this trick to support future functionality while still getting your code to compile in older versions of Access.
- PreviewReport Function: (Mar 16, 2021) This custom function is the simplest and safest way to preview reports in any Microsoft Access application.
- Access Shape Drawing Reference: (Jul 5, 2022) With a bit of creativity, you can draw just about anything on an Access report. Everything you need to know is in Crystal Long's definitive guide.
- Using Temp Tables as Report Record Sources: (Nov 4, 2022) If you're having trouble building a query to run a complex report, you may be better off populating a temp table and using that as your report's record source.
- Detect if an Access Report is in Preview Mode, Report Mode, or Being Sent to the Printer: (Feb 21, 2023) How do you know if a user is viewing a report on screen or if they sent it to the printer? With this simple technique from Access MVP, Karl Donaubauer.
- Never Forget to Set Your Report Caption Again: (Mar 6, 2023) With this trick, it's nearly impossible to forget to set your report's Caption property in Microsoft Access.
- HELP! My Access Report is Missing Information When my Users Run It: (May 12, 2023) Your Access report runs fine on your computer, but it's broken when an end user runs it. What gives?
Ribbon
- ["Ribbon" tag page]: Show all articles with the tag "Ribbon" (including those where "Ribbon" is a secondary tag).
-
Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
-
Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
-
XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
-
Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
Risk Management
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Icon Dimensions in the Office Ribbon: (Feb 4, 2022) Custom ribbon icons look sharpest when they are displayed at their native resolution.
- Office Ribbon Development Resources: (Jun 22, 2022) Links to resources and ribbon builders for VBA developers who want to add a professional touch to their applications with custom ribbon interfaces.
- XML Callbacks: Adding Functionality to the Office Ribbon: (Jun 23, 2022) To unlock the full potential of the Microsoft Office ribbon, you need to understand the role of callback functions. This quick intro will get you started.
- Setting the Ribbon Name in Code: (Jun 28, 2022) You don't need to use the options dialog to set a custom ribbon for your Microsoft Access application.
- ["Risk Management" tag page]: Show all articles with the tag "Risk Management" (including those where "Risk Management" 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.
Series
- ["Series" tag page]: Show all articles with the tag "Series" (including those where "Series" is a secondary tag).
ShowForm
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
-
Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
-
Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
-
Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
-
Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
-
Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
-
Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- ["ShowForm" tag page]: Show all articles with the tag "ShowForm" (including those where "ShowForm" is a secondary tag).
- Evolution of a Function: ShowForm(): (Jul 11, 2023) Code is a living thing. Letting it grow organically over time helps ensure that you get exactly the features you need. My ShowForm() function is a prime example.
- Evolution of a Function: ShowForm() Part 1: (Jul 12, 2023) Part 1 of the ShowForm function is an MVP (minimum viable product) which is little more than a convenience function wrapper around DoCmd.OpenForm.
- Evolution of a Function: ShowForm() Part 2: (Jul 13, 2023) As our ShowForm function evolves, we introduce a very basic capability to create and manage multiple form instances.
- Why Creating Multiple Copies of a Form Is Bad Practice: (Jul 18, 2023) Creating multiple *instances* of a single form may seem like more work than just making multiple *copies* of a form, but it's an investment worth making.
- Evolution of a Function: ShowForm() Part 3: (Jul 25, 2023) As our ShowForm function continues to evolve, we begin refactoring and addressing several shortcomings of our earlier efforts.
- Evolution of a Function: ShowForm() Part 4: (Jul 26, 2023) Years of real-world usage revealed edge cases that required bug fixes in our function. This is why Joel Spolsky says old code is better than new.
Signal vs. Noise
- ["Signal vs. Noise" tag page]: Show all articles with the tag "Signal vs. Noise" (including those where "Signal vs. Noise" is a secondary tag).
-
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.
Simple vs. Easy
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
-
Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
-
VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- 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.
- ["Simple vs. Easy" tag page]: Show all articles with the tag "Simple vs. Easy" (including those where "Simple vs. Easy" is a secondary tag).
- Making the Complex Simple: Aquaponics Edition: (Sep 27, 2021) The most impressive software project any of my job applicants had written produced only a single, numeric output.
- VBA: A Simple Programming Language: (Oct 14, 2022) VBA is a simple programming language. But is that really such a bad thing?
SQL
- ["SQL" tag page]: Show all articles with the tag "SQL" (including those where "SQL" is a secondary tag).
-
Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
-
When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
-
Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
-
T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
-
SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
-
Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
-
HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
SQL Azure
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
-
SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
-
SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
-
Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
-
Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Finding Duplicate People by Date of Birth: (Nov 5, 2021) Let's explore the GROUP BY syntax with an exercise in identifying duplicate records in a Person table.
- When to Use Right Outer Joins in SQL: (Dec 24, 2021) What's the difference between a RIGHT JOIN and a LEFT JOIN and why use one versus the other?
- Fixing Circular References in Access Queries: (Feb 1, 2022) Did you get the error message, "Circular reference caused by alias 'MyField' in query definition's SELECT list"? Don't worry; it's an easy fix!
- T-SQL ISNULL() vs. VBA IsNull() vs. Jet IS NULL vs. Access VBA Nz(): (Apr 15, 2022) How do I check thee for NULL? Let me count the ways.
- SQL Gotcha: When an OUTER JOIN Accidentally Becomes an INNER JOIN: (Jun 2, 2022) If you apply a WHERE filter directly to the OUTER JOIN side of a query you will effectively turn it into an INNER JOIN.
- Efficient Querying: Finding Maximum Values for Each Distinct Value in a Column: (Apr 12, 2023) A high-performance alternative to subqueries for solving a tricky query problem.
- HOW TO: Make Backward-Compatible Changes to SQL SELECT Queries: (Jan 2, 2024) The `AS` keyword in SQL allows you to replace table fields with calculated columns while retaining the original name.
- ["SQL Azure" tag page]: Show all articles with the tag "SQL Azure" (including those where "SQL Azure" is a secondary tag).
- SQL Azure for Access Developers: (Jan 17, 2022) If you've been thinking about migrating some of your Access application data to SQL Azure, this series of articles is for you.
- SQL Azure Pricing Overview: (Jan 19, 2022) Figuring out SQL Azure pricing is straightforward. As in, it's just as pleasant as if you were to drive your car straight forward into a wall.
- Creating Your First Azure SQL Database: The Basics: (Jan 21, 2022) Part 2 in my series on SQL Azure for Access Developers takes you step-by-step through the process of creating a new Azure SQL Database.
- Configuring Firewall Settings on Azure SQL Server: (Jan 24, 2022) The simplest way to configure access to Azure SQL Server is via IP4-based firewall rules. We'll explore the pros and cons of a few different approaches.
SQL Server
- ["SQL Server" tag page]: Show all articles with the tag "SQL Server" (including those where "SQL Server" is a secondary tag).
-
Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
-
All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
-
Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
-
Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
-
SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
-
Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
-
Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
-
ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
-
Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
-
Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
-
Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
-
Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
-
Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
-
UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
-
Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
-
Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
-
Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
-
Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
-
Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
-
Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
-
3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
-
Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
-
How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
-
SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
-
Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
-
Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
-
Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
-
IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
-
Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
-
How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
-
Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
-
HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
-
Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
-
5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
-
Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
-
Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
-
B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
-
How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
-
Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
-
Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
-
Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
-
'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
Subforms
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Peeking Under the Hood: (Oct 15, 2020) Don't let these gotchas trip you up when using SQL Server as a backend for Microsoft Access.
- All Hail Ola!: (Nov 12, 2020) If you're managing SQL Server and you're not using Ola Hallengren's scripts, then you're doing it wrong.
- Cloning a SQL Server Database: (Nov 13, 2020) The fastest, simplest, and cheapest way to clone a SQL Server database for debugging or testing. Even works with SQL Server Express!
- Tuning Access Query Performance: (Nov 15, 2020) The four best tools/techniques for tuning Access query performance: JetShowPlan, Process Monitor, TraceSQLMode, and SQL Profiler.
- SQL Server Read-Only Mode: (Jan 1, 2021) Before running a final data migration, you want to ensure no further changes will be made to the old data. One way to do that is to set the database to read-only.
- Working around the "Reboot Required" error when installing SQL Server: (Jan 3, 2021) A previous installation required a reboot... To proceed, [uninstall ODBC Driver 17,] restart your computer and then run Setup again.
- Yes/No Fields in SQL Server: (Jan 4, 2021) The SQL Server equivalent of an Access Yes/No field is the "bit" data type. Or is it?
- ODBC Driver 17 Prevents SSMS Install: (Jan 26, 2021) 3 steps to fix SSMS installation error 0x80070643: (1) Uninstall ODBC Driver 17; (2) Restart the machine; (3) Rerun the installer
- Playing Telephone with SQL Server: (Jan 27, 2021) You won't believe how Access and SQL Server actually talk to each other. You're going to need to see this for yourself.
- Role-based SQL Server Security: (Jan 30, 2021) There are many reasons to implement SQL Server roles even if you use Windows Authentication with Active Directory security groups.
- Securing Access and SQL Server: (Feb 9, 2021) Wherein Anders Ebro demonstrates how easy it is to circumvent application-level security in an Access program.
- Brent Ozar: Date Table Fan: (Mar 1, 2021) Brent Ozar, legendary SQL Server guru, makes his case for using a "Date Table." The video is all done in T-SQL, but the concepts apply equally to ACE backends.
- Setting SQL Server Field Descriptions: (May 26, 2021) There are two basic ways to set field descriptions in SQL Server: via SSMS and T-SQL. Let's explore both.
- UPSERT a Column Description in SQL Server: (May 27, 2021) Let's combine the stored procedures to Update and Insert SQL Server field comments into a single, all-encompassing solution.
- Setting Field Descriptions on Linked SQL Server Tables: (May 28, 2021) What good are field descriptions in SQL Server if you don't see them in your Access front-end? Here's some code to bring those comments forward into Access.
- Pushing Field Comments to SQL Server: (Jun 1, 2021) A VBA routine that takes field comments from a front-end linked table and pushes them to the corresponding back-end table in SQL Server.
- Trust But Verify: (Sep 4, 2021) What Ronald Reagan's Words Can Teach Us About the Sample Code We Find on the Internet
- Linking to SQL Server Date Fields from Microsoft Access: (Sep 18, 2021) I always avoided SQL Server's DATE type in favor of the DATETIME type's better compatibility with MS Access. A newer ODBC driver has me changing my mind.
- Floating Point Arithmetic in VBA vs. SQL Server: (Sep 23, 2021) VBA and SQL Server do not perform floating-point operations the same way. Being aware of this difference could save you hours of frustration someday.
- Unit Testing Tool for SQL Server: (Sep 28, 2021) This open-source database unit testing tool should help make test-driven database development easier to manage.
- 3 Gotchas of the SQL BETWEEN Statement: (Dec 10, 2021) The SQL BETWEEN statement produces very readable condition expressions. But developers of all skill levels can still get into trouble with it.
- Quick Way to Troubleshoot SQL Server ADO Connections: (Dec 21, 2021) This simple trick provides you with plenty of clues when debugging a failed SQL Server connection on a user's computer.
- How Access Reads Data From SQL Server: (Feb 16, 2022) How does Microsoft Access pull data from SQL Server? You'll be amazed when we pull back the curtain to expose how Access interacts with SQL Server.
- SQL Server Connectors in 2022: (Feb 19, 2022) To get access to the latest features--especially security features--be sure you're using the latest ADO provider and ODBC driver for SQL Server.
- Editing Data Directly in SSMS: (Mar 4, 2022) Query results in SQL Server Management Studio are read-only by default. Follow these steps to edit SQL Server table data directly inside SSMS.
- Making Sense of SQLOUT.TXT: (Mar 9, 2022) You've enabled ODBC Trace SQL Mode and created a sqlout.txt file. But do you know what to do with it now? Let's explore.
- Save $3,500 by Creating Scheduled Backups Using SQL Server Express: (Apr 6, 2022) You don't need to spend big bucks to get automated database backups with SQL Server. This simple step-by-step process is nearly foolproof.
- IIF ... IS NULL vs. Nz(): Testing a Hypothesis: (May 13, 2022) Which is better in a WHERE clause: IIf...Is Null or Nz()? Or is there a third option that's better than both of those?
- Advanced Server-Side SQL Server Query Troubleshooting: (May 16, 2022) The XEvent Profiler in SSMS is a powerful troubleshooting tool, but what happens when the standard sessions are not enough? We need to customize...
- How to Install SQL Server on a Read-Only Domain Controller (RODC): (May 18, 2022) The official Microsoft documentation says it's not possible, but with a little ingenuity and poor judgment, we can get SQL Server to run on an RODC.
- Deleting a Large Number of Records in SQL Server: (May 24, 2022) Let's explore four options--two bad and two good--for deleting one million or more records from a single SQL Server table.
- HOW TO: Automate Batch Deletion of SQL Server Records: (May 25, 2022) Using a single DELETE statement to remove 20 million+ records from SQL Server is a bad idea. Here's a better approach.
- Epoch Differences Between VBA and SQL Server: (Dec 16, 2022) Do you have unexplained dates of December 30, 1899 in your SQL Server database? VBA's epoch (i.e., zero date) could be the culprit.
- 5 Tips for Making Changes on Live SQL Server Databases: (Jan 12, 2023) Making database changes on production? These 5 tips will make one of the most dangerous programming activities a little bit safer.
- Updating Linked SQL Server Views in Access When Changing the Underlying Table Data Types: (Mar 1, 2023) If you change the data type of a table field in SQL Server, follow these steps to be sure all related views are updated in Microsoft Access.
- Installing Multiple Versions of SQL Server Side-by-Side on a Development Machine: (Apr 11, 2023) Save resources by setting additional instances of SQL Server to Manual startup. Use Process Explorer to grant Start/Stop permissions for an individual service.
- B-BEAR: Quick and Dirty SQL Server Testing: (Apr 14, 2023) Begin, Before, Execute, After, Rollback. This technique makes testing your SQL Server statements a snap.
- How to Use the ADO NextRecordset Method: (May 3, 2024) The ADO .NextRecordset method allows you to handle multiple result sets from a single SQL Server stored procedure.
- Creating a Header Row in Excel from an ADO Recordset: (May 7, 2024) In this followup to my ADO .NextRecordset article, we explore how to create Excel column headers from recordset field names.
- Resolving SQL Server "Login Failed" Error for Recreated Active Directory Users: (Aug 16, 2024) When is the same person not the same person? Let's explore an unexpected fix for SQL Server 'Login Failed' errors when credentials seem correct.
- Using PRINT to Improve Safety of Live SQL Server Updates: (Oct 15, 2024) [Me]: Let's DELETE 5 records. [SSMS]: (7,393,253 rows affected) [Me]: {Updates LinkedIn profile: "#OPENTOWORK"} Avoid nasty SQL surprises with this easy technique.
- 'np:' and '\pipe\' Explained: A Guide for Access Developers: (Feb 28, 2025) Your practical guide to Named Pipes connections, especially common in legacy .ADPs, with step-by-step tips for local development setup.
- ["Subforms" tag page]: Show all articles with the tag "Subforms" (including those where "Subforms" is a secondary tag).
Subs vs. Functions
- ["Subs vs. Functions" tag page]: Show all articles with the tag "Subs vs. Functions" (including those where "Subs vs. Functions" is a secondary tag).
-
Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
-
Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
-
Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
-
How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
-
Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
-
Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
-
Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
-
Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
-
Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
-
Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
Technical Debt
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
-
Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
-
Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
-
Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
-
Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
-
Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
-
Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
-
Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Subs vs. Functions in VBA: (Feb 7, 2023) What is the difference between a Sub and a Function and why would you use one or the other? I'll give you the short answer...and then we can explore the long answer.
- Why Use Subs at All?: (Feb 8, 2023) Almost every Sub could be a Function...but that doesn't mean it's a good idea.
- Every Function Has a Return Type: (Feb 9, 2023) Every Function in VBA has a return type even if you don't explicitly define one. In fact, there are *FOUR* different ways to declare function return types.
- How to Return Values from a Sub in VBA: (Feb 10, 2023) You can "return" values from a Sub via a parameter passed by reference. What does that look like and when should you use it? Let's explore.
- Event Handlers in Microsoft Access VBA: (Feb 13, 2023) You need event handlers to write event-driven code. This tutorial will help new users get up to speed and may even teach seasoned pros a thing or two.
- Calling VBA Functions from the Form or Report Property Sheet: (Feb 15, 2023) There are two basic ways to handle events in Microsoft Access: via {Event Procedure] Event Handlers (i.e., Subs) and Function calls from the Property Sheet.
- Using ByRef to Return Multiple Values from a Sub (or Function): (Feb 23, 2023) You can "return" multiple values from a VBA procedure by passing your arguments by reference.
- Returning Multiple Values from a Function in VBA Using a UDT: (Feb 24, 2023) You can return multiple values from a VBA procedure by using a simple User Defined Type (UDT). Though, some situations require a "complex" UDT.
- Every Function in VBA Returns a Value: (Mar 10, 2023) Whether you assign one explicitly or not, every function in VBA has a return value.
- Returning Values By Reference in Ribbon Callbacks: (Mar 17, 2023) To return a value from a ribbon callback, you need to pass the value back to the calling procedure using an argument that has been passed by reference.
- ["Technical Debt" tag page]: Show all articles with the tag "Technical Debt" (including those where "Technical Debt" is a secondary tag).
- Old Code Left in Place: (Jan 17, 2021) What's the harm in leaving old code in place? It's not like it costs us anything. ... Or does it?
- Old Fields Left in Place: (Jan 18, 2021) Leaving old fields in place is even worse than leaving old code. Instead of runtime errors, you'll end up with harder-to-detect data errors.
- Denormalized Database Tables: (Jan 19, 2021) Normalize your database tables to avoid technical debt.
- Coding Before Designing: (Jan 20, 2021) Weeks of coding can save hours of planning.
- Overuse of Global State: (Jan 21, 2021) You wouldn't control the water temperature in your entire house from a single location. Why would you write your code that way?
- Overly Clever Code: (Jan 22, 2021) Keep It Simple, Stupid
- Storing Local Table Data in a Front-End Access Application: (Oct 26, 2021) If you're thinking about storing local data in your front-end Access application, make sure it follows these 4 ground rules.
TempVars
- ["TempVars" tag page]: Show all articles with the tag "TempVars" (including those where "TempVars" is a secondary tag).
-
A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
-
TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
-
Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
-
Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
-
Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
-
tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
-
GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
Testing
- ["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.
-
Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
-
Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- A Safer Way to Use TempVars: (Sep 20, 2022) The TempVars object is an intriguing alternative to traditional global variables, but it has some shortcomings. Here's one way to work around them.
- TV: The TempVars Class Module: (Sep 21, 2022) A TempVars class module that provides visibility, type safety, IntelliSense, and compile-time typo checks.
- Beware TempVars in Queries: (Sep 22, 2022) Many Access users rave about using TempVars with queries. I decided to see what the hype was about. What I found shocked me.
- Safely Using TempVars in Queries: (Sep 23, 2022) Calling TempVars directly from a query can cause issues. Instead, use this simple wrapper function to save yourself some potential headaches.
- Populating a List Box with the TempVars Collection: (Sep 27, 2022) If you use TempVars in your Microsoft Access applications, this handy function will bring visibility to the contents of that collection.
- tblTempVar: Creating and Populating a Table of TempVars: (Sep 28, 2022) These three simple procedures: (1) create, (2) populate, and (3) create/delete + populate a local table with the contents of the TempVars collection.
- GenerateTVClass(): Auto-Create a TempVars Class Module: (Oct 21, 2022) The culmination of my TempVars series, this article shows you how to generate a TempVars class module from a local table.
- ["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.
- Creating a Low-Privileged Local User for SQL Server Testing: (Mar 22, 2023) It can be difficult to test how an Access application with a SQL Server backend behaves for a low-privileged user. Creating such a user account is step one.
- Testing Non-Privileged Access to SQL Server During Development: (Mar 23, 2023) How to use the runas command and a local user account to test non-privileged access to SQL Server.
Text-To-Speech
- ["Text-To-Speech" tag page]: Show all articles with the tag "Text-To-Speech" (including those where "Text-To-Speech" is a secondary tag).
-
Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
Throwback Thursday
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
-
Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
-
Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
-
Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
-
Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
-
Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
-
Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
-
Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
-
Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
-
Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
-
Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
-
Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
-
Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
-
Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
-
Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
-
Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
-
Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
-
Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
-
Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
-
Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
-
Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
-
Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
-
Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
-
Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
-
Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
-
Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
-
Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
-
Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
-
Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
-
Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
-
Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
-
Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
-
Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
-
Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
-
Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
-
Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
-
Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
-
Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
-
Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
-
Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
-
Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
-
Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
-
Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
-
Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
-
Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
-
Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
-
Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
-
Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
-
Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
-
Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
-
Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
-
Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
-
Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
-
Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
-
Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
-
Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
-
Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
-
Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
-
Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
-
Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
-
Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
-
Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
-
Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
-
Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
-
Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
-
Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
-
Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
-
Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
-
Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
-
Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
-
Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
-
Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
-
Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
-
Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
-
Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
-
Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
-
Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
-
Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
-
Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
-
Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
-
Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
-
Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
-
Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
-
Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
-
Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
-
Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
-
Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
-
Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
-
Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
-
Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
-
Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
-
Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
-
Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
-
Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
-
Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
-
Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
-
Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
-
Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
-
Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- Reading Text Aloud in Microsoft Access: (Jan 7, 2022) Want a quick way to get started with Text-to-Speech in your VBA application? This 4-line method gets the job done and requires no references!
- ["Throwback Thursday" tag page]: Show all articles with the tag "Throwback Thursday" (including those where "Throwback Thursday" is a secondary tag).
- Throwback Thursday: June 13, 2024: (Jun 13, 2024) In this inaugural installment of Throwback Thursday, we focus on the intersection of programming, business, and careers (plus some classic XKCD).
- Throwback Thursday: June 20, 2024: (Jun 20, 2024) Today's edition of Throwback Thursday is all about query tuning in Microsoft Access.
- Throwback Thursday: June 27, 2024: (Jun 27, 2024) Today's edition of Throwback Thursday is all about naming things, one of the two hard problems in computer science.
- Throwback Thursday: July 4, 2024: (Jul 4, 2024) Happy Independence Day, America! (Or as my family in Scotland prefers to greet us on this glorious anniversary, "Happy Treason Day, you ungrateful colonists.")
- Throwback Thursday: July 11, 2024: (Jul 11, 2024) For those new to databases (and seasoned pros), queries are a mind-bogglingly amazing and infuriatingly obstinate tool. These tips help tame the beast.
- Throwback Thursday: July 18, 2024: (Jul 18, 2024) Today's edition is all about Unicode, character sets, and Windows Alt Codes. It turns out English is NOT the world's only written language. Who knew?!?!
- Throwback Thursday: July 25, 2024: (Jul 25, 2024) Today's edition of Throwback Thursday is all about the dangers of password reuse and a couple of tools to help you avoid the temptation.
- Throwback Thursday: August 1, 2024: (Aug 1, 2024) Today's edition of Throwback Thursday explores the paradox of reliable software: better software -> increased user trust -> more potential for harm.
- Throwback Thursday: August 8, 2024: (Aug 8, 2024) Today's edition of Throwback Thursday is all about pricing and estimating custom software development work.
- Throwback Thursday: August 15, 2024: (Aug 15, 2024) Teach your VBA editor new tricks: dark mode, a shortcut key for commenting blocks of code, and a probably-too-clever block-comment syntax.
- Throwback Thursday: August 22, 2024: (Aug 22, 2024) Today's edition is all about controlling how and where Access forms open on your screen.
- Throwback Thursday: August 29, 2024: (Aug 29, 2024) Today's edition of Throwback Thursday is all about how Access talks to SQL Server. It's much chattier than you realize.
- Throwback Thursday: September 5, 2024: (Sep 5, 2024) How do non-programmers become Access developers? We explore a common career arc in today's edition of Throwback Thursday.
- Throwback Thursday: September 12, 2024: (Sep 12, 2024) Today's edition of Throwback Thursday highlights my three most-used string functions: Conc(), Qt(), and Parse(), used to join words, quote words, and extract words.
- Throwback Thursday: September 19, 2024: (Sep 19, 2024) In today's edition of Throwback Thursday, I revisit the one VBA add-in I can't live without: vbWatchdog.
- Throwback Thursday: September 26, 2024: (Sep 26, 2024) Short on time? In today's edition of Throwback Thursday, we explore a few of my favorite articles in my Under 100 series--complex topics explained in under 100 words.
- Throwback Thursday: October 3, 2024: (Oct 3, 2024) In today's edition of Throwback Thursday, we revisit a few of my favorite techniques to keep out of trouble when debugging code and editing live data.
- Throwback Thursday: October 10, 2024: (Oct 10, 2024) In today's edition of Throwback Thursday, we address Access consultants' biggest fear: the dreaded software proposal.
- Throwback Thursday: October 17, 2024: (Oct 17, 2024) Today's edition of Throwback Thursday is all about one of my two favorite programming books: "Code That Fits in Your Head," by Mark Seemannn.
- Throwback Thursday: October 24, 2024: (Oct 24, 2024) In today's edition of Throwback Thursday, we demystify the WithEvents keyword in VBA and then dive deep into some practical uses for it.
- Throwback Thursday: October 31, 2024: (Oct 31, 2024) In today's edition of Throwback Thursday, we revisit my RegEx wrapper functions for VBA, while looking ahead to a future without VBScript.dll.
- Throwback Thursday: November 7, 2024: (Nov 7, 2024) Follow along to see how I used Test-Driven Development to replace hard-coded holiday dates with a robust, history-aware date engine in today's edition of Throwback Thursday.
- Throwback Thursday: November 14, 2024: (Nov 14, 2024) In today's edition of Throwback Thursday, we explore a topic near and dear to my heart: Version Control with Microsoft Access.
- Throwback Thursday: November 21, 2024: (Nov 21, 2024) In today's edition of Throwback Thursday, we revisit my annual twinBASIC talks at DevCon Vienna in honor of my presentation to the UK Access User Group yesterday.
- Throwback Thursday: November 28, 2024: (Nov 28, 2024) Discover three mindset shifts that can transform you from a developer into a high-value consultant in today's edition of Throwback Thursday.
- Throwback Thursday: December 5, 2024: (Dec 5, 2024) Learn how to enhance TempVars with type safety, IntelliSense, and compile-time checking in today's edition of Throwback Thursday.
- Throwback Thursday: December 12, 2024: (Dec 12, 2024) Check out my three most-used everyday tools in today's edition of Throwback Thursday.
- Throwback Thursday: December 19, 2024: (Dec 19, 2024) How do you loop by month in VBA? Coding it clearly is surprisingly difficult. We explore several approaches in today's edition of Throwback Thursday.
- Throwback Thursday: December 26, 2024: (Dec 26, 2024) In today's edition of Throwback Thursday, we tackle every programmer's favorite topic: Technical Debt.
- Throwback Thursday: January 2, 2025: (Jan 2, 2025) In today's edition of Throwback Thursday, we revisit some of my favorite Allen Browne-inspired articles.
- Throwback Thursday: January 9, 2025: (Jan 9, 2025) Today's edition of Throwback Thursday is all about the DoEvents function: What it is; Where to use it; When to use it; Why it works; and How it works.
- Throwback Thursday: January 16, 2025: (Jan 16, 2025) We explore the value of learning other programming languages and incorporating elements from them into VBA in today's edition of Throwback Thursday.
- Throwback Thursday: January 23, 2025: (Jan 23, 2025) We dive into the difference between IIf() and IIf()--that's not a typo--in today's edition of Throwback Thursday.
- Throwback Thursday: January 30, 2025: (Jan 30, 2025) In today's edition of Throwback Thursday, we dive into one of my core programming principles: some bugs are better than others (with a "real-life" lesson from Office Space).
- Throwback Thursday: February 6, 2025: (Feb 6, 2025) We dive into the deep end of debugging VBA in today's edition of Throwback Thursday. We cover the Watch window, including how to avoid some nasty performance side effects.
- Throwback Thursday: February 13, 2025: (Feb 13, 2025) In today's edition of Throwback Thursday, we explore the greatest gift we can give to future programmers: writing readable code.
- Throwback Thursday: February 20, 2025: (Feb 20, 2025) In today's edition of Throwback Thursday, we explore a few of my favorite AutoHotkey scripts for Access development.
- Throwback Thursday: February 27, 2025: (Feb 27, 2025) Today's edition of Throwback Thursday is all about 64-bit VBA: updating your 32-bit code to run in 64-bit, 32 vs. 64-bit Office, and tools to help with the conversion.
- Throwback Thursday: March 6, 2025: (Mar 6, 2025) Today's edition of Throwback Thursday is chock full of tips and tricks to emulate your client's production environment during development.
- Throwback Thursday: March 13, 2025: (Mar 13, 2025) Today's edition of Throwback Thursday is about one of VBA's most underappreciated features: the humble Enum statement.
- Throwback Thursday: March 20, 2025: (Mar 20, 2025) In today's edition of Throwback Thursday, we explore the role of "feature gates" (aka, "feature flags") in Microsoft Access (and Microsoft Office more broadly).
- Throwback Thursday: March 27, 2025: (Mar 27, 2025) In today's edition of Throwback Thursday, we explore how to create GUIDs in your Access applications and how you can use them to simplify creating temporary files.
- Throwback Thursday: April 3, 2025: (Apr 3, 2025) In today's edition of Throwback Thursday, we look back at past Access DevCon Vienna conferences (and forward to next week's conference).
- Throwback Thursday: April 10, 2025: (Apr 10, 2025) Today's edition of Throwback Thursday is all about testing: Python-inspired doc tests, my B-BEAR quick and dirty T-SQL test technique, and a proper SQL Server unit testing tool.
- Throwback Thursday: April 17, 2025: (Apr 17, 2025) "Boring is beautiful." In today's Throwback Thursday, we're confronted with the uncomfortable truth that the best software is often uninteresting to write.
- Throwback Thursday: April 24, 2025: (Apr 24, 2025) Today's edition of Throwback Thursday is all about building file names, verifying folder paths, and other related file system activities.
- Throwback Thursday: May 1, 2025: (May 1, 2025) In this week's edition of Throwback Thursday, we explore the magic of "self-healing" object variables and caching in VBA.
- Throwback Thursday: May 8, 2025: (May 8, 2025) Today's edition of Throwback Thursday is all about scripting major SQL Server operations like backing up, cloning databases, and server migrations.
- Throwback Thursday: May 15, 2025: (May 15, 2025) This week's Throwback Thursday article features tips, tricks, and tools for tracking down hard-to-diagnose bugs.
- Throwback Thursday: May 22, 2025: (May 22, 2025) We revisit one of my all-time favorite articles in today's edition of Throwback Thursday. The topic is dry (LLCs, S Corps, and C Corps, oh my!), but the writing is not.
- Throwback Thursday: May 29, 2025: (May 29, 2025) In today's edition of Throwback Thursday, we revisit one of my favorite techniques: guard clauses--my secret weapon for avoiding Dante Alighieri-levels of nesting.
- Throwback Thursday: June 5, 2025: (Jun 5, 2025) In today's edition of Throwback Thursday, we explore two common data structures used to store multiple objects in VBA: Collections and Dictionaries.
- Throwback Thursday: June 12, 2025: (Jun 12, 2025) Today's edition of Throwback Thursday is an homage to the "citizen developer"--largely responsible for Access's 30-year domination in the desktop database market.
- Throwback Thursday: June 19, 2025: (Jun 19, 2025) This week's edition of Throwback Thursday is all about the tool we use to track hours at my software development company (plus how--and why--we got here).
- Throwback Thursday: June 27, 2025: (Jun 26, 2025) Today's edition of Throwback Thursday is an homage to the fine art of software maintenance...and how we can make this thankless chore easier on our future selves.
- Throwback Thursday: July 3, 2025: (Jul 3, 2025) Today's edition of Throwback Thursday is a deep dive into an underused tool in the VBA debugging toolkit: the Watch Window.
- Throwback Thursday: July 10, 2025: (Jul 10, 2025) Today's edition of Throwback Thursday explores a structured approach to safely rewrite a complex VBA function as a lightning-quick SQL Server scalar function.
- Throwback Thursday: July 17, 2025: (Jul 17, 2025) In today's edition of Throwback Thursday, we explore several techniques for looping and grouping by month in Access and SQL Server.
- Throwback Thursday: July 24, 2025: (Jul 24, 2025) In today's Throwback Thursday, we revisit several clever tricks to create consistent development environments across multiple devices and users.
- Throwback Thursday: August 7, 2025: (Aug 7, 2025) We dive into the mysterious and wonderful world of the hidden Access WizHook object in today's edition of Throwback Thursday.
- Throwback Thursday: August 14, 2025: (Aug 14, 2025) In today's edition of Throwback Thursday, we resurface some of Access and VBA's most deeply "hidden" features.
- Throwback Thursday: August 21, 2025: (Aug 21, 2025) Today's edition of Throwback Thursday uncovers Access's secret superpower: proving whether your custom software project is worth pursuing at all.
- Throwback Thursday: August 28, 2025: (Aug 28, 2025) In today's edition of Throwback Thursday, we explore three different ways to determine the type of a variable in VBA.
- Throwback Thursday: September 4, 2025: (Sep 4, 2025) Setting up a new SQL Server instance? Today's edition of Throwback Thursday is a one-stop shop for all your configuration, connection, and automated backup needs.
- Throwback Thursday: September 11, 2025: (Sep 11, 2025) In this epoch edition of Throwback Thursday, we explore several key compatibility considerations between Access and SQL Server.
- Throwback Thursday: September 18, 2025: (Sep 18, 2025) In this week's edition of Throwback Thursday, we explore the value of Abbreviation columns in lookup tables, how to automate populating them, and why they improve your apps.
- Throwback Thursday: September 25, 2025: (Sep 25, 2025) Today's edition of Throwback Thursday is all about knowing when (and how) to convert a fit-for-purpose procedure into a generic, reusable routine.
- Throwback Thursday: October 2, 2025: (Oct 2, 2025) Today's edition of Throwback Thursday is all about subtlety. The subtle differences between + and &; between . and !; between IsNull() and Is Null; and between IIf and IIf.
- Throwback Thursday: October 9, 2025: (Oct 9, 2025) In today's edition of Throwback Thursday, we look back at a few tips for staying out of trouble when writing one-off or temporary code.
- Throwback Thursday: October 16, 2025: (Oct 16, 2025) In today's edition of Throwback Thursday, we revisit one of my most popular functions--NewSort()--which enables easy sorting of columns in continuous forms.
- Throwback Thursday: October 23, 2025: (Oct 23, 2025) In today's edition of Throwback Thursday, we revisit another of my most popular functions--Pluralize()--which lets you adapt your string(s) ... <- to avoid this ugliness.
- Throwback Thursday: October 30, 2025: (Oct 30, 2025) In today's edition of Throwback Thursday, we revisit my presentation on building ribbon interfaces in code, along with other ribbon-related goodies.
- Throwback Thursday: November 6, 2025: (Nov 6, 2025) Report captions add polish to your Access applications. In today's edition of Throwback Thursday, we resurface some tips and techniques to make them easier to manage.
- Throwback Thursday: November 13, 2025: (Nov 13, 2025) In today's edition of Throwback Thursday, we revisit some tips and techniques for dealing with debugging challenges that have vexed me over the years.
- Throwback Thursday: November 20, 2025: (Nov 20, 2025) In today's Throwback Thursday, we revisit one of my favorite VBA hacks: a hidden attribute that unlocks IntelliSense when looping through a collection of custom class instances.
- Throwback Thursday: November 27, 2025: (Nov 27, 2025) In today's edition of Throwback Thursday, we revisit my B-BEAR technique (Begin, Before, Execute, After, Rollback): the only way I make live changes to SQL Server production data.
- Throwback Thursday: December 4, 2025: (Dec 4, 2025) In today's edition of Throwback Thursday, we explore how you can deliver more value to your clients as an Access developer.
- Throwback Thursday: December 11, 2025: (Dec 11, 2025) Today's edition of Throwback Thursday is a reminder not to undervalue what you know and can do with Microsoft Access (no matter what you might hear on Stack Overflow).
- Throwback Thursday: December 18, 2025: (Dec 18, 2025) Freshen up your Access forms and take your checkboxes to the next level with these modern on/off buttons in today's edition of Throwback Thursday.
- Throwback Thursday: January 1, 2026: (Jan 1, 2026) When you think of Access, should you think of emoji? In today's edition of Throwback Thursday, all signs point to yes.
- Throwback Thursday: January 8, 2026: (Jan 8, 2026) In today's edition of Throwback Thursday, we revisit a technique that lets you pause code until a form or report is closed--without some of the drawbacks of dialog forms.
- Throwback Thursday: January 15, 2026: (Jan 15, 2026) In today's edition of Throwback Thursday, we explore the subtleties of storing and displaying time spans in Microsoft Access.
- Throwback Thursday: January 22, 2026: (Jan 22, 2026) In today's edition of Throwback Thursday, we revisit how to handle "untrappable" Access errors via the Form Error event.
- Throwback Thursday: January 29, 2026: (Jan 29, 2026) In today's edition of Throwback Thursday, we revisit one of my favorite analogies for comparing traditional Access "version control" with real text-based version control.
- Throwback Thursday: February 5, 2026: (Feb 5, 2026) In today's edition of Throwback Thursday, we revisit my article on Documentation-First Development--an increasingly useful concept in the age of AI-assisted development.
- Throwback Thursday: February 12, 2026: (Feb 12, 2026) In today's edition of Throwback Thursday, we review one of the most important concepts in SQL Server security: role-based access control.
- Throwback Thursday: February 20, 2026: (Feb 19, 2026) Take your VBA string-building skills to the next level in today's edition of Throwback Thursday.
- Throwback Thursday: February 26, 2026: (Feb 26, 2026) In today's edition of Throwback Thursday, we explore the wonderful, mysterious world of COM, the tech that allows us to automate Excel from Access.
- Throwback Thursday: March 5, 2026: (Mar 5, 2026) Today's edition of Throwback Thursday is all about autonumbers and primary keys.
- Throwback Thursday: March 12, 2026: (Mar 12, 2026) With the coming end of life of SQL Server 2016, we revisit a few articles with tips on scripting those migrations In today's edition of Throwback Thursday.
- Throwback Thursday: March 19, 2026: (Mar 19, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA's most powerful underused feature: class modules.
- Throwback Thursday: March 26, 2026: (Mar 26, 2026) In today's edition of Throwback Thursday, we review some common gotchas of the SQL BETWEEN statement and how to avoid falling victim to these potential logic errors.
- Throwback Thursday: April 2, 2026: (Apr 2, 2026) In today's edition of Throwback Thursday, we revisit some of the problems with global constants in VBA and my preferred alternative.
- Throwback Thursday: April 9, 2026: (Apr 9, 2026) In today's edition of Throwback Thursday, we revisit some foundational articles on twinBASIC to get you ready for next week's annual DevCon Vienna conference.
- Throwback Thursday: April 16, 2026: (Apr 16, 2026) In today's edition of Throwback Thursday, we revisit some advanced articles on twinBASIC to get you ready for my talk tomorrow at DevCon Vienna 2026.
- Throwback Thursday: April 23, 2026: (Apr 23, 2026) Today's edition of Throwback Thursday revisits the pitfalls of leaving old code and database fields around and answers the question, "What could it hurt?"
- Throwback Thursday: April 30, 2026: (Apr 30, 2026) In today's edition of Throwback Thursday, we revisit the bane of my VBA coding existence: the IDE's case-changing "feature."
- Throwback Thursday: May 7, 2026: (May 7, 2026) In today's edition of Throwback Thursday, we revisit a few articles on VBA memory management and the "Large Address Aware" (LAA) flag in Microsoft Access.
Tools
- ["Tools" tag page]: Show all articles with the tag "Tools" (including those where "Tools" is a secondary tag).
-
My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
-
21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
-
No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
-
Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
-
vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
-
Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
-
Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
-
Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
-
KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
-
Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
-
AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
-
Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
-
Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
-
3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
-
RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
-
3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words.
Here are three tools that I use to make the process of taking screenshots as smooth as possible.
-
Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
-
Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
-
Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
-
Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
-
Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
-
Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
-
Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
-
3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
-
3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
-
Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
-
Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
-
Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
-
Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
-
AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
-
ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
-
Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
-
Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
-
Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
-
Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
-
Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
-
Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
-
How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
-
Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
-
PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
-
Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
-
Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
-
Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
-
Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
-
Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
-
DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
-
KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
-
Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
-
Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
-
Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
- My Favorite Things: (Sep 24, 2020) Here is a list of my favorite utilities, add-ins, OCX controls, and applications that I use when developing Microsoft Access applications.
- 21st Century Visual Basic: (Dec 27, 2020) Microsoft stopped supporting VB6 in 2008. Here are some modern options for migrating those old apps or developing new ones in 2020 and beyond.
- No Longer Set: (Jan 9, 2021) Tools and techniques for creating installation packages for Access applications and automatically updating front-end program files.
- Bad Words in Access: (Jan 31, 2021) Note, Caption, Format, Pages, Sequence. All reasonable-sounding field names, but all should be avoided.
- vbWatchdog Webinar: (Feb 10, 2021) Peter Cole of ThemeMyDatabase.co.uk presents a demonstration of vbWatchdog in action. Come for the info, stay for the discount code.
- Everything You Need to Find Files: (Feb 12, 2021) Or, should I say, You Need *Everything* to Find Files.
- Hiding Shortcuts in Everything: (Feb 16, 2021) Here's a quick tip from Tom Wickerath for hiding shortcut files from your Everything file search results.
- Rainbow CSV: (Mar 30, 2021) If you work with delimited text files of any kind, you need to be using this VS Code extension.
- KnowledgeBase Mausoleum: (Mar 31, 2021) Looking for that long-lost KnowledgeBase article from 2003 but only finding a 404 error? This website brings dead KB articles back to life.
- Enable Live Transcription in MS Teams Meetings: (Apr 20, 2021) Is the "Start transcription" option missing from your Teams menu? Is the "Join" button missing from your calendar entry? Maybe I can help (but probably not).
- AccessUI - Data Source Manager: (May 21, 2021) Tired of dealing with the limitations and poor UI of Access's built-in linked table manager? Try this FREE improved version from Kevin Bell.
- Commento vs. Cove Comments: (Jun 21, 2021) Commento and Cove are both third-party comment hosting platforms. Which one works best with Ghost CMS?
- Customizing the VBA Debug Toolbar: (Jul 5, 2021) There are some very handy commands that VBA does not expose by default. Here's a step-by-step guide to customizing the Debug toolbar in VBA.
- 3 Ways to Run the Best Low-Level Windows Debugging Tool: (Jul 20, 2021) A surprising number of thorny Access performance issues can be resolved with this venerable tool. Here's how to get started with Process Monitor.
- RegEx101.com: (Aug 2, 2021) Writing and reading regular expressions is like speaking a foreign language. Think of regex101.com like Google Translate for regexes.
- 3 Tools to Take and Manage Screenshots: (Oct 16, 2021) A picture is worth a thousand words. Here are three tools that I use to make the process of taking screenshots as smooth as possible.
- Keybase: A Simple and Secure Way to Communicate: (Oct 27, 2021) Whenever I need to share sensitive information with my team--such as passwords or private keys--I use Keybase for peace of mind.
- Advanced Data Generator 4: First Look: (Dec 9, 2021) Looking to generate lots of test data in your backend Access databases? Advanced Data Generator 4 may be exactly what you are looking for.
- Application Environment Inheritance: (Jan 12, 2022) Understanding how applications inherit environment settings from one another can shed light on some otherwise puzzling situations.
- Setting a Common Path to Sharepoint Site Folders on Multiple Devices: (Jan 25, 2022) This quick tip will help you create consistent development environments across multiple devices and users.
- Creating a Shortcut to an Environment Variable Path: (Jan 27, 2022) If you rely on OneDrive or SharePoint to collaborate on files with your team, this tip will help you provide a uniform way to access data across all devices.
- Simple Fix for Missing DBF Support in Access 2013: (Jan 29, 2022) Quick fix installers that restore Access 2013 DBF support *PLUS* the techniques I used to build the installers using 7-Zip and Inno Setup.
- Using ProcMon to Troubleshoot Registry Calls: (Feb 10, 2022) Finding the correct registry keys for JetShowPlan and ODBC TraceSqlMode can be tricky. Let ProcMon take the guesswork out of the process.
- 3 Ways to Find Showplan.out: (Feb 11, 2022) Finding Jet ShowPlan's showplan.out file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
- 3 Ways to Find sqlout.txt: (Mar 2, 2022) Finding ODBC TraceSQLMode's sqlout.txt file can be deceptively difficult. Here are three approaches to make it easy. At least one is guaranteed to work.
- 3 Free Options for Managing Linked Tables in Access: (May 17, 2022) The original linked table manager was a terrible tool. Let's look at three better options for today's Microsoft Access developers.
- Changing Internet Explorer Options in IE Mode of Microsoft Edge: (Jul 19, 2022) Did you try to change Internet Explorer options from IE Mode in Edge only to realize that you can't get to them? Luckily, there's an easy workaround.
- Access Database Right-Click Context Menu Creator: (Jul 25, 2022) Wouldn't it be great to right-click an Access file to compact or decompile it? With Daniel Pineault's awesome tool, you can!
- Automatically Link to Your Bug Database from TortoiseHg: (Aug 17, 2022) Everyone's favorite Windows Mercurial software includes a killer feature that is criminally underused.
- Connecting to GitHub from TortoiseHg Using SSH Keys: (Aug 18, 2022) Step-by-step instructions to set up a completely seamless integration between TortoiseHg and GitHub. No passwords. No Pageant. No friction of any kind.
- AccessImagine: ActiveX Picture Control for Access: (Aug 24, 2022) If you are building an image-rich data application with Microsoft Access, you can save yourself a lot of development time with a third-party tool like AccessImagine.
- ActiveX Controls: Love 'Em or Hate 'Em?: (Aug 29, 2022) I always avoid ActiveX controls in my Access applications. Except when I can't. Or don't want to. It's complicated...
- Checking Version Compatibility with NetOffice: (Nov 1, 2022) Take advantage of the open-source NetOffice project on GitHub to look up version compatibility for the Access/Office/Word/Excel object models.
- Using FreeMind as a Schema Development Tool: (Dec 28, 2022) In the early stages of planning a database design, I prefer a tool that lets me capture my thoughts as they flow without getting in the way. FreeMind is that tool.
- Password Generator: (Mar 3, 2023) There are plenty of online password generator sites, but this one is my favorite.
- Simple Logging Framework for VBScript Files: (Mar 7, 2023) If you use VB Script files to automate recurring tasks, adding support for severity-based logging offers cheap insurance against future problems.
- Instantly "Copy" Huge Files Using Hard Links in Windows: (May 15, 2023) Hard links are a well-hidden feature of the Windows file system. Don't let Linux users have all the fun!
- Using Hard Links to Help Mimic a Client Network Environment: (Jun 8, 2023) Need to mimic data environments for multiple clients? Hate managing the resulting data sprawl? Hard links can help.
- How to Be Signed In To Multiple Organizations in the MS Teams Desktop App Simultaneously: (Aug 28, 2023) This trick allows you to run multiple instances of the Microsoft Teams desktop app with each instance signed in to a different organization.
- Setting Up a New MS Access Development Environment: (Sep 6, 2023) Five settings and two addins that vastly improve your quality of life as a Microsoft Access developer.
- PureText: Paste Unformatted Text From Your Clipboard: (Dec 8, 2023) Are you tired of the Notepad dance: Copy rich text, paste in Notepad, select all, copy, paste plain text? If so, this simple utility could be life-changing.
- Poe: My Tool of Choice for Exploring the World of LLMs: (Dec 19, 2023) With so many new and exciting LLMs and AI image generators, how do you pick just one? What if you didn't have to?
- Ditto: My Newest Favorite Micro-Productivity Tool: (Jan 16, 2024) "That's what she said."
- Unfamiliar Language? 10X Your Productivity by Combining the Old with the New: (Feb 12, 2024) Pairing this free AI tool with an old-school technique is the key to unlocking immediate productivity in unfamiliar programming languages.
- Customizing the VoidTools Everything File Search Utility with Custom Commands: (Feb 29, 2024) The latest insider version of the Everything search tool introduces a new killer feature.
- Installing TortoiseHg: Step-by-Step: (Mar 7, 2024) Step-by-step instructions for installing my preferred distributed version control system (DVCS) for Access developers looking to get started with version control.
- DokuWiki: A Versatile Tool for Developer and End-User Documentation: (Mar 27, 2024) DokuWiki is a one-stop-shop for developer and end-user documentation--with support for both online and offline use cases!
- KeePass: The Ideal Combination of Security and Convenience: (Mar 29, 2024) Applying lessons from XKCD, the Iraq war, and recent cyberattacks to choose the best tool to safeguard your sensitive data.
- Boost Efficiency by Documenting Recurring Processes in ProcessKit: (Apr 5, 2024) From invoicing to client onboarding, learn how documenting your processes in ProcessKit can save time and improve results.
- Dark Mode All the Things: (Sep 6, 2024) If exposure to excessive light will render your undead body a pile of ash--or you simply want to reduce eye strain--this app-by-app list of Dark Mode settings is just what you need.
- Whisper Desktop: Free Speech-to-Text in Under 5 Minutes: (Apr 6, 2025) A 5-minute quick start guide for Whisper Desktop, an easy-to-install Windows application for running the open-source Whisper transcription model from OpenAI.
Sign up for more like this.
Enter your email
Subscribe