0

我有以下代码可以消除中间空格、换行和修剪

Trim不起作用。可能是什么原因?

Sub Replace()

  With Sheets("Input_Data").Range("A1:A6300")
  'With Sheets("Input_Limits").Range("A1:A6300")

    .Cells.Replace "  ", " ", xlPart, xlByRows, False
    .Cells.Replace vbLf, "", xlPart, xlByRows, False
    '.Cells.Trim

  End With

End Sub

它给:

错误 - 对象不支持此属性方法

4

4 回答 4

1

您不能Trim在范围内使用。该Trim文档指出:

Trim( string )
所需的字符串参数是任何有效的字符串表达式。

此外,Trim它不适合您的任务,因为它不会删除字符串中的空格。文档中提到了这一点(添加了重点):

返回一个 Variant (String) 包含指定字符串的副本,没有前导空格 (LTrim)、尾随空格 (RTrim)或前导空格和尾随空格 (Trim)

于 2013-02-05T01:53:51.633 回答
1

以下代码将满足您的要求。请注意,我将修剪操作应用于活动工作表中的所有单元格;如果这不是你想要的,你显然可以编辑它......

Sub trimAll()
  Dim c As Range

  For Each c In ActiveSheet.UsedRange.Cells
    If Not (IsEmpty(c) Or IsError(c) Or IsFormula(c)) Then
      c.Value = Trim(c.Value)
    End If
  Next c

  With ActiveSheet.UsedRange.Cells
    .Cells.Replace "  ", " ", xlPart, xlByRows, False
    .Cells.Replace vbLf, "", xlPart, xlByRows, False
  End With

End Sub

Function IsFormula(c)
  ' use this to test for formulas - don't edit those or they become values!
  IsFormula = True
  On Error Resume Next
  If Left(c.Formula, 1) = "=" Then IsFormula = True Else IsFormula = False
End Function
于 2013-02-05T15:33:28.043 回答
0

由于 Trim 不支持范围,您可以添加以下内容:

Dim c as Cell
For each c in .Cells
  c.Value = Trim(c.Value)
Next c

免责声明:未经测试。有关更完整的解决方案,请参阅其他答案。

于 2013-02-05T03:35:56.600 回答
-1
Sub DescTrim(Cx As Integer)  
    Dim Rx As Integer: Rx = 5 'Start at row 5  
    Dim STrimmed As String  
        For Rx = 5 To ActiveSheet.UsedRange.Rows.Count  
            STrimmed = Trim(Cells(Rx, Cx).Value)  
            While InStr(STrimmed, chr(32) & (chr(32))  
                STrimmed = Replace(STrimmed, Chr(32) & Chr(32), chr(32))  
            Wend  
            Cells(Rx, Cx).Value = STrimmed  
        Next  
End Sub  
于 2015-12-09T19:50:51.773 回答