【发布时间】:2015-11-30 04:48:56
【问题描述】:
我试图了解为什么某些代码在 Excel 2010 中不起作用。
我有一个文件,其中单元格 A1:K200 是表格的一部分(“主页”选项卡中的“表格格式”选项),但第 2-13 行被隐藏以用于数据验证组合框。标题行和行带选项已启用。我想要做的是从另一个工作簿复制(通过用户按 Ctrl-C)和粘贴(通过用户按 Ctrl-V)数据,然后在 Worksheet_Change 中有一个宏函数,它将转置数据(基于值工作表上的复选框)并仅粘贴值。 A-H 列将填写其他数据。
我已禁用事件和屏幕更新,将单元格 I14:I200 的范围设置为 StdCost 用于相交函数,然后使用以下代码捕获对上述范围的更改。 optTranspose 是我放在工作表上的复选框,Target 是 Excel 设置的变量,作为 Worksheet_Change 函数的一部分。
If Not Application.Intersect(Target, StdCost) Is Nothing Then
If Application.CutCopyMode = xlCopy Then
Application.Undo
.Range("I" & Target.Row).PasteSpecial Paste:=xlPasteValues, Transpose:=optTranspose
End If
End If
上面的代码可以工作,但根据我的测试,它只能在最多粘贴 4 个值的情况下工作,或者如果我从第 15 行或以下的行开始粘贴,它将工作。但是,如果我粘贴 5+ 个值,我会从主题中得到错误
范围类的PasteSpecial方法失败
根据我的测试,似乎发生的情况是,在撤消操作开始之前,Excel 会自动将 Column1 和 Column2 添加到列 L 和 M,然后导致 Target 采用“Column1”和“ Column2",因此当我尝试在我要粘贴的实际值上运行它时最终导致错误。如果我将表格转换为正常范围,一切似乎都按预期运行。
我想了解为什么 Excel 会插入“Column1”和“Column2”,为什么它只会出现在另一个电子表格中的 5+ 个单元格中并发出,以及我如何能够在我的代码中解释这一点。
【问题讨论】: