在Excel中显示MS-Access记录的RTF格式

时间:2016-07-05 16:45:36

标签: excel excel-vba ms-access dao rtf vba

我想做什么

我有一个Access数据库(C:\ Users \ 289894 \ Desktop \ Database1.accdb) [表1]的一个字段是[备忘录]。

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

我想从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

我的问题

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

运行代码后,debug.print和Range(&#34; A1&#34;)都会写入<div><strong>aaa</strong></div>

如何更改我的代码以将格式发送到excel?我想要&#34; aaa &#34;在单元格A1中以粗体显示,就像它在Access中一样。

编辑:解决方法 这解决了问题所提出的直接问题,而没有真正回答问题本身。它使用Internet Explorer将文本粘贴为Rich Text,而不使用标记。

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

1 个答案:

答案 0 :(得分:0)

给它一个机会。循环范围是通用的。此外,函数假设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