Total Access Memo

Total Access Memo CD and Manual

Microsoft Access 2007, 2010, 2013 Version
is Shipping!

Supports 32-bit versions of Microsoft Access 2010 and 2013, and Access 2007, 2003, 2002, and 2000!

View all FMS products for Microsoft AccessAll Our Microsoft Access Products

Memo Info:


"Total Access Memo makes all the difference in my Access apps! Only Memo gives me fonts, colors, images and all the formatting tools I need. It's great!"

B. Simmons, Ciena, Linthicum, MD

Additional Info:



Rich text format memo fields for Microsoft Access forms and reports with Total Access MemoRich text format memo fields for Microsoft Access forms and reports

Frequently Asked Questions for Total Access Memo

Current Version

Pre Sales Questions

Post Sales Questions

Older Versions

Pre Sales Questions

What Microsoft Access Version Does Total Access Memo support?

The latest version of Total Access Memo is a 32-bit ActiveX control that can be used and deployed to users running Microsoft Access versions that support this standard. That includes Access 2016, 2013, 2010 (32-bit versions), 2007, 2003, 2002, and 2000.

Total Access Memo does not currently support the 64 bit version of Access 2010.

Visit the Product Compatibility Chart for version information for all of our products.

For information on the history of Access versions, visit our Microsoft Access Version Releases, Service Packs, Hotfixes, and Updates History page.

Does Total Access Memo 2003 support Microsoft Access 2007 or 2010?

No. Because of the changes made to Microsoft Access 2007 forms and reports, the control from Total Access Memo 2003 does not support Access 2007 and 2010.

Total Access Memo 2007 supports Access 2007, Access 2010 (32-bit version), and is backward compatible with Access 2003, 2002/XP and 2000.

Can I try Total Access Memo before I buy it?

Absolutely! Download the Trial Version to try Total Access Memo before you buy it.

Also, remember that FMS products come with a 30-day money back guarantee, so you can buy with confidence!

Does Total Access Memo Require Administrator Rights?

Yes, you need Administrator rights to install Total Access Memo.

What makes Total Access Memo special?

Total Access Memo is developed exclusively for the Microsoft Access community and includes features not found elsewhere for rich text format memo fields:

  • Display rich text format data on Access forms and reports bound to data stored in a field on a table. A table can have multiple RTF fields and an unlimited number of records.
  • Editing directly in the control with the option to bring up a full screen editor by pressing Shift-F2. This brings up a separate editor with a full menu, toolbars, ruler, etc. so you can format your text in a resizable or maximized window.
  • Built-in spell checker with support for 20+ languages. This is critical when people enter lots of text.
  • In addition to support for rich text format basics (fonts, point sizes, styles, etc.), Total Access Memo also supports the inclusion of active hyperlinks, graphics, paragraphs with hanging indents, bullet points, numbering, etc.
  • For VBA programmers, many properties and methods to let you control and edit your rich text fields and user experience.

What are the Limitations of Total Access Memo?

Total Access Memo is an ActiveX control that you place on an Access form or report. We've worked hard to minimize the issues in that environment but it is still subject to the limitations of what Access supports with ActiveX controls. These include:

  • In reports, the Keep Together property cannot be supported
  • In reports, exporting the report to Word does not include the Total Access Memo contents and must be done programmatically.
  • In reports, the maximum size for a control is 22". Total Access Memo can store, display, and edit text of much greater length but Access reports have a maximum control and page size of 22 inches. In most cases this is okay. We're talking about one field's value exceeding 22 inches. If the text can be broken up to smaller sizes per field, the data can be display in their entirety. Sometimes changing the font size or paragraph settings can help.
  • No support for display in continuous forms
  • Cannot be placed directly on a tab control's page, but there is a workaround.

After downloading the Total Access Memo Demo,  I get a message that says I do not have a license to use the control.

The demo version of Total Access Memo lets you view, edit, and print rich text format memo fields in Microsoft Access. However, in order to insert the Total Access Memo control onto your own forms or reports in design time, you must obtain a retail license of Total Access Memo. While the demo version does not allow you to insert the Total Access Memo control into your own forms or reports, we offer a 30 day money back guarantee for this product to ensure that it meets or exceeds your expectations.

