2017-02-15 71 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 –