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

Vba 宏:将范围复制到下一个连续空白列,vba,excel,Vba,Excel,各位。我是新手 我已尽我所知所能,浏览了数百个宏代码,这些宏代码允许用户专门单击一个按钮,将一个范围复制并粘贴到下一个空白列中,并且只要用户单击按钮,就可以继续粘贴新列。不幸的是,创建代码的目的的微小变化将有所不同。我不明白为什么 我昨晚成功地中了头奖,并使它完美地工作,直到它在我保存文件时由于某种原因崩溃。从那以后就没用了 目标:出于分析目的,C9:C43中的范围将始终作为基准年数据存在。如果用户有一年的数据,则无需复制。如果用户有5年的数据,用户将单击按钮5次。副本将包括格式、公式和列宽 此

各位。我是新手

我已尽我所知所能,浏览了数百个宏代码,这些宏代码允许用户专门单击一个按钮,将一个范围复制并粘贴到下一个空白列中,并且只要用户单击按钮,就可以继续粘贴新列。不幸的是,创建代码的目的的微小变化将有所不同。我不明白为什么

我昨晚成功地中了头奖,并使它完美地工作,直到它在我保存文件时由于某种原因崩溃。从那以后就没用了

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

此外,考虑到C列中的范围是基础,单元格C9将类似于2015年。如果用户将C9更改为(比如)2010,则下一列将显示D9=2011,依此类推

我原以为对话框可以更好地表达我正在努力实现的目标,但似乎与我目前对宏和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
你们太棒了,我们非常感谢你们的工作和合作


热情的问候,

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

如果用户使用单元格A1指定要添加的列数,则按下按钮可以调用range.autofill和series fill这一功能适用于全年,但我不确定顶行下面有什么

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

这仍然有效,excel可能由于某种奇怪的原因过载而崩溃,可能文件大小太大了。首先,它工作起来很有魅力!非常感谢!现在搜索一个按钮来删除多余的列!