宏:将范围复制到下一个连续的空白列

时间:2017-11-02 05:34:20

标签: excel vba excel-vba

大家。新手在这里。

我尽我所知并且能够通过数百个宏代码,允许用户专门点击按钮将范围复制并粘贴到下一个空白列中,并且不断粘贴新列当用户点击按钮时。不幸的是,所创建代码的目的的微小变化将有所不同。我无法理解为什么。

昨晚我已经成功完成了累积奖金并让它完美无缺地工作,直到它因为某些原因而崩溃,就像我保存文件一样。之后它没用。

目标:出于分析目的,C9:C43中的范围将始终作为基准年数据存在。如果用户有一年的数据,则无需复制。如果用户有5年的数据,用户将单击该按钮5次。副本将包括格式,公式和列宽。

此外,考虑到列C中的范围是基数,单元格C9将类似于年份,即2015年。如果用户将C9更改为例如2010,则下一列将具有D9 = 2011,依此类推。

我认为对话框将更好地代表我正在研究的目标,但似乎对我目前对Macros和VBA的理解有些牵强。

这是我昨晚使用的代码,它在保存文件后神秘地崩溃之前使其正常工作:

Dim rngSource As Range
Dim rngDestination As Range

Set rngSource = Range("C9:C43")
Set rngDestination = Cells(9, Columns.Count).End(xlToLeft).Offset(0, 1)

Range("C9:C43").Copy
Range("D9").Select

    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

Range("D9").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]+1"

rngSource.Copy destination:=rngDestination

你们很棒,你的工作和合作深受赞赏。

热烈的问候,

1 个答案:

答案 0 :(得分:1)

虽然这并没有回答有关冻结代码的问题,但我相信它可能会帮助您解决在系列中复制列的基本问题

如果您使用单元格A1为用户指定他们想要添加的列数,那么按下按钮可以调用range.autofill并使用系列填充(这适用于当年但我不确定是什么你在那个顶行之下)

Sub Button_Click()

Dim x As Integer    
x = Range("A1").Value
Range("C9:C43").AutoFill Destination:=Range("C9:" & Cells(43, x + 3).Address), Type:=xlFillSeries

End Sub