If you are using the demo of Total Access Memo and you would like to see how it will affect your own data, we recommend the following:

  1. Import your own table into the Total Access Memo sample database of the demo version.
  2. Rename the table "tblRTF" to "tblRTF_FMS"
  3. Rename your imported table to "tblRTF"
  4. Run the sample as normal and modify the text in your own table now.

NOTE: You still cannot open the forms or reports in design view without losing the licensing, however, the steps above will allow you to "use your own data" for a test. If you have already received a "license" error, you will need to rename this demo application and then re-install the product in order to get the licensed database again.

Post Sale Technical Support Questions

How do I get the unformatted text with Total Access Memo?

Occasionally, you may just want the text and not the rich text format of the RTF field. For instance, you may want the unformatted text on a report, or you may need to export the text to another program that does not support rich text format fields.

Total Access Memo exposes property called Text. The Text property returns the textual representation of the contents of the Total Access Memo control.

If you want to store it in a separate field, create an extra memo field for it. Use the Text property in BeforeUpdate event of your form, as in the following:

Private Sub Form_BeforeUpdate(Cancel As Integer) 
  ' Assign the text representation to the text field
  TextField = tamDemo.Text 
End Sub

where TextField is the name of the text field, and tamDemo is the name of the Total Access Memo control.

Does Total Access Memo support Continuous Form View or Datasheet view?

No. Since Total Access Memo is an ActiveX control, it supports Single Form view only. It cannot support Continuous or Datasheet views because Microsoft Access does not provide this option for ActiveX controls.

Please note that this limitation applies to all versions of MS Access.

How do I set a default font in Total Access Memo?

You can set the default font and other settings in two ways:

1. Manually set the font property in the property sheet:

Set Default Font for Rich Text Memo field in Microsoft Access

2. Programmatically set the font in an event such as Form_Load:

 Private Sub Form_Load()
  Me.FMSMemo0.Object.Font.Name = "Arial"
  Me.FMSMemo0.Object.Font.Size = 14
  Me.FMSMemo0.Object.Font.Bold = True
End Sub

How do I use Total Access Memo in an Access tab control?

The Microsoft Access Tab control has intermittent problems with Total Access Memo. These problems manifest themselves as periodic GPF's (General Protection Faults), the Memo control losing the ability to gain focus, or the Memo control remaining focused even though you have changed to a tab that does not contain the control.

It is not recommended that you place Memo on a tab control. A workaround to this issue is to place Total Access Memo on your form, and hide and show the control in the Click event of the tab control. For example: Assume you have a Memo control named tamDemo, and a tab control named tabDemo. To show the Total Access Memo control when the second tab is selected, use code like this:

Private Sub tabDemo_Click()
  'Tabs are 0 based
  Me.tamDemo.Visible = (Me.tabDemo.Value = 1)
End Sub

The trick to making this work right is to ensure that the Memo control is NOT on the Tab control, but rather, is placed on the FORM in the same position you would have set it on the Tab control. When the control is made visible, it will appear as though it were on the tab control, even though it is not because you have properly placed the control.

How do I use Total Access Memo to export from reports to other formats (such as Microsoft Word)?

Microsoft Access does not recognize ActiveX controls in the same way it recognizes other controls. Because of this, exporting the contents of an ActiveX control like the Total Access Memo control to other formats using Microsoft Access must be done programmatically.

Here's some sample code to show how to use the Windows Clipboard to do this.

Why do I lose the first character when I start typing in the control in Total Access Memo?

Unfortunately, this is an Access bug that occurs when you first "dirty" a new field. To work around this issue, set Me.Dirty = True when moving to a new record.

When using Total Access Memo, why do I lose all formatting when programmatically editing the text property?

If you are updating the control's Text property with code like this, you will lose your rich text formatting:

tamMemo.text = tamMemo.text & "New Text"

The Text property applies to the the unformatted text contents of the control. Updating this property replaces all formatting and text in the control. Use the SelStart and SelText properties to append text into the control.

Why doesn't Total Access Memo observe its "locked" property?

