【问题标题】:Excel 2010 VBA Text to Column for multiple sheets within one workbookExcel 2010 VBA 文本到列用于一个工作簿中的多个工作表
【发布时间】:2014-03-18 19:52:50
【问题描述】:

我的工作簿中有多个工作表。 其中两个工作表(工作表“A”和工作表“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. 我怎样才能让这段代码在每个工作表中独立工作,没有错误?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    试试这个:

    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 中有数据,我也会收到警告......如果我回答 OK ,发生覆盖......如果我回答 Cancel ,则不会发生错误。

    【讨论】:

    • 试过了 - 没有变化。如果我回答“否”,我仍然会得到消失的数据,如果我回答“好”,则会出现运行时错误。
    • 谢谢 - 至少运行时错误不再是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多