Code and Utilities

Groupwise class

This VB project contains a class that automates sending email from Novell Groupwise. Tested with Groupwise 5.2, 5.5, and 6.0. Requires Groupwise 32-bit client to be installed. Uses Groupwise Object API, see the documentation and downloads sections on for technical details. Even though the download is a VB project, the class can be used in MS Access and other MS Office applications with very minimal modifications. It can also be compiled into an ActiveX DLL. See comments in the code for additional details.

The same class is available in an Access 97 database.

New Jan-27-2005: It appears that there is an issue when using this class with Groupwise 6.5, where the CC and BC recipients appear as To recipients in the received message. Since I do not have access to a Groupwise system at this point, I cannot verify and/or troubleshoot this (or any other issue with using this class on a 6.5 system). However, any additional information you may have regarding this would be appreciated. Make sure it is not this issue.

Update Sep-13-2005: Reportedly, SP2 for Groupwise 6.5 fixes this.

New May-19-2006: 

A frequently asked question: "How do I use the class to create a new Groupwise message window and have the user enter recipients, message text, etc?".

The answer: The class itself does not provide any user interface. It works directly with the Groupwise mail engine on the workstation, not with the Groupwise client, which provides the GUI that people are used to seeing when using Groupwise. If you need a particular user interface for the class, your options are to either create a form that looks like a "New Message" screen in GW client (with text boxes for recipient(s), subject, message, attachment(s), etc.), or use a different technique called Groupwise tokens. That will allow you to automate Groupwise client itself, and do things like opening a new Groupwise message window, etc. There is documentation and code samples at

TextExport class

This VB/VBA class exports data from a Jet database in text delimited format. It provides some extra functionality compared to the TransferText method in Access. As the data source, it can accept any one of the following: DAO recordset, table, tabledef, query, querydef, SQL statement, and a two-dimensional array. Any string can be used as field and record delimiter. Optionally, you can specify a string that will replace fields and record delimiters embedded in the data being exported. The class supports appending to existing files, exclusion of specified source fields from export, and some other features. Can be used in VB 5 and 6, MS Office 97, 2000, XP, 2003. See comments in code for sample usage and additional details.

New Sep-25-2002: The class can now output Unicode files. Set ExportUnicode property to True if this is wanted. Default is still ANSI.

New Dec-14-2003: UTF-8 encoding now supported for Unicode files. Set UTF8 property to True if this is wanted. Otherwise, if ExportUnicode is True, text will be exported as UTF-16.

The same class is available in an Access 97 database.

New Feb-06-2004: A new version of the class that adds support for ADO recordsets is now available here. The same class in an Access 97 database is here. Read code comments to enable ADO support, which is disabled by default. Although it worked well in my testing, this feature is somewhat experimental, so your comments and feedback to the email address below are welcome.

New Oct-04-2004: Fixed a bug with the ExcludeFields property, which sometimes would exclude fields other than specified.


This is a VB project that displays information about open windows on a Win32 system in a hierarchical view. You can point to a window, and it will build a tree showing all descendants of that window, and provide some information about each, such as window handle, class name, window style, window state, process, parent and children, etc. Can create a "snapshot" of a window tree with a user-defined delay. Useful for debugging Windows API code.

MBox function

MBox() is a function that can be used as the replacement for the native MS Access MsgBox() function. It supports almost all built-in arguments of the MsgBox() function and has the following extra features: custom button captions, user-defined message font, message timeout, copying of the message to clipboard, user-defined message icons, and more. See readme.txt in the download for more details.


There is an article in MS Knowledgebase (Q210486), showing how to insert files into OLE fields in a Jet database, and how to write them back to disk. Unfortunately, in some circumstances, that code may cause the file to be corrupted. This download, which contains slightly modified KB code, avoids that problem.

Window menu

This is a sample MS Access 97 database showing how to build your own Window menu in Access. For those cases when the built-in menu cannot be used for some reason, or when some functionality not found in the built-in menu is required.

Database properties

This is a VB project that provides a user interface to work with the Properties collection of a Jet database. Supports secured databases. Does not require MS Access to be installed, although DAO needs to be present and functional.

November 18 2002: Updated to use DAO 3.6 instead of 3.5.

May 5 2004: Similar functionality is available in an Access add-in. The Access 97 version is here, and Access 2002-2003 version is here.

Objects as Text

New March 31 2004:

This is a MS Access add-in that provides a GUI for the SaveAsText and LoadFromText methods. You can select multiple objects from current database to be saved as text files, or select multiple text files from disk to be loaded as objects into current database. To install the add-in, use the Add-In Manager from Tools->Add-Ins. Access 97 version is here. Access 2002-2003 version is here.

All code above is by Dimitri Furman, unless otherwise noted. It is free, unsupported, and provided without any warranties. If you have questions about code and utilities on this page, feel free to contact me at I will try to respond as time allows. Thank you.