【问题标题】:Excel Unresponsive after Trim on 6559 Rows修剪 6559 行后 Excel 无响应
【发布时间】:2022-02-03 08:07:54
【问题描述】:

我正在尝试使用 VBA 在 Excel 工作表、单列、6559 行相同的 3 个重复的 7 位数字上运行此 Sub,但它变得无响应。我没有选择整列,一列中只有 6559 行。没有公式。这是正常的吗?我做错了什么?

Sub TrimWhiteSpace ()
   Dim rng as Range
   Set rng as Selection
   For Each cell In rng
      cell.Value = Trim(cell)
   Next cell
End sub

我尝试过将 trim 用作 Trim 和 Trim$。

i7 8 核 32gb 内存 SSD。 Office365 桌面。

【问题讨论】:

标签: excel vba


【解决方案1】:

宏与工作表单元格的交互非常耗时。 考虑以下代码。它需要您的选择来排列。修改它然后粘贴回来。因此,您的宏仅引用工作表 2 次,而不是代码中的数千次。

Sub TrimWhiteSpace()
   Dim rng As Range
   Set rng = Selection
   
'   For Each cell In rng
'      cell.Value = Trim(cell)
'   Next cell
    
    Dim rangeArray, i As Long, j As Long
    'Note that if Selection is single cell you'll get an error.
    'Add handling of single cell selection
    
    'put range to array
    rangeArray = rng.Value
    'work with array in memory
    For i = 1 To UBound(rangeArray, 1)
        'If Selection is always one column remove nested j-loop
        'rangeArray(i, 1) = Trim(rangeArray(i, 1))
        For j = 1 To UBound(rangeArray, 2)
            rangeArray(i, j) = Trim(rangeArray(i, j))
        Next
    Next
    'paste back array to range
    rng.Value = rangeArray
End Sub

与@JvdV 链接一样,此代码将按值替换任何公式。但是您告诉您的范围不包含公式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多