我试图理解为什么某些代码在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个以上的值,我会从主题中得到错误
粘贴范围类的特殊方法失败
根据我的测试,似乎发生了这样的情况:在撤消操作开始之前,Excel会自动将Column1
和Column2
添加到列L和M中,这会导致Target
采用"第1列"one_answers"第2列",因此当我尝试在要粘贴的实际值上运行它时,最终会导致错误。如果我将表转换为正常范围,则所有内容都会按预期运行。
我想了解Excel为什么插入"第1列"one_answers"第2列",为什么它只在另一个电子表格的5个以上单元格中出现,以及我如何在代码中解释这一点。
我想了解为什么Excel、会插入"第1列"one_answers"第2列"
当粘贴现有ListObject
表附近的数据时,会发生这种情况。
发生更改事件(即"粘贴"数据),工作表发生更改,然后,Worksheet_Change
事件触发。
该错误的发生似乎是因为Application.Undo
正在撤消粘贴操作和,从而进一步影响Application.CutCopyMode = False
,因此在下一行中,当您尝试使用PasteSpecial
方法时,根本无法粘贴任何内容,因为Undo
已将其清除。
Pastespecial似乎对它输入的参数非常敏感。
在迁移到Windows 10之前,我遇到了来自代码的完全相同的错误消息。我发现这种参数组合在我的情况下有效:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
不能声称我找到了参数组合——它来自yatici的自答
尽管有一个变通方法,但亚蒂奇还是回到了最初的问题,并用pastespecial直接解决了这个问题。