Автоформатирование ячейки на основе значения с VBA - PullRequest
0 голосов
/ 21 марта 2020

Я разрабатываю инструмент для запросов к базе данных для своей команды, и у меня произошел небольшой сбой, который я не смог решить. Это уже давно меня беспокоит!

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

Пример запрашиваемого текста:

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}

{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\lang1033\f0\fs16 Some text will be right here.\par   

}

Запись макроса при нажатии на ячейку: это не дает общего решения. Он показывает все форматирование, которое было сделано, но это указывается c для ячейки.

ActiveCell.FormulaR1C1 = "Some text will be right here." & Chr(10) & "  "

Это мне не полезно.

I ' мы попробовали несколько вещей, которые я видел в интернете; ни один из которых не работал. В частности, выбирая ячейку, которую я хотел бы отформатировать, и выбрасывая нажатия клавиш (F2, Enter), вычисляя ячейки и, возможно, другое решение или два.

Что вы думаете?

1 Ответ

0 голосов
/ 21 марта 2020

Также отправляю ключи keybd_event надежнее Sendkeys. Это сработало для меня

Option Explicit

' https://stackoverflow.com/a/49065905/6600940
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

' http://www.vbforums.com/showthread.php?277384-VB-Key-COnsts
Public Const VK_F2 = &H71
Public Const VK_RETURN = &HD

Sub ParseAllRange()
    Dim rngCell As Range
    Application.ScreenUpdating = False
    For Each rngCell In Range("B13:B19")
        rngCell.Select
        keybd_event VK_F2, 0, 0, 0
        keybd_event VK_RETURN, 0, 0, 0
        DoEvents
    Next
    Application.ScreenUpdating = True
End Sub
...