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

时间:2017-06-09 16:06:40

标签: vba excel-vba excel-2016 excel

我在一个宏中有一些VBA代码在Excel 2016中使用更新1703正常工作。但是,一个用户只有新的更新(1705),现在这个宏给出了一个" 1004应用程序/对象未知&# 34;错误。错误发生在这段代码中,特别是在第二个Selection.Offset(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最大行?

1 个答案:

答案 0 :(得分:3)

我对此做了一些研究。知道它在1703年工作并且在1705年没有工作,我寻找了不同版本的更改日志。这就是我能找到的全部:

https://support.office.com/en-us/article/What-s-new-in-Excel-2016-for-Windows-5fdb9208-ff33-45b6-9e08-1f5cdb3a6c73#Audience=Office_Insiders

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

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

我改变了我的代码:

    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

并解决了这个问题。我希望其他人在这方面的知识中找到价值。