使用vba更改Excel单元格中的部分文本字体

嗨,我想创build一个函数来计算毫欧(mOhms)我的function是

Function mOhms(Current, Voltage) mOhms = Format((Voltage / Current) * 1000, "00.00 m") & Chr(87) End Function 

结果是

40.00 mW(如果单元格值分别为24和1)

如果我将单元格字体样式更改为符号m,则如何获得W(Ω)欧姆符号将更改为微(μ)符号

我曾尝试付钱

 With ActiveCell.Characters(Start:=Len(ActiveCell) - 1, Length:=1).Font .FontStyle = "Symbol" End With 

这导致“循环参考错误”

需要一些帮助来解决这个问题

尝试使用Unicode代替Chr(87)

 Function mOhms(Current, Voltage) mOhms = Format((Voltage / Current) * 1000, "00.00 m") & ChrW(&H2126) End Function 

如果你想坚持与Characters对象,你必须:

  • 使用Name属性,而不是FontStyle之一

  • 请将其“ Start参数设置为范围文本的最后一个字符,而不是倒数第二个字符

所以你可能想编码如下:

 Sub main() With Range("G1") '<--| change this to any valid Range reference .Value = mOhms(24, 1) '<--| set the referenced range value FormatOhm .Cells '<--| format the referenced range value last character End With End Sub Function mOhms(Current, Voltage) mOhms = Format((Voltage / Current) * 1000, "00.00 m") & Chr(87) End Function Sub FormatOhm(rng As Range) With rng .Characters(Start:=Len(.Value), Length:=1).Font.name = "Symbol" End With End Sub 

一个可能的增强可能是处理string中的“W”字符的实际位置,它应该不总是最后一个字符

那么你可以添加以下function:

 Function GetCharacter(rng As Range, char As String) As Long Dim i As Long With rng For i = 1 To .Characters.Count If .Characters(i, 1).Text = char Then GetCharacter = i Exit For End If Next i End With End Function 

如果不存在任何匹配,则返回一个Long ,其中传入的字符位置在传递的范围值内,或者返回0

在这种情况下,你必须稍微改变FormatOhm()函数来处理实际的字符位置:

 Sub FormatOhm(rng As Range, iChar As Long) If iChar = 0 Then Exit Sub '<--| exit if no character matching occurred With rng .Characters(Start:=iChar, Length:=1).Font.name = "Symbol" End With End Sub 

然后你的“主”代码就可以得到:

 Sub main() With Range("G1") '<--| change this to any valid Range reference .Value = mOhms(24, 1) '<--| set the referenced range value FormatOhm .Cells, GetCharacter(.Cells, "W") '<--| format the referenced range value character corresponding to "W", if any End With End Sub 

当然上面可以做进一步的改进和更强大的,例如在GetCharacter()处理char参数的长度,相应的在FormatOhm()