首页 > 解决方案 > 显示任何值的复选标记

问题描述

使用单元格格式 Excel 允许将任何值显示为任何预定字符。多年来我一直使用这个功能来显示一个复选标记,但现在下面的代码让我很头疼。

        With Rng
            .HorizontalAlignment = xlHAlignCenter
            .NumberFormat = """" & ChrW(252) & """"
            With .Font
                .Name = "Wingdings"
                .Bold = True
            End With
        End With

一切都在同一个工作簿中:有一个帐户,某种日记。我的代码过滤掉一个主题的条目并将结果写入专用表。该帐户有一列带有这种类型的复选标记,它们被正确复制到带有过滤数据的选项卡中。从过滤后的提取中,我的代码将项目复制到第三个选项卡中,其中信息显示在上下文中。数据(仅值)通过数组传输。作为此方法的结果,目标选项卡接收并显示单元格值。上面的代码旨在格式化受影响的单元格以显示复选标记。

一切正常,只是字体似乎没有被应用。格式化的单元格确实将Wingdings显示为应用的字体。该值存在并被抑制,但它没有显示任何内容,而不是复选标记。

单元格格式设置正确。由于它之前存在于工作簿中,因此值得注意的是没有添加新格式。(ChrW() 的使用是过去几年被遗忘的问题的遗留问题。Chr() 在这种情况下产生相同的结果。)我尝试在 NumberFormat 之前或之后设置字体。

我发现我当前版本的 Excel (365) 在其 Wingdings 中似乎没有复选标记。惊讶,因为它在同一个工作簿中,但我没有在Symbols. 相反,我在 Wingsdings2 中找到了 Chr(80)。应用相同的代码,单元格显示“P”,Wingsdings2显示为应用字体。

当然,我仔细检查了帐户中类似单元格的格式和过滤后的副本,并没有发现任何区别。我还尝试使用相同的设置再次格式化最终的单元格,但他们固执地盯着我看,眼神空洞。

作为致命一击,我将上面相同的代码应用于同一个工作簿中一张空白纸上的 ActiveCell,它运行得非常漂亮,大胆。那么,在它不起作用的工作表上可能有什么不同?实际上,这是我的问题

行被逐一插入,逐个单元格填充,并且在写入值之前对每个行应用不同的格式。但是使用 F8 单步执行代码并没有产生任何启示。我还尝试启用 ScreenUpdating (通常在代码运行时关闭)但没有不同的结果。那么,为什么没有正确应用指定的字体

细胞确实有两个特点。一个是它们是该行中的最后一个。另一个是该行中的所有其他单元格被合并。这导致将Merge命令应用于单个单元格。为了显示我绝望的程度,我添加了If Rng.Cells.Count > 1 Then Rng.Merge。当然,这并没有什么不同。

标签: excelvba

解决方案


推荐阅读