2016-09-15 3 views
1

Привет Я пытаюсь создать функцию для вычисления мОм (МОм) моя функцияИзменение Часть шрифта текста в ячейке Excel с помощью VBA

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

с результатами будучи

40,00 мВт (если значения ячейки равны 24 и 1)

Как получить символ W as (Ω) ohms i фи изменить стиль ячейки шрифта в Symbol м изменений в микро (μ) символ

я попробовал платить с

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

что приводит к «циклическая ссылка ошибки» ы

Нужна помощь, чтобы решить это

ответ

2

Попробуйте использовать Unicode вместо Chr (87)

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

Damn вы @Captain сварливый, почему я не думал об этом LOL Потрясающие работы спасибо – rellik

0

, если вы хотите придерживаться 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 

возможное усиление, которое может быть обращение с «W» фактической позиции символа в строке, если это не всегда быть последним символом

, то вы можете добавить следующую функцию:

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 

конечно, что выше может быть еще как улучшить и сделать более надежными, например, обработка char длина параметра в GetCharacter() и, соответственно, в FormatOhm()

Смежные вопросы