Through the user interface The Raiser's Edge automatically convertes the constructed Addressee value into a string.  This must be done manually through the API by saving the field to a temporary string and then replacing the Primary Addressee field with that same string.  The follow code demonstrates this functionality:

Public Sub TestEditable()
    Dim oConst As CRecord
    Dim oConsts As CRecords
    Set oConsts = New CRecords
    oConsts.Init REApplication.SessionContext
    Dim sAddr As String
    For Each oConst In oConsts
        Debug.Print oConst.Fields(RECORDS_fld_FULL_NAME)
        If oConst.Fields(RECORDS_fld_PRIMARY_ADDRESSEE_EDIT) = False Then
            sAddr = oConst.Fields(RECORDS_fld_PRIMARY_ADDRESSEE)
            On Error Resume Next
            oConst.Fields(RECORDS_fld_PRIMARY_ADDRESSEE) = sAddr
            oConst.Fields(RECORDS_fld_PRIMARY_ADDRESSEE_EDIT) = True
            If Err.Number <> 0 And oConst.Fields(RECORDS_fld_PRIMARY_ADDRESSEE) <> "" Then
                Debug.Print Err.Description
                Set oConst = Nothing
                Exit For
            End If
        End If
        Set oConst = Nothing
    Next oConst
    Set oConsts = Nothing

End Sub

Blackbaud provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with Microsoft Visual Basic and the tools used to create and debug procedures.  Blackbaud Customer Support can help explain the functionality of a particular procedure but they will not modify, or assist you with modifying, these examples to provide additional functionality.  If you are interested in learning more about VBA and API modules, contact our Sales department at