如何使用VBA检测不适合Excel单元格的值?

jms*_*ter 5 excel vba column-width row-height

我们正在使用各种工具生成很长的Excel工作表,必须对其进行检查并将其用作工作流中的后续输入。一些单元格对于包含的文本而言太小的问题。因此,正在阅读工作表的人员和程序将看不到相同的数据。

当Excel无法正确调整行高时,对于包含自动换行文本的合并单元格来说通常是这样。但是,还有其他情况:例如,当某些列的宽度被显式设置时,这对于长值是不够的。

|Group|Def1 |Subgroup|Definition| Id   |Data |Comment   |
|-------------------------------------------------------|
| G1  |     | G1-1   |Important |G1-1-1|...  |          |
|     |Long |        |about G1-1|G1-1-2|.....|........  |
|     |text |-------------------------------------------|
|     |about| G1-2   |Another   |G1-2-1|...  |          |
|     |group|        |important |G1-2-2|...  |long comme|
|     |G1.  |        |text about|G1-2-3|     |          |
|-------------------------------------------------------|
Run Code Online (Sandbox Code Playgroud)

此处,“定义”和“注释”中的某些单元格不完全可见。是否有任何方法以编程方式找到这种细胞?

Jea*_*ett 5

这是我以前使用过的一个技巧:

With Columns("B:B")
    oldWidth = .ColumnWidth ' Save original width

    .EntireColumn.AutoFit
    fitWidth = .ColumnWidth ' Get width required to fit entire text

    .ColumnWidth = oldWidth ' Restore original width

    If oldWidth < fitWidth Then
        ' Text is too wide for column.
        ' Do stuff.
    End If
End With
Run Code Online (Sandbox Code Playgroud)

当然,这将一次应用于整个列。您仍然可以通过将单元格一个一个地复制到一个虚拟列并在AutoFit那里进行测试来使用它。

但可能对您更有用的是我之前对这个问题的回答:根据列宽将文本拆分为多行。它描述了一种确定任何给定单元格中文本宽度的方法(并将其与单元格的实际宽度进行比较以确定文本是否适合)。

编辑回应您的评论:如果您的某些单元格足够高以显示 2 行或更多行文本,那么您可以使用我之前的回答中描述的类似方法,首先使用.EntireRow.AutoFit来确定字体的高度并.RowHeight确定如何许多行适合单元格,然后使用上一个问题的方法确定文本是否可以适合该宽度的单元格中的行数。


小智 5

要检测这些单元格(我不是在解决问题),可以使用Range对象的Text方法。

例如,Range("A1").Value可能是123456789,但是如果将其格式设置为Number,并且列不够宽,Range("A1").Text则将是“ ###”(或者单元格中可以容纳许多#号)。


Tra*_*ace 1

取消合并工作簿中的所有单元格并使用 Thisworkbook.sheets("Name").rows(index).entirerow.autofit 对于列也同样。除了美观原因之外,保留合并的单元格有什么用?仅考虑“基本单元格”的值(左上)。