2013-02-05 87 views
0

我有以下代码来摆脱中间空格,换行和修剪修剪如何在Excel VBA中工作?

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 

它提供:

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

回答

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 
+0

Thax伙计干杯Shabar – shabar

1

你不能在一个范围内使用Trim。所述Trim文档状态:

TRIM(
所需参数是任意有效的字符串表达式。

此外,Trim不适合您的任务,因为它不会删除字符串中的空格。 (强调)这是在文件中所提及:

返回一个变体(字符串)包含指定字符串 的副本而不会导致空间(LTRIM),尾部空格(RTRIM),或两者 前缘和尾部空格(修剪)

+0

我认为他得到与之前的'Replace'命令 – Floris

0

由于修剪不支持范围,你可以添加以下内容:

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

免责声明:未经测试。查看其他答案以获得更完整的解

+0

Thax请告诉我摆脱** **两倍的空间使用以下代码Sub Trim() '删除前导空格= RIGHT(A1,LEN(A1)-1) Dim intCounter As Integer For intCounter = 1 To Sheets(“Sheet1”)。UsedRange.End(xlDown )。行 范围(“A”和intCounter)。值=修剪(范围(“A”和intCounter)。值) 下一步intCounter代码 – shabar

+0

对不起只有以下Dim intC ounter As Integer intCounter = 1 To Sheets(“Sheet1”)。UsedRange.End(xlDown).Row Range(“A”&intCounter).Value = Trim(Range(“A”&intCounter).Value)Next intCounter code – shabar

+1

你定义了一个没有带参数的子Trim(),并调用了一个函数Trim()...你可以通过改变sub的名字到myTrim()或类似的东西来解决这个问题。请注意,如果您的UsedRange行高一行,您的子将失败。测试UsedRange> 1的行数 - 将其视为单独的情况。 – Floris

-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