2015-05-02 49 views
2

我使用以下代码来在超过6个字符的细胞中的前9个字符保持在柱的字符串功能删除一个子:甲Sheet1的:
从细胞范围通过替换或左

Sub left_string_column() 

Dim cell As Range 
For Each cell In wb.Sheets("Sheet1").Range("A:A") 
If wb.Sheets.Len(cell.Value) > 5 Then cell.Value = Left(cell.Value, 9) 
Next cell 

End Sub 

我得到For Each cell In wb.Sheets("Sheet1").Range("A:A")

为什么是一个错误?

或者,我怎么能修改此代码以删除单元格值.TXT答:Sheet1一个? 对于这个我用这一个,但同样,有运行时错误:

Sub Delete_txt_file_names() 
Dim Cel As Range, Range As Range 
Dim Word As String 
    Set Range = wb.Sheets("Sheet1").Range("A:A") 
    Word = ".txt" 

    For Each Cel In Range 
     If Cel Like "*" & Word & "*" Then 
      Cel = Replace(Cel, Word, "") 
      End If 
    Next Cel 
End Sub 

这是为什么?

+1

您必须**将**变量* wb *设置为某个工作簿。 –

+0

'Dim Range As Range'◄** BAD **不要使用保留字作为变量的名称。 “Dim Word As String'很麻烦,但是'Range As Range'显然是错误的。 – Jeeped

回答

1

你必须包括Set wb = ActiveWorkbook 这样的:
为第一码:

Sub left_string_column() 

Set wb = ActiveWorkbook 
Dim cell As Range 

For Each cell In wb.Sheets("Sheet1").Range("A:A") 
If Len(cell.Value) > 6 Then cell.Value = Left(cell.Value, 9) 
Next cell 
Application.ScreenUpdating = True 
End Sub 

和第二代码应该是这样的:

Sub Delete_txt_file_names() 
Dim Cel As Range, Rng As Range 
Dim Word As String 
Set wb = ActiveWorkbook 
    Set Rng = wb.Sheets("Sheet1").Range("A:A") 
    Word = ".txt" 

    Application.ScreenUpdating = False 
    For Each Cel In Rng 
     If Cel Like "*" & Word & "*" Then 
      Cel = Replace(Cel, Word, "") 
     End If 
    Next Cel 
    Application.ScreenUpdating = True 
End Sub 

我希望这个作品现在为你。