When setting the Locked property of Total Access Memo in code, you must make sure you use the .Object syntax. For example suppose you have a control named tamDemo. The following code does not set the property:

tamDemo.Locked = True

This code must be changed to:

tamDemo.Object.Locked = True

This is because Access has a locked property that conflicts with Total Access Memo. This is an issue for any custom control that provides a locked property.

When using Total Access Memo, why do I get the message, "This is unlicensed software"?

This can occur for a few reasons:

1. If you have the Name AutoCorrect Option for the database enabled at runtime and relink tables, you cause the form containing the ActiveX control to be opened by MS Access in design view and saved. This causes the ActiveX control to lose it's license because the license is not available in runtime.

To workaround this issue, please ensure that the "Name AutoCorrect" options are turned off prior to relinking your tables (manually or programmatically).

Manually disable the Name AutoCorrect Option:

The Name AutoCorrect options are found under: Tools, Options, General Tab. Uncheck "Track name AutoCorrect info". Now you can use the Link Table Wizard to relink tables or relink them programmatically.

Programmatically disable the Name AutoCorrect Option:

STEP 1: Create variables to hold the values. Do this in the Declarations section of the form:

Private fTrackNameAutoCorrectInfo As Boolean
Private fPerformNameAutoCorrect As Boolean
Private fLogNameAutoCorrectChanges As Boolean

STEP 2: Set variables equal to existing database settings

' Record the value of the Track Name Autocorrect and other options into the module level variables (above)
fTrackNameAutoCorrectInfo = GetOption("Track Name AutoCorrect Info")
fPerformNameAutoCorrect = GetOption("Perform Name AutoCorrect")
fLogNameAutoCorrectChanges = GetOption("Log Name AutoCorrect Changes")

STEP 3: Turn Name AutoCorrect options OFF *before* you relink the tables

' Once Tracking is turned off, the rest are automatically disabled
Application.SetOption "Track Name AutoCorrect Info", False
'----- Perform your programmatic relink here -----

STEP 4: Set Name AutoCorrect options to their original settings again

SetOption "Log Name AutoCorrect Changes", fLogNameAutoCorrectChanges
SetOption "Perform Name AutoCorrect", fPerformNameAutoCorrect
SetOption "Track Name AutoCorrect Info", fTrackNameAutoCorrectInfo

2. If you are trying to use this control in an environment outside of Microsoft Access. This control is only supported in the MS Access environment, and should not be used in any other application.

3. This issue can occur when distributing an application and the runtime executable was not  run on the user's machine. This is an important part of the redistribution/runtime process. Please ensure that you have run this executable once on every machine which this run-time application is distributed. For more information regarding the Runtime distribution, please review the manual or help file.

4. One of the shared files which our program uses was changed by another program that installs an older version. To resolve this, you should be able to simply run the runtime executable again to overwrite these files. If this does not work, you need to find out what new software was installed by your users and see which files might were affected.

5. A reference to the control was lost. To resolve this, open any module. Then go to Tools | References menu and look for references listed as "MISSING". Also, ensure that the reference to our control is listed. If it is not or it is with "MISSING" next to it, you need to reset this reference. You can do so by removing the missing reference and using the browse button to locate the fmsmemo9.ocx control. This file is usually located in the C:\Windows\System folder.

6. Please ensure that you did not copy and paste the control from one form to another, or on the same form. Although this method of inserting an ActiveX control usually works on a development machine, it causes issues on the user's machine. The proper way to place the control is through the Insert | ActiveX Control method each time.

Unfortunately, this also applies to copying an entire form or report with an ActiveX control in it. When you copy a form or report, Microsoft Access Actually copies each control individually then pastes them again in the appropriate places wherever you paste the new form. Using this method is essentially the same as copying the control itself and it will not work.

7. This can happen if you have had the demo version installed previously, and still have your references set to the Trial version of the control, or inserted the trial version of the control. To resolve this, you can do this two different ways:

A. When going to Insert | ActiveX Control, and scroll down this list. The area which you want to look at is FMS Total Access Memo. If you have the trial version still installed, or did an automatic uninstall, there should be another saying FMS Total Access Memo Trial. If this is the case, please ensure that you are selecting the full version of the control and not the Trial version.

