Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
插入新列时,更新1705后Excel 2016 VBA宏中断_Vba_Excel_Excel 2016 - Fatal编程技术网

插入新列时,更新1705后Excel 2016 VBA宏中断

插入新列时,更新1705后Excel 2016 VBA宏中断,vba,excel,excel-2016,Vba,Excel,Excel 2016,我在宏中有一些VBA代码,它在Excel 2016和更新1703中运行良好。然而,一个用户刚刚进行了新的更新(1705),现在这个宏给出了一个“1004应用程序/对象未知”错误。错误发生在这段代码中,特别是在第二个选择处。偏移量(1,0)。选择行 'Get the values from the first column Range("A2 : A" & NumRows).Select Selection.Copy 'Paste the copy once for each column

我在宏中有一些VBA代码,它在Excel 2016和更新1703中运行良好。然而,一个用户刚刚进行了新的更新(1705),现在这个宏给出了一个“1004应用程序/对象未知”错误。错误发生在这段代码中,特别是在第二个选择处。偏移量(1,0)。选择行

'Get the values from the first column
Range("A2 : A" & NumRows).Select
Selection.Copy
'Paste the copy once for each column containing data
For I = 2 To NumCols
    Range("A2").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select
    ActiveSheet.Paste
Next
'Insert a new column at the front of the worksheet
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
'Get the first data column header and copy it
Range("C1").Select
Selection.Copy
'Paste the selection into the first column
Range("A2:A" & NumRows).Select
ActiveSheet.Paste
'Get and copy the rest of the headers
For I = 1 To NumCols
    Range("C1").Select
    Selection.Offset(0, I).Select
    Selection.Copy
    For C = 2 To NumRows
        Range("A2").Select
        Selection.End(xlDown).Select
        Selection.Offset(1, 0).Select
        ActiveSheet.Paste
    Next
Next
我注意到1703和1705计算机之间的一点是,在1703上插入的新列为空,而在1705上,新列的值一直到最大行数(行数>100万)


所以我想我的问题是,如何插入新列而不让数据填满所有行直到Excel最大行?

我对此做了一些研究。知道它在1703年起作用,但在1705年不起作用,我为不同的版本寻找了一个变更日志。这就是我所能找到的:

它说,他们添加了一个名为“保留副本”的新功能,“通过此更新,您可以复制单元格,在粘贴之前,您还可以执行其他任务,如键入或插入单元格。”VBA代码设置为选择一列,然后在其前面插入一个新(空)列。但是,由于以前复制过单元格,新功能保留了单元格并将其插入到新列中,用值填充整个列(超过一百万行)

因此,由于我注意到旧版本在新创建的列中没有值,我认为“保留副本”功能可能是罪魁祸首。在创建新列之前,我搜索了Stack Overflow,寻找清除剪贴板内容的方法(谢谢!)

我更改了以下代码:

    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight
为此:

Application.CutCopyMode = False 'Clears any copied cells so they do not get inserted into the new column
Columns("A:A").Select
Selection.Insert Shift:=xlToRight

这就解决了问题。我希望其他人能从这些知识中找到价值

第一件事。看见修改代码,然后让我们知道您是否仍然面临问题更新前代码正常工作,并通过Excel中的“录制宏”功能录制。你链接的帖子似乎表明它会提高绩效。因此,感谢您尝试帮助我提高性能,但这并不是我要解决的问题。您似乎错过了我在那篇文章中的答案:)
。Select
非常不可靠,可能会导致运行时错误:)非常感谢!这让我发疯,完全破坏了我帮助维护的旧程序的功能,该程序在所有以前版本的Excel中都能正常工作。我们开始认为这是一个错误。说真的,微软的一个愚蠢的举动就是添加这个,并将其默认设置为打开。