在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
发表评论