B. Un-Install and Re-install

  • Do an uninstall of the Full version and Trial version of the product. You can do this by going to the control panel and using Add/Remove programs.
  • After the uninstall is complete, go to the location where the products were installed. If there is a folder left for either one, delete them.
  • Reinstall the full version of the product only.

Why does my Total Access Memo control lose its control source?

Unfortunately, there are many issues in Microsoft Access that cause ActiveX controls to lose their control source.

For Forms

Fortunately, you can resolve this issue by setting the ControlSource in the form's load event. For example:

Private Sub Form_Load()
  tamDemo.ControlSource = "RTFField"
End Sub

(where tamDemo is the name of the control, and "RTFField" is the ControlSource.) Close and re-open the form to fire the Form_Load Event, and reset the control source.

Please Note: If you are not using the code above, you must reset the control source manually any time an error occurs on the form that causes it to lose its control source.

For Reports

The simplest way is to ensure the Total Access Memo control always shows the proper information on Reports is to use Total Access Memo in an UNBOUND way.

  1. Create a Text box on the report and set it's "Visible" property to False. Make its BackColor red so you know in design view it is an invisible control to the user.
  2. Set the Text box to the same Control Source that Total Access Memo is currently bound to.
  3. Remove the Control Source for the Total Access Memo Control.
  4. In the detail format event (which you are using anyhow for HeightOfText), simply add this code as one of the FIRST things done in the Detail Format:
Private SubPrivate Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
  ' NOTE: tamDemo is the name of the Total Access Memo control
  ' Kill the existing Value

  tamDemo.Value = ""

  ' Reset the value to the text box value
  tamDemo.Value = YourNewTextBoxName
End Sub

Now continue on with the rest of the detail format code (like HeightOfText)

Important Information for both Forms and Reports:

NOTE: One of the major (known) issues where a Control Source is caused to be lost, is when the application encounters an error and continues to run. MS Access is known to drop the control source for ActiveX controls when this occurs.

Recommended Solutions:

  1. Stop using "On error resume next", prevent the errors, and close the object instead of continuing on. When an error occurs, the user should close the object and re-open it. Provided you are using the code above, when the form closes and re-opens the Control Source will be restored by the code.
  2. The same solution recommended for Reports, will also work for Forms. The code to reset the value will be put in the On_Current event of the form and be aware that there is additional code needed to ensure the control source (text box) is properly updated with changes made to the Total Access Memo control.

How can I use Tab or Shift+Tab to move focus to another control with Total Access Memo?

The solution to this is to use the KeyPress or KeyDown event to perform the action you are trapping for.

To use this for the "Tab" or "Shift + Tab" Key, simply add the following Code to your form:

' This code moves focus out of the Total Access Memo Control to the next or previous control you want to set focus to

Option Compare Database
Option Explicit

Private mfShiftDown As Boolean

