【问题标题】:VBA - Auto format wrapped cells so the width of the cell is equal to the width of the longest wordVBA - 自动格式化包装单元格,使单元格的宽度等于最长单词的宽度
【发布时间】:2017-06-05 18:55:45
【问题描述】:

我想设置每列的宽度,以便在换行的文本单元格中没有单个单词被分成 2 行。 Excel 会为宽度小于列宽的单词处理此问题。但是,比列宽的单词会被拆分。我希望该列自动格式化宽度,以便它足够宽,因此不需要拆分最长的单词。 Excel 有办法处理这个问题吗?

【问题讨论】:

  • 是的,你可以做类似 Columns("A:E").AutoFit
  • 谢谢,但是当使用换行文本时,如果列宽太细,AutoFit 会拆分较长的单词。
  • 你不能在 .Autofit 中使用自动换行
  • 下面的宏对你有用吗?
  • 是的,在大多数情况下。这不是一个完美的解决方案,因为我发现它不起作用并且显然只适用于某些字体和大小的情况。但是,它在我的应用程序中仍然很有帮助。

标签: vba excel


【解决方案1】:

这是一个很好的近似值。它将列的大小比最长的单词宽一点。所以单元格的宽度不会与最长的单词完全相同,它会稍微宽一些,但它会阻止最长的单词被拆分。

sub foo 是将列调整为 Sheet1 上单元格 A1 中最大单词的示例。您可以添加另一个函数来检查列中的所有单元格以获取列中最长的单词。现在我们只检查列中一个单元格中最长的单词。

Option Explicit

Sub foo()

    FitColToLongestWord Sheet1.Range("A1")

End Sub

Sub FitColToLongestWord(cell As Range)

    Dim strLongestWordLen   As String
    Dim str()               As String
    Dim LongestWordLength   As Integer

    str() = Split(cell.Value, " ")
    LongestWordLength = GetLongestWordLength(str())
    Sheet1.Columns(cell.Column).ColumnWidth = LongestWordLength

End Sub

Function GetLongestWordLength(str() As String) As Integer

    Dim i       As Integer
    Dim max     As Integer
    Dim current As Long

    max = Len(str(LBound(str)))
    For i = LBound(str) To UBound(str)
        current = Len(str(i))
        If current > max Then
            max = current
        End If
    Next i

    GetLongestWordLength = max

End Function

【讨论】:

  • 不幸的是,该代码只会将ColumnWidth 设置为最长单词中的字符数。但是适合单词所需的列的ColumnWidth 取决于正在使用的字体类型和大小(等),而不仅仅是单词中有多少个字符。
  • 同意。正如我所说,这是一个近似值,这就是为什么单元格宽度比最长的单词长一点的原因。如果根据字体变得太短,可以调整用于确定列宽的字长。就我而言,它实际上使单元格宽度比需要的宽一点。我认为这对于大多数应用程序来说都是一个很好的解决方案。
  • 谢谢!我发现一些单词仍然太宽,因此分成两行。但是,大多数情况下,这个解决方案对我来说效果很好。
猜你喜欢
  • 2018-09-11
  • 2021-08-07
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 2014-04-17
  • 1970-01-01
相关资源
最近更新 更多