显示MS访问记录';Excel中的富文本格式

显示MS访问记录';Excel中的富文本格式,excel,ms-access,dao,rtf,vba,Excel,Ms Access,Dao,Rtf,Vba,我想做什么 我有一个Access数据库(C:\Users\289894\Desktop\Database1.accdb) [Table1]的字段之一是[Memo] 该字段为Memo数据类型,文本格式设置为richtext。 例如,它可以将一些记录保存为粗体,将一些记录保存为斜体 我想从excel文件打开此Access数据库的连接,以便读取/写入此富文本字段 我使用的代码如下: Dim datab As Database Dim rs As Recordset Dim pa

我想做什么

我有一个Access数据库(C:\Users\289894\Desktop\Database1.accdb) [Table1]的字段之一是[Memo]

该字段为
Memo
数据类型,文本格式设置为
richtext
。 例如,它可以将一些记录保存为粗体,将一些记录保存为斜体

我想从excel文件打开此Access数据库的连接,以便读取/写入此富文本字段

我使用的代码如下:

    Dim datab As Database
    Dim rs As Recordset
    Dim path As String

    path = "C:\Users\289894\Desktop\Database1.accdb"

    Set datab = OpenDatabase(path)
    Set rs = datab.OpenRecordset("SELECT * FROM [Table1]")

        Debug.Print rs!Memo
        Range("A1") = rs!Memo
我的问题

这段代码可以很好地打开连接并读取普通文本字段,但富文本的作用方式令人惊讶(对我来说)。access中的原始文本是“aaa”。这是用粗体字写的“aaa”

运行代码后,debug.print和Range(“A1”)都写入了
aaa

如何更改代码以将格式发送到excel?我希望将“aaa”用粗体写在单元格A1中,就像在Access中一样

编辑:解决方法 这就解决了问题所提出的直接问题,而没有真正回答问题本身。它使用internet explorer将文本粘贴回富文本,不带标记

Sub Sample()
    Dim Ie As Object
    Dim rng As Range

        Set rng = Feuil1.Range("A1")

        Set Ie = CreateObject("InternetExplorer.Application")

        With Ie
            .Visible = False

            .Navigate "about:blank"

            .Document.body.InnerHTML = rng.Value

            .ExecWB 17, 0
            'Select all contents in browser
            .ExecWB 12, 2
            'Copy them
            ActiveSheet.Paste Destination:=rng


            .Quit
        End With

End Sub

试试看。循环范围是通用的。此外,该函数假定非常有限的HTML,如示例所示

Sub Test()

Dim cel As Range
For Each cel In Range("A1:A100")

    cel.Font.Bold = InStr(1, cel.Value, "<strong>")
    cel.Font.Italic = InStr(1, cel.Value, "<i>")
    cel.Value = RemoveHTML(cel.Value)

Next

End Sub

Function RemoveHTML(sHTML As String) As String

Dim sTemp As String
sTemp = sHTML

Dim bLeft As Byte, bRight As Byte
bRight = InStr(1, sTemp, "</")
bLeft = InStrRev(sTemp, ">", bRight)

RemoveHTML = Mid(sTemp, bLeft + 1, bRight - bLeft - 1)

End Function
子测试()
暗淡的cel As范围
对于范围内的每个cel(“A1:A100”)
cel.Font.Bold=InStr(1,cel.Value,“”)
cel.Font.Italic=InStr(1,cel.Value,“”)
cel.Value=RemoveHTML(cel.Value)
下一个
端接头
函数RemoveHTML(sHTML作为字符串)作为字符串
作为字符串的Dim sTemp
sTemp=sHTML
暗淡如字节,明亮如字节
亮度=仪表(1,sTemp,“,亮度)
RemoveHTML=Mid(sTemp,bLeft+1,bRight-bLeft-1)
端函数

这是一个有趣的问题。在设置或用户使用不同的导出方法方面,我没有一个简单的解决方案,但您可以使用的一种方法是在导入后循环行集,删除
html
标记,并根据标记将单元格设置为粗体或斜体。另外,标题似乎与问题无关。@ScottHoltzman很好地理解了标题,我不确定那里发生了什么。至于粘贴回HTML,我想了想,但我找到的最好答案是,它给我带来了一个错误(编辑:它不再适用于较新的IE版本)。您是否尝试了您链接的问题的这个答案?是的,我的列表中也没有所需的库,并且此代码应该在多台机器上运行,因此导入库不是一个真正的选项。我相当确定每个Windows机器都有FM20.dll,但这并不重要-有其他方法将字符串放入剪贴板,例如,不幸的是,我的示例就是这样,一个有限的例子。真正的最终目标是能够将我想要的字段及其格式发送到文本框(而不是用户表单文本框)。它可以包括字体粗体、斜体、大小和颜色等。我的想法是首先让它在一个单元格中工作(我成功地做到了,将添加我的答案),然后考虑如何更改为代码,以便我可以将富文本从单元格发送到文本框。由于这个问题在中没有得到回答,所以我认为将其分成两部分会更好,以供以后参考。