Делаем слово жирным в текстовом поле - PullRequest
0 голосов
/ 12 июня 2018

Новое в переполнении стека. Я строю макрос в Excel с VBA.По сути, у меня есть файл с несколькими вкладками с информацией в таблицах, в этих таблицах есть текст, и некоторые слова из этого текста выделены жирным шрифтом и повторяются на каждой вкладке (скажем, владелец и процесс).Я отображаю эту информацию в текстовом поле, расположенном в форме в соответствии со строкой таблицы, которую они выбирают ранее в списке, текст отображается правильно, но игнорирует форматирование текста (жирный и курсив).Есть ли способ отобразить форматирование текста в текстовом поле, как в таблице?

Надеюсь, я достаточно ясно дал понять.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Возможное решение в пользовательской форме с помощью элемента управления Webbrowser

Из-за вашего комментария: "... на самом деле я использую MSForms.TextBox "

Возможный обходной путь - создание простого HTML-файла с использованием тега b (например, blabla внутри обычного текста полужирный текст ...)для полужирного текста и загрузки его в веб-браузер (требуется ссылка на элементы управления Microsoft Internet), например, через WebBrowser1.Navigate ThisWorkbook.Path & "\ topic.htm".

Поскольку HTML обычно используетКодирование utf-8 . Я демонстрирую подход, использующий системную функцию WideCharToMultiByte (вызов API).

Пример вызова с использованием вспомогательных функций (вызовы API)

' declare and assign simple html string
  Dim htmlstring as String
  htmlstring = "<html><body><div>Normal text <b>bold text</b> further text</div></body></html>"
' write html file via helper procedure  
  writeUtf8 htmlstring, ThisWorkbook.Path & "\topic.htm"
' load html file into WebBrowswer control
  Me.WebBrowser1.Navigate ThisWorkbook.Path & "\topic.htm"

Вспомогательные процедуры

Предлагаю написать отдельныйМодуль кода для этих вспомогательных функций:

Option Explicit  ' declaration head of separate code module

' Declare API Function
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
  ByVal CodePage As Long, _
  ByVal dwFlags As Long, _
  ByVal lpWideCharStr As Long, _
  ByVal cchWideChar As Long, _
  ByVal lpMultiByteStr As Long, _
  ByVal cbMultiByte As Long, _
  ByVal lpDefaultChar As Long, _
  ByVal lpUsedDefaultChar As Long) As Long


Public Sub writeUtf8(ByVal s As String, ByVal datei As String)
' Purpose: save HTML String in utf-8 mode 
' Note:    called by  writeUtf8 htmlstring, thisworkbook.path & "\topic.htm"
Dim file As Integer
Dim B() As Byte
  file = FreeFile
  Open datei For Binary Access Write Lock Read Write As #file
  getUtf8 s, B
  Put #file, , B
  Close #file
End Sub

Private Sub getUtf8(ByRef s As String, ByRef B() As Byte)
' Note: called by above helper function; uses API call (see declaration head)
Const CP_UTF8 As Long = 65001
Dim len_s As Long
Dim ptr_s As Long
Dim size As Long
  Erase B
  len_s = Len(s)
  If len_s = 0 Then _
    err.Raise 30030, , "Len(WideChars) = 0"
  ptr_s = StrPtr(s)
  size = WideCharToMultiByte(CP_UTF8, 0, ptr_s, len_s, 0, 0, 0, 0)
  If size = 0 Then _
    err.Raise 30030, , "WideCharToMultiByte() = 0"
  ReDim B(0 To size - 1)
  If WideCharToMultiByte(CP_UTF8, 0, ptr_s, len_s, VarPtr(B(0)), size, 0, 0) = 0 Then _
    err.Raise 30030, , "WideCharToMultiByte(" & Format$(size) & ") = 0"
End Sub
0 голосов
/ 12 июня 2018

Типичный пример для Shape текстового поля (не ActiveX) :

Sub BoxMaker()
    ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 217.5, 51#, _
        482.25, 278.25).Select
    Selection.Name = "SPLASH"
    Selection.Characters.Text = "Please Wait for Macro"
    With Selection.Characters(Start:=1, Length:=21).Font
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 36
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With

    Selection.Characters(Start:=8, Length:=4).Font.Bold = True

    Selection.HorizontalAlignment = xlCenter
    Selection.VerticalAlignment = xlCenter
End Sub

enter image description here

Вы можете форматировать текств текстовом поле, похожем на текст в ячейке.

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