VBA复制下一列

我有一个Excel工作簿,有一个链接到外部来源的工作表,所以这张工作表不断添加新的列。 我想要一个VBA,它会自动将下一个列复制到右侧。 所以现在这是我的。

Sub copycolumns1() Sheets("Productivity").Select lMaxCoulmns = Cells(Columns.Count, "N").End(xlUp).Column Range(Range("N3"), Range("N3").End(xlDown)).Select Selection.Copy Sheets("Data").Select lMaxRows = Cells(Rows.Count, "D").End(xlUp).Row Range("D" & lMaxRows + 1).Select ActiveSheet.Paste End Sub 

现在设置的方式是,当macros被激活时,它将只复制列“N”。 我希望脚本不断移动,所以当我运行脚本时,它会自动复制下一列“O”。

这可能吗?

你的主要问题是设置你的IMaxColumns 。 到目前为止,它只会返回N列,因为您已经使用了Cells() 。 尝试下面的内容:

 Sub copycolumns1() Dim prodWS As Worksheet, dataWS As Worksheet Dim lMaxColumns&, lMaxRows&, lastRow& Set prodWS = Sheets("Productivity") Set dataWS = Sheets("Data") With prodWS lMaxColumns = .Cells(1, .Columns.Count).End(xlToLeft).Column lastRow = .Cells(3, lMaxColumns).End(xlDown).Row .Range(.Cells(3, lMaxColumns), .Cells(lastRow, lMaxColumns)).Copy End With With dataWS lMaxRows = .Cells(.Rows.Count, "D").End(xlUp).Row .Range("D" & lMaxRows + 1).PasteSpecial End With Application.CutCopyMode = False End Sub 

一些事情要注意。
首先,请注意我是如何使用工作表variables来存储工作表的。 这将防止你或VB的部分混淆你正在使用的工作表。 请注意我是如何使用和. 设置范围。

其次,我删除了使用。select,这是最好的做法( 请参阅此线程的更多信息。)

另外,我更新了你的行来获取复制范围,因为你总是复制列“N”,因此你的lMaxColumns没有被使用。

最后,我解决了lMaxCoulmns问题。 你最初有Cells(Columns.Count, "N").End(xlUp).Column

Cells Cells([row],[column])的使用是Cells Cells([row],[column]) 。 所以,你设置行开始,作为列的数量(是否有道理?如果你只有三列,你将开始在第3行),然后上去…这可以让你在第1行

我保持接近你的原始VB,所以你可以看到我做了什么。 但是,您可以通过设置范围的值相等来进一步调整复制/粘贴的使用。 让我知道你是否感兴趣,我会告诉你如何。

这就是我要做的…未经testing…

 Sub CopyLastColumns1() Dim wsP as Worksheet, wsD as Worksheet, lastCol as Long, lastRow as Long, destLastCol as Long Set wsP = Sheets("Productivity") lastCol = wsP.Cells(1, wsP.Columns.Count).End(xlToLeft).Column lastRow = wsP.Cells(Rows.Count, lastCol).End(xlUp).Row wsP.Range(Cells(1, lastCol), Cells(lastRow, lastCol).Copy Set wsD = Sheets("Data") destLastCol = wsD.Cells(1, wsD.Columns.Count).End(xlToLeft).Column + 1 wsD.Cells(1, destLastCol).PasteSpecial xlPasteValues End Sub