粘贴时将文本分列

粘贴时将文本分列

目标

首先,这是我要尝试做的事情。我有一张包含一些可编辑列的工作表,例如 A1-A10。单元格 A11-A20 都是计算单元格,我希望隐藏并保护它们。当我从外部源粘贴数据时,它会以 CSV 格式出现。当我将数据粘贴到受保护的工作表中时,我希望这些数据以逗号分隔在可用的单元格 A1-A10 中。

问题

在工作表受到保护的情况下,TextToColumns 被禁用,因此粘贴我的数据不会在逗号分隔符上拆分,因为默认分隔符是制表符。

我尝试过的方法

  1. 我尝试使用 VBA 函数 TextToColumns,但受保护的工作表不允许这样做
  2. 我在现有的未受保护的“自述文件”表上创建了一个按钮,该按钮会将分隔符设置为逗号,并在虚拟单元格上执行拆分,希望在将数据粘贴到后续页面时,可以使用逗号作为分隔符,但这不起作用。粘贴的文本以完整的 csv 行的形式出现,没有分隔。
  3. 我手动执行了 #2 中的 TextToColumns 技巧,方法是单击功能区栏中的 TextToColumns 按钮。这确实有效,但我不想每次都执行此手动步骤。

问题

有没有一种我所不知道的简单方法可以做到这一点?我可以将 Excel 中的默认分隔符设置为逗号吗?正在寻找这方面的建议,或者最坏的情况是,我是否只能在步骤 3 中手动执行?

笔记

为什么我不能取消对工作表的保护?我希望对其进行保护,这样如果我不小心从源中抓取了太多列并将其粘贴到工作表中,它不会覆盖我的任何计算字段。

答案1

您可以在 TextToColumns 调用之前在 VBA 宏中取消对工作表的保护,然后重新保护它:

ActiveSheet.Unprotect
ActiveRange.TextToColumns ...
ActiveSheet.Protect ...

请注意,Worksheet.Unprotect 方法的唯一参数是可选密码,仅当工作表受密码保护时才需要(就我个人而言,我从不关心密码)。

Worksheet.Protect() 具有所有保护选项的参数,因此您需要选择之后想要在工作表上执行的操作(如果有);请参阅工作表保护文档

但是,为了避免覆盖计算字段,最安全的做法是在新工作簿中打开 csv 文件,然后将所需的列复制并粘贴到公式工作表中(不要忘记关闭临时工作簿)。

但是,如果您可以保证列数不超过固定值,则可以使用 FieldInfo 来抑制第 10 列之后的任何内容(使用,FieldInfo:=Array(Array(1, xlGeneralFormat), Array(2, xlGeneralFormat), ... Array(9, xlTextFormat), Array(!0, xlGeneralFormat), Array(11, xlSkipColumn), Array(12, xlSkipColumn))但如果列数多于使用 xlSkipColumn 抑制的列数,它们将被解析并覆盖您的公式。

相关内容