我在一个宏中有一些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最大行?
答案 0 :(得分:3)
我对此做了一些研究。知道它在1703年工作并且在1705年没有工作,我寻找了不同版本的更改日志。这就是我能找到的全部:
它说他们添加了一个名为“保留副本”的新功能“通过此更新,您可以复制您的单元格,在粘贴之前,您仍然可以执行其他任务,如键入或插入单元格。”设置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
并解决了这个问题。我希望其他人在这方面的知识中找到价值。