Excel中如何用VBA实现将数据复制粘贴时的倒叙排列

我想做一个快捷键,如ctrl+shift+x,实现以下功能:
随便选择某一区域的数据并复制后(如:a,c,b),在空白处按下该快捷键,可以得到倒叙排列的粘贴结果(b,c,a)。数据区域没有任何列数或格式限制。当数据区域为多行时,即将所有列倒序。

Sub MacRo()
Dim I%, Ro%, Ron%, Co1%, Co2%
If IsEmpty(Selection) Then
ActiveSheet.Paste
Ro = Selection.Row
Ron = Selection.Rows.Count
Co1 = Selection.Column
Co2 = Co1 + Selection.Columns.Count - 1
Application.CutCopyMode = False
Rows(Ro & ":" & Ro + Ron - 1).Insert Shift:=xlDown
For I = 1 To Ron
Range(Cells(Ro + Ron * 2 - I, Co1), Cells(Ro + Ron * 2 - I, Co2)).Cut Destination:=Cells(Ro + I - 1, Co1)
Next I
Selection.Cut Destination:=Range(Cells(Ro + Ron, Co1), Cells(Ro + Ron, Co2))
Rows(Ro & ":" & Ro + Ron - 1).Delete Shift:=xlDown
End If
End Sub
看看以上代码能否满足你的要求,快捷键只能自己设定。有疑问请追问追问

试过了,不行。复制数据后,移至空白单元格点击宏,没有反应。

追答

不可能有问题,我调试通过的。
操作:选中单元格(连续矩形块)复制后,再选中空白单元格后执行宏就行。
也许你的空白单元格不是真正空白,可将第3句改为:If Trim(Selection) = "" Then
这样改后要求复制后选空白单元格时只能选一个单元格,否则要出错。

追问

还是不行,显示如下错误:
Run-time error '1004':
Paste method of Worksheet class failed
能否帮我贴个你做的Excel附件,或者发到我邮箱airmanpu#163.com(#换为@)

追答

文件发到你邮箱了

追问

还是不行,运行还是报错,如果debug的话,黄色报错部分为ActiveSheet.Paste

追答

我又试了几次,都没有问题。如果先没有进行复制操作或复制已失效这句才会出错。也许你的文件中有选中单元格事件使复制失效了。
你用我发的文件运行都不行吗?

追问

不行的,我用的就是你直接发的那个。

追答

我这里运行正常,你的不行,真是怪了。你的EXCEL版本多少?
加我QQ聊吧

追问

是2007版本的,2010版本的我也试过了,也不行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-24
应该没有这样的快捷方式,只是单纯只想将一列或一行的数据复制后倒序排列是可以通过自定义宏实现。
第2个回答  2013-06-24
建议你用录制宏自己录制 然后设置快接键的时候你按下ctrl+f8再找到你录制的宏-选项设置快捷键