Excel 2010 VBA文本到列,用于一个工作簿中的多个工作表

时间:2014-03-18 19:52:50

标签: excel-vba vba excel

我的工作簿中有多张工作表。 其中两张(Sheet“A”和Sheet“B”)分配了以下代码:

Private Sub Worksheet_Change(ByVal target As Range)

Range("A:A").Select


    Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True

End Sub

如果将文本文件复制并粘贴到工作表“A”中,则会复制另一个文本文件并将其粘贴到工作表“B”中,一切正常。

如果首先将文本文件复制并粘贴到工作表“B”中,则会复制另一个文本文件并将其粘贴到工作表“A”中,最后会出现错误: 在第一次粘贴到工作表“B”后,对话框“你想替换目标单元格的内容吗?”出现。 (我回答OK) 然后在我粘贴到表单“B”后,我得到相同的对话框 - 如果我输入“否”,则列B中的数据消失。如果我回答OK,我收到运行时错误'1004': Text To Column method of Range class failed. 如何让这些代码在每张工作表中独立工作,没有错误?

1 个答案:

答案 0 :(得分:0)

尝试一下:

Private Sub Worksheet_Change(ByVal target As Range)
Application.EnableEvents = False
    Range("A:A").Select
    Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Application.EnableEvents = True
End Sub

修改#1

我必须重新启用事件

然后我按如下方式修改了宏:

Private Sub Worksheet_Change(ByVal target As Range)
    On Error Resume Next
    Application.EnableEvents = False
        Range("A:A").Select
        Selection.TextToColumns Destination:=Range("A:A"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
    Application.EnableEvents = True
End Sub

如果列 B 中有数据,我也会收到警告...............如果我回答确定,覆盖发生...............如果我回答取消,则不会发生错误。