Private Sub mmoTest_KeyDown(KeyCode As Integer, Private mfShiftDown As Boolean

Private Sub mmoTest_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
  ' This code is from Microsoft Help for the KeyDown event
  ' Use bit masks to determine which key was pressed.

  mfShiftDown = ((Shift And acShiftMask) > 0)

End Sub

Private Sub mmoTest_KeyPress(keyascii As Integer)
  If KeyAscii = vbKeyTab Then
    If mfShiftDown Then
    End If
    KeyAscii = 0
  End If
End Sub

Where "mmoTest" is the name of your control and "NextControl" is the next control you want to set focus to and "PreviousControl" is the name of the previous control you want to set focus to when using Shift and Tab keys together.

How do I programmatically use the Clipboard with the Total Access Memo control?

 This code shows how to use the Windows Clipboard with Total Access Memo on Forms. Declarations and public constants needed to use Copy and Paste via the Windows SendMessage function.

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
  ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_COPY = &H301
Private Const WM_PASTE = &H302

' To copy as RTF including objects, you will need to get the long value of the clipboard format for Rich Text.
Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" _
  (ByVal lpString As String) As Long

Private Const CF_RTF = "Rich Text Format"
Private objFMSMemo As FMSMEMO
Private Sub Form_Load()
  ' Get a handle to the memo control
  Set objFMSMemo = Me.tamDemo.Object
End Sub

Sub Copy()
  ' Comments: Copies the contents of the Total Access Memo control
  ' to the Windows Clipboard. This subroutine assumes that
  ' the name of the Total Access Memo control is tamDemo and is
  ' set to a dimensioned object named "objFMSMemo" in the Form_Load Event.
  ' If your control is named differently, modify this code.
  Dim lngClipboardFormat As Long

  ' This code sends a Windows Copy message to the Memo control.
  If objFMSMemo.SelLength > 0 Then

    ' RegisterClipboardFormat returns a long value.
    ' lngClipboardFormat holds the returned value.
    lngClipboardFormat = RegisterClipboardFormat(CF_RTF)

    ' Use the returned value of lngClipboardFormat to specify the type data the clipboard will hold
    SendMessage objFMSMemo.hwnd, WM_COPY, lngClipboardFormat, 0
    MsgBox "Please select something to copy", vbOKOnly, "FMS Demo"
  End If

End Sub

Sub Paste()
  ' Comments: Copies the contents of the Windows Clipboard to the
  ' Total Access Memo control. This subroutine assumes that
  ' the name of the Total Access Memo control is tamTest.
  ' If your control is named differently, modify this code.
  ' This code sends a Windows Paste message to the Memo control.

  SendMessage objFMSMemo.hwnd, WM_PASTE, 0, 0

End Sub

Use this for Reports

Option Compare Database 
Option Explicit

Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function CloseClipboard Lib "User32" () As Long
Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "User32" () As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function RegisterClipboardFormat Lib "User32" Alias "RegisterClipboardFormatA" _
  (ByVal lpString As String) As Long

Private Const CF_RTF = "Rich Text Format"
Private Const GHND = &H42
Private Const MAXSIZE = 4096
Private lngClipboardFormat As Long

' Constant for the maximum report height set by Access to 22 inches

Function CopyToClipBoard(strValue As String)
  Dim hGlobalMemory As Long
  Dim lpGlobalMemory As Long
  Dim hClipMemory As Long
  Dim x As Long

  On Error GoTo PROC_ERR
  lngClipboardFormat = RegisterClipboardFormat(CF_RTF)
  ' Allocate moveable global memory.
  hGlobalMemory = GlobalAlloc(GHND, Len(strValue) + 1)

  ' Lock the block to get a far pointer to this memory.
  lpGlobalMemory = GlobalLock(hGlobalMemory)

  ' Copy the string to this global memory.
  lpGlobalMemory = lstrcpy(lpGlobalMemory, strValue)

  ' Unlock the memory.
  If GlobalUnlock(hGlobalMemory) <> 0 Then
    MsgBox "Could not unlock memory location. Copy aborted."
  End If

  ' Open the Clipboard to copy data to.
  If OpenClipboard(0&) = 0 Then
    MsgBox "Could not open the Clipboard. Copy aborted."
  End If

  ' Clear the Clipboard.
  x = EmptyClipboard()

  ' Copy the data to the Clipboard.
  hClipMemory = SetClipboardData(lngClipboardFormat, hGlobalMemory)

  If CloseClipboard() = 0 Then
    MsgBox "Could not close Clipboard."
  End If
  Exit Function

  MsgBox Err.Number & " " & Err.Description
  Resume PROC_EXIT
End Function

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
  tamDemo.SelStart = 0
  tamDemo.SelLength = Len(tamDemo.Text)
  CopyToClipBoard tamDemo.SelValue
  ' Continue with HeightOfText from Sample Application.
  ' ...
End Sub

Why do I have the error "Update Wizard not initialized properly" when trying to run the Update Wizard for Total Access Memo?

This error occurs when you attempt to run the Update Wizard by double clicking the "Update.exe" directly instead of running it from the Windows Programs Menu shortcut.

This is because the update.exe file requires parameters to run and return the correct information. In order to determine if there is an update available for this product, please run the update wizard program from the Windows Programs menu or Windows Metro menu.

Main Total Access Memo Page