通过工作表循环不起作用

时间:2015-03-04 15:54:40

标签: excel vba loops excel-vba

我正在使用以下代码

Sub WMC()

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="G:\filedirectory.xls")

With wb

For i = 1 To Sheets.Count
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True
Next i

End With

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

由于某种原因,循环运行但不会从一张纸移动到下一张 - 我认为它只是在工作簿的第一张纸上运行相同的代码大约十次(因为我有10张)。如果我删除循环它运行一次并关闭所以代码识别循环,它只是不遵循它。我尝试过以上的变化,但每次都会遇到同样的问题。

任何想法都会非常感激。

丹科

拉​​结

2 个答案:

答案 0 :(得分:4)

您的With区块未对对象进行限定。

For i = 1 To Sheets.Count
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
Next i

Columns("A:A")等不合格对象始终引用ActiveSheet中的ActiveWorkbook。您有一个With块,但您没有将此对象与该With块关联。

试试这个:

For i = 1 To .Sheets.Count
    .Sheets(i).Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
Next i

或者,我的偏好就是使用For Each,在这种情况下没有理由做索引循环:

Dim ws as Worksheet
With wb
    For each ws in .Worksheets
        ws.Columns("A:A").TextToColumns Destination:=ws.Range("A1"), ...


    Next
    .Save
    .Close
End With

答案 1 :(得分:1)

您没有指定代码应该使用哪个工作表,并且您需要限定所有范围:

Sub WMC()

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:="G:\filedirectory.xls")

With wb

For i = 1 To .Sheets.Count
With .Sheets(i)
.Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True
End With
Next i

.Save
.Close
End With
End Sub