2017-02-15 58 views
1

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

我试过下面的代码,但它只能在一个工作簿上工作,而我希望除“Testmac”wb之外的所有代码都被修改。

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 

回答

1

在你的代码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 
+0

你好非常感谢你这个快速回复,当我运行代码时出现错误:“没有数据被选中解析”。请帮助 –

+0

@ h.barry:尝试编辑!我猜它找到了一张空白纸,所以我添加了一个测试! ;) – R3uK

+0

你好,它的工作谢谢sooo –