使用 VBA 根据值自动格式化单元格

Posted

技术标签:

【中文标题】使用 VBA 根据值自动格式化单元格【英文标题】:Auto-format Cell Based on Value with VBA 【发布时间】:2020-03-21 15:00:09 【问题描述】:

我正在为我的团队开发一个数据库查询工具,但遇到了一个我无法解决的小问题。这个问题困扰了我一段时间!

问题: 感兴趣的文本从数据库返回是富文本格式(带有格式化标签)。我希望将其格式化(理想情况下)或纯文本(不理想)。我知道 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   


单击单元格时录制宏:这不提供通用解决方案。它显示了所有已完成的格式设置,但这是特定于单元格的。

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

这对我没有帮助。

我尝试了一些我在互联网上看到的东西;这些都没有奏效。具体来说,选择我想要格式化的单元格并输入击键(F2、Enter)、计算单元格,也许还有一两个解决方案。

你们觉得呢?

【问题讨论】:

【参考方案1】:

我也发送密钥keybd_eventSendkeys 更可靠。这对我有用

Option Explicit

' https://***.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

【讨论】:

以上是关于使用 VBA 根据值自动格式化单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vba 在 Excel 2007 中找到条件格式单元格的填充颜色值?

VBA使用列中找到的格式查找并替换工作表中找到的所有单元格

vba 如何在不更改值的情况下自定义格式单元格

如何使用 VBA 根据活动工作表中的单元格自动填充 Excel 表单?

VBA用户定义函数中的复制/过去特殊单元格格式

VBA_单元格格式设置代码