循环通过床单不起作用

我正在使用下面的代码

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倍(因为我有10张)。 如果我删除循环它运行一次并closures,所以代码识别循环,它只是不遵循它。 我已经尝试过上述的变体,但每次都得到相同的问题。

任何想法将不胜感激。

丹科

雷切尔

您的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")这样的限定符的对象总是引用ActiveWorkbookActiveSheet 。 你有一个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 

你没有指定代码应该在哪个表上工作,你需要限定所有的范围:

 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