我试图理解为什么某些代码在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
占用on" Column1"和#34; Column2"因此,当我尝试在我想要粘贴的实际值上运行它时,最终会导致错误。如果我将表转换为正常范围,一切似乎都按预期运行。
我想了解为什么" Column1"和#34; Column2" Excel正在插入,为什么它只是来自另一个电子表格中的5个以上的单元格,它变成了问题,以及我如何能够在我的代码中解释这一点。
答案 0 :(得分:0)
我想了解Excel为什么插入“Column1”和“Column2”,
将数据粘贴到现有ListObject
表旁边时会发生这种情况。
发生更改事件(即,您“粘贴”数据),工作表更改,然后,Worksheet_Change
事件将触发。
错误似乎发生,因为Application.Undo
正在撤消粘贴操作和进一步影响Application.CutCopyMode = False
,所以当您尝试使用{{1时<}方法,没有任何东西可以粘贴,因为PasteSpecial
已经清除了它。
答案 1 :(得分:-1)
Pastespecial似乎对它所喂食的参数非常敏感。
我在迁移到Windows 10之前的代码中遇到了完全相同的错误消息。我发现这种参数组合适用于我的情况:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
不能声称我发现了参数的组合 - 它来自yactici's self answer
尽管有一个解决方法并直接使用pastespecial解决问题,但感谢yactici回到他最初的问题。