如何使用VBA将Access表中的文本字段转换为富文本提示

时间:2013-12-29 18:23:12

标签: sql vba ms-access access-vba ms-access-2010

我的用户有许多后端.accdb数据库(我无法直接访问)。我需要编写一些vba来修改这些数据库中某些表的结构,以将Text Fields转换为Rich Text备忘录。 (这些字段已经包含文本,包括Access“富文本”,即相关的html编码)。

我需要:

  1. 将字段修改为富文本备忘录。
  2. 修改现有内容(如果适用),以便在表单,数据表和报告中正确显示为Access富文本。
  3. 我可以编写一个SQl语句,将TEXT(255)中的字段修改为MEMO:

    ALTER TABLE tblSource ALTER COLUMN Detail1 MEMO
    

    但是,这会将生成的备注字段保留为纯文本备忘录。

    我考虑过创建一个新的Rich Text字段然后复制旧的Rich Text字段(使用SQL CREATE TABLE语句后跟UPDATE语句,该语句将Plaintext函数应用于旧字段的内容,然后复制结果到新的字段,然后进一步SQl删除旧字段并重命名新的)但无法找到如何创建一个富文本备忘录(默认似乎是纯文本)。

    广泛的网络搜索没有显示我可以部署的任何其他技术。这是一个为每个文件运行一次的过程,因此它不需要优雅或快速,但它确实需要防弹!

1 个答案:

答案 0 :(得分:3)

由于 Rich Text 不是数据类型,并且不是可以使用SQL语句定义或修改的字段属性,因此您需要VBA来设置字段的 TextFormat 属性。

您可以从此代码示例中调整技术。

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set db = CurrentDb
Set tdf = db.TableDefs("Table1")
Set fld = tdf.Fields("memo_fld")
Debug.Print "acTextFormatPlain: " & acTextFormatPlain & _
    "; acTextFormatHTMLRichText: " & acTextFormatHTMLRichText
With fld.Properties("TextFormat")
    Debug.Print "TextFormat: " & .Value
    If .Value = acTextFormatPlain Then
        .Value = acTextFormatHTMLRichText
        Debug.Print "TextFormat changed to: " & .Value
    End If
End With

请注意,代码是从包含目标表的数据库运行的。如果Table1实际上是指向另一个Access db文件中的表的链接,则代码将失败。

另请注意,仅适用于备注字段。 TextFormat 属性不是为常规文本数据类型字段创建的,因此会抛出错误#3270,“找不到属性。”

Debug.Print tdf.Fields("some_text").Properties("TextFormat").Value

由于您将常规文本字段转换为备注字段,因此这一点可能不是问题。我只是在你偶然发现它时才提到它。

ColeValleyGirl发现并不总是为新备忘录字段创建 TextFormat 属性。