我有一个工作表,其单元格可能包含有时超出单元格宽度和高度的文本。如果我没有注意到它并调整行高,则文本显示为截止值。有没有人有一个VBA片段或工具可以找到这些单元格,所以我可以调整它们?谢谢!
答案 0 :(得分:2)
识别哪个列太宽会很棘手,尤其是因为单元格中的文本可能具有不同的字体和/或字体大小。通过使用Range.AutoFit方法自动调整列的大小要容易得多。
例如,您可以按如下方式调用AutoFit方法:
Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
myRange.Columns.AutoFit
然而,Range.AutoFit方法可能有点过于激进,导致列 narrow 。因此,您可能希望创建一个建立最小列宽的方法:
Sub AutoFitColumns(theRange As Excel.Range, minColumnWidth As Double)
theRange.Columns.AutoFit
Dim column As Excel.Range
For Each column In theRange.Columns
If column.ColumnWidth < minColumnWidth Then
column.ColumnWidth = minColumnWidth
End If
Next column
End Sub
以上可以如下调用,以自动调整列,但最小宽度为8.5:
Dim myRange As Excel.Range
Set myRange = Application.Range("A1:C3")
Call AutoFitColumns(myRange, 8.5)
您还可以自动调整范围的行数。这需要的次数较少,但要这样做,你可以使用类似的东西:
myRange.Rows.AutoFit
希望这有帮助!
更新:回复克雷格的评论:
Thansk Mike。使用此电子表格 作为Web界面的结构输入 发电机使列宽变化 而且不应该调整。我真的 只是在找东西扫描一下 表单中任何文本的单元格 显示比细胞宽 将允许适合,从而需要 行高越大。我不是 寻找制作过程 调整,从他们那里找到他们 容易被忽视。任何想法 是什么?
嗯,显然你想做两个事情:(1)确定哪些细胞被切断,然后(2)纠正这些截止值。
我确实理解你希望在两个不同的阶段做到这一点,但步骤(1)几乎不可能在所有情况下使用Excel正确执行,因为不仅行高和列宽可以变化,而且文本换行可以打开或off,并且字体可以是任意数量的潜在样式和/或大小的非比例字体。
简而言之,没有办法可靠地识别哪些细胞被切断,而不是没有大量的工作。但是,如果将电子表格限制为仅一种字体样式并使用非比例字体,则可以减轻它。如果这样做,那么您可以简单地将列宽与单元格中文本的长度进行比较。这是因为Excel.Range.ColumnWidth属性返回其校准宽度,因此一个列宽的单位等于Normal样式中一个字符的宽度。对于比例字体,使用字符0(零)的宽度。
因此,对于简单的情况,不使用自动换行且字体是Normal格式,理想情况下,Normal字体是非比例字体,那么你可以循环范围内的所有单元格查找保持值的位置长于列宽:
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
MsgBox "The cell at " & cell.Address & " has text that is too long!"
End if
Next cell
但现在接下来的部分......你将如何纠正这个?如果你有一个非常简单的情况,其中没有使用自动换行并且字体是正常样式,并且理想情况下,Normal字体是非比例字体,那么你有几个选项:
(1)设置列宽以匹配单元格的值长度:
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
cell.ColumnWidth = Len(CStr(cell.Value))
End if
Next cell
(2)自动调整列:
Dim myRange As Range
Set myRange = Application.Range("A1:E5")
Dim cell As Excel.Range
For Each cell in myRange.Cells
If Len(CStr(cell.Value)) > cell.ColumnWidth Then
cell.Columns.AutoFit
End if
Next cell
但是如果我们要自动调整列,那么直接调用它就容易得多,而不首先检查列宽,因为不仅要一次校正所有单元格的宽度,而且Range.AutoFit方法可以处理任何样式的任何字体,包括非比例字体。
因此,直接进入自动调整方法,我们有两个选择:自动调整列,或自动调整行。根据您最近的报价,听起来您想要重新调整行的大小:
我真的 只是在找东西扫描一下 表单中任何文本的单元格 显示比细胞宽 将允许适合,从而需要 行高越大。
为此我将使用文本换行然后自动调整行。例如,
Dim rng As Excel.Range
Set rng = Application.Range("A1:E5")
With rng.Rows
.WrapText = True
.AutoFit
End With
我认为这些都是你的所有选择。最后,您想要做什么以及Excel能够做什么可能不完全匹配,但我认为您应该能够完成您需要的工作吗?如果有诀窍,请告诉我们......
- 迈克