文本列许多Excel工作簿

我想使用vba在许多工作簿上执行文本列。

我尝试了下面的代码,但它只能在一个工作簿上工作,而我想要除“Testmac”以外的所有的修改。

Sub sdptest() Dim w As Workbook For Each w In Workbooks If w.Name <> "testmac" Then Columns("A:A").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _ :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True Selection.Delete Shift:=xlToLeft Range("A1").Select End If Next w End Sub 

在您的代码中, Columns("A:A")隐式引用ActiveWorkbook.ActiveSheet.Columns("A:A")
这就是为什么它只能在一张纸上工作!

以下是在所有打开的工作簿中执行此操作的代码:

请注意,我已经评论删除列的部分(这似乎是奇怪的后,把数据),所以只是取消注释,如果你需要! ;)

 Sub sdptest() Dim w As Workbook Dim wS As Worksheet For Each w In Workbooks If InStr(1, LCase(w.Name), "testmac") Then Else For Each wS In w.Sheets With wS.Columns("A:A") If Application.WorksheetFunction.CountA(.Cells) > 0 Then .TextToColumns Destination:=Range("A1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, _ Semicolon:=False, _ Comma:=True, _ Space:=False, _ Other:=False, _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True '.Delete Shift:=xlToLeft Else End If End With 'wS.Columns("A:A") Next wS End If Next w End Sub