Frequently Asked
Questions for Total Access Memo
Current Version
Pre Sales Questions
Post Sales Questions
Older Versions
Pre Sales Questions
What 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 Access versions that support this standard. That
includes Access 2010 (32-bit version), 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.
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.
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!
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.
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.
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:
-
Import your own table into the Total
Access Memo sample database of the demo version.
-
Rename the table "tblRTF" to "tblRTF_FMS"
-
Rename your imported table to "tblRTF"
-
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
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.
You can set the default font and other settings in two
ways:
1. Manually set the font property in the property sheet:

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
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.
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.
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.
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.
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.
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
'
'RELINK YOUR TABLES AFTER THE OPTION IS TURNED OFF!
'----- 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,
please delete them.
C. Please reinstall the full version of the product only.
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.
- 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.
- Set the Text box to the same Control Source that Total Access Memo
is currently bound to.
- Remove the Control Source for the Total Access Memo Control.
- 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:
- 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.
- 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.
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
Me!PreviousControl.SetFocus
Else
Me!NextControl.SetFocus
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.
' 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
Else
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
'This is set by Access at 22 inches
Const MAXREPORTHEIGHT = 31680
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)
PROC_EXIT:
If CloseClipboard() = 0 Then
MsgBox "Could not close Clipboard."
End If
Exit Function
PROC_ERR:
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
' DO YOUR PASTE INTO OTHER PROGRAM (like MS WORD) here
'
' Continue with HeightOfText from Sample Application.
' ...
End Sub

Main Total
Access Memo Page