Введите символ Unicode в текстовое поле ActiveX - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь добавить символ Ом (Ω) в TextBox.Value при создании текстового поля на листе Excel.

Юникодное (шестнадцатеричное) значение символа Ом равно 2126.

Код ставит? вместо специального символа.

    Set objTxtBx = ws.OLEObjects.Add(classtype:="Forms.TextBox.1")
    With objTxtBx
        .Name = "LG_tb_17_S" & x & "_NG"
        .Left = lft
        .Width = w
        .Top = t2
        .Object.BackStyle = 0
        .Object.TextAlign = 2
        .Object.SpecialEffect = 0
        .Object.MultiLine = False
        ' .Object.Caption = "String " & x & " Measured"
        .Object.AutoSize = False
        .Object.BorderStyle = 1
        .Object.Value = DataEntryForm.Controls(objTxtBx.Name).Value & ChrW(2126)
        With .Object.Font
            .Name = "Arial"
            .Bold = True
            .Size = 10
            .Underline = False
        End With
        .Object.WordWrap = False
        .Height = h
                
        h = .Height
        t = .Top
        nT = .Top
        t5 = .Top
    End With
    lft = lft + w
End If

Исправленный код:

Sub creatBox()
Set ws = Sheet1
x = 1

Set objTxtBx = ws.OLEObjects.Add(classtype:="Forms.TextBox.1")
With objTxtBx
    .Name = "Test1"
    .Left = 20
    .Width = 100
    .Top = 20
    .Height = 30
    .Object.BackStyle = 0
    .Object.TextAlign = 2
    .Object.SpecialEffect = 0
    .Object.MultiLine = False
    ' .Object.Caption = "String " & x & " Measured"
    .Object.AutoSize = False
    .Object.BorderStyle = 1
    .Object.Value = 1 & " " & ChrW(937)
    With .Object.Font
        .Name = "Arial"
        .Bold = False
        .Size = 14
        .Underline = False
    End With
    .Object.WordWrap = False

End With
End Sub

Решение: Пришлось переместить .Object.Value = 1 & " " & ChrW(937) ниже настройки .Font, чтобы знак Ом работал все время. Не уверен, почему, если он был выше .Font, он не отображался правильно, когда текстовое поле не было в фокусе.

Код решения:

Sub creatBox()
Set ws = Sheet1

Set objTxtBx = ws.OLEObjects.Add(classtype:="Forms.TextBox.1")
With objTxtBx
    .Name = "Test1"
    .Left = 20
    .Width = 100
    .Top = 20
    .Height = 30
    .Object.BackStyle = 0
    .Object.TextAlign = 2
    .Object.SpecialEffect = 0
    .Object.MultiLine = False
    '  .Object.Caption = "String " & x & " Measured"
    .Object.AutoSize = False
    .Object.BorderStyle = 1

    With .Object.Font
        .Name = "Arial"
        .Bold = False
        .Size = 14
        .Underline = False
    End With
    .Object.WordWrap = False
    .Object.Value = 1 & " " & ChrW(937)

End With
End Sub            

1 Ответ

0 голосов
/ 15 июля 2020

Извините, изначально опубликовано Решение в неправильном месте: пришлось переместить .Object.Value = 1 & "" & ChrW (937) под настройкой .Font, чтобы знак Ом работал все время. Не уверен, почему, если это было выше. Шрифт не отображался правильно, когда текстовое поле не было в фокусе.

Ниже приведен код решения:

Sub creatBox()
Set ws = Sheet1

Set objTxtBx = ws.OLEObjects.Add(classtype:="Forms.TextBox.1")
With objTxtBx
    .Name = "Test1"
    .Left = 20
    .Width = 100
    .Top = 20
    .Height = 30
    .Object.BackStyle = 0
    .Object.TextAlign = 2
    .Object.SpecialEffect = 0
    .Object.MultiLine = False
'            .Object.Caption = "String " & x & " Measured"
    .Object.AutoSize = False
    .Object.BorderStyle = 1

    With .Object.Font
        .Name = "Arial"
        .Bold = False
        .Size = 14
        .Underline = False
    End With
    .Object.WordWrap = False
    .Object.Value = 1 & " " & ChrW(937)

End With

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...