Форматирование текста в переменной

Автор Посетитель, 17 марта 2023, 10:42

Посетитель

Всем привет!
Есть задачка - взять из массива (ранее созданного) текст, его отформатировать (цвет, жирность шрифта) и отправить в буфер обмена.

Пока реализовал через вставку в документ Word с последующим копированием.

Есть ли вариант сделать это без вставки в документ Word?

Администратор

Задание не понятно, откуда что берётся, куда что вставляется. Если вы создали тему в разделе "Макросы в Word", значит вы работаете в программе Word или вы работаете в другой программе?

Посетитель

Да, нужен макрос в Word VBA.
Задача - отформатировать текст из переменной, после чего отправить его в буфер обмена.

Текущий код (в переменной "str" содержится текст, который нужно отформатировать):
Спойлер
Dim WordDoc2 As Document
Application.ScreenUpdating = False
Set WordDoc2 = Documents.Add

WordDoc2.Activate

        Selection.InsertAfter Text:=str
                   
        With Selection.ParagraphFormat
            .LeftIndent = CentimetersToPoints(0)
            .RightIndent = CentimetersToPoints(0)
            .SpaceBefore = 0
            .SpaceBeforeAuto = False
            .SpaceAfter = 0
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpaceSingle
            .Alignment = wdAlignParagraphLeft
            .WidowControl = True
            .KeepWithNext = False
            .KeepTogether = False
            .PageBreakBefore = False
            .NoLineNumber = False
            .Hyphenation = True
            .FirstLineIndent = CentimetersToPoints(0)
            .OutlineLevel = wdOutlineLevelBodyText
            .CharacterUnitLeftIndent = 0
            .CharacterUnitRightIndent = 0
            .CharacterUnitFirstLineIndent = 0
            .LineUnitBefore = 0
            .LineUnitAfter = 0
            .MirrorIndents = False
            .TextboxTightWrap = wdTightNone
            .CollapsedByDefault = False
        End With
       
        For Each t In Selection.Characters
            If t = "[" Then Flag = 1
            If t = "{" Then Flag = 2
                       
            Select Case Flag
            Case 1
                t.Font.Italic = True
                t.Font.ColorIndex = 6
            Case 2
                t.Font.Italic = True
                t.Font.Color = 12611584
            End Select
           
           
            If t = "]" Then Flag = 0
            If t = "}" Then Flag = 0
           
            If t = "{" Or t = "}" Then t.Delete

        Next
   
        Selection.Copy
   
    WordDoc2.Close (False)
    Application.ScreenUpdating = True
[свернуть]

Администратор

На сколько мне известно, в VBA нет инструментов для помещения форматированного текста в буфер обмена Виндоуса. Есть объект "DataObject", но он работает только с обычным текстом.
Возможно нужно использовать Win32 API-функции (по ним не смогу помочь, т.к. там много информации потребуется читать).
Можете спросить на других форумах, может кто знает.