我正在使用以下代码
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张)。如果我删除循环它运行一次并关闭所以代码识别循环,它只是不遵循它。我尝试过以上的变化,但每次都会遇到同样的问题。
任何想法都会非常感激。
丹科
拉结
答案 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