excel vba Range对象的Characters属性无效的解决办法

在excel vba中Range对象的Characters属性可以返回Characters对象。

Characters对象可以操作单个单元格中的部分字符,比如通过Characters对象的Font属性可以设置单元格中部分字符的字体格式,比如添加下划线、加粗、加颜色等等。

再比如通过Characters对象的Text属性可以返回部分字符,并且替换部分字符。

比如以下代码将A1单元格中的部分字符替换为指定的字符:

Sub QQ1722187970()
    Dim oWk As Worksheet
    Dim oRng As Range
    Set oWk = Excel.ActiveSheet
    Set oRng = oWk.Range("a1")
    If Len(oRng) >= 256 Then
        '当A1单元格的字符长度≥256时
        sText = oRng.Value
        sText = Excel.Application.WorksheetFunction.Replace(sText, 230, 10, String(10, "t"))
        oRng.Value = sText
    Else
    '当A1单元格的字符长度<256时
    '先读取下第230个字符开始的10个字符
    Debug.Print oRng.Characters(230, 10).Text
    '替换为10个字符t
    oRng.Characters(230, 10).Text = String(10, "t")
    '再读取下第230个字符开始的10个字符
    Debug.Print oRng.Characters(230, 10).Text
    End If
End Sub

以上代码当单元格的字符长度是<256时,代码可以正常运行,当当单元格的字符长度是>=256时,用Characters对象的Text属性只能返回指定位置的字符,不能再设置指定位置的字符为其它字符,这是一个BUG。

为了解决这个问题,可以通过调用excel工作表函数Replace来替代Characters对象的Text属性,代码如下:

Sub QQ1722187970()
    Dim oWk As Worksheet
    Dim oRng As Range
    Set oWk = Excel.ActiveSheet
    Set oRng = oWk.Range("a1")
    If Len(oRng) >= 256 Then
        '当A1单元格的字符长度≥256时
        sText = oRng.Value
        sText = Excel.Application.WorksheetFunction.Replace(sText, 1, 10, String(10, "t"))
        oRng.Value = sText
    Else
    '当A1单元格的字符长度<256时
    '先读取下第230个字符开始的10个字符
    Debug.Print oRng.Characters(1, 10).Text
    '替换为10个字符t
    oRng.Characters(1, 10).Text = String(10, "t")
    '再读取下第230个字符开始的10个字符
    Debug.Print oRng.Characters(1, 10).Text
    End If
End Sub
       

发表评论