如何防止Excel关闭复制选框

时间:2015-09-03 16:38:58

标签: excel excel-vba clipboard vba

正常情况下,当用户选择一个范围并将其复制到剪贴板时使用excel,您会注意到它激活了源范围周围的选框,有些人称这个动画为“蚂蚁”。选取框。为了我的目的,我创建了一个简单的VBA脚本,其中包含键盘快捷键Ctrl-T,它采用该剪贴板范围并特殊地将其值和格式粘贴到新选择的目标范围内。 (跳过它的备忘录以及我不需要粘贴到新系列的这些属性)。

如果我想添加到VBA脚本并让它也正确地证明目标范围文本,则会出现问题。问题是在我将代码添加到右对齐之后,然后关闭选取框并禁用源范围的剪贴板内容,以便将来任何Ctrl-T(我的宏)热键按下更多的目标范围。如果我没有在VBA的末尾添加额外的代码,那么我可以继续将源范围粘贴到电子表格的各个目标范围内,而无需重新选择我想要粘贴的原始源范围/单元格遍布电子表格。

简单的解决方案是重新选择目标范围并将其复制到剪贴板中,但由于我的情况下的源选择是单个单元格而目标单元格将是所有不同的范围,因此无法正常工作

以下是相关代码:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
With Selection
    .HorizontalAlignment = xlRight
End With

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

好吧我没想到我会这么快就得到答案,因为有人注意到Excel并不能让你获得原始范围坐标。是的,我相信这是真的,我们不能做一些如此简单的事情,但作为程序员,我们必须做出应有的努力。这是我的问题的解决方案,我希望它能帮助其他人:

只需更改复制键盘快捷键Ctrl-C的默认特征,并将其替换为您自己的子程序,该子程序执行标准复制,但也将对象保存为全局变量。这样,无论子程序进程是否关闭选取框并清除剪贴板内容,我们的自定义键盘热键序列都可以根据需要多次访问它。

在我同时拥有复制和粘贴特殊SUB程序的VBA模块中,我创建了2个全局变量,其中包含Source&目标对象。

以下是工作代码:

Public SourceCell As Range
Public DestinationCell As Range
Sub MyCopy()
'
' MyCopy Macro  (Make sure to set the macro shortcut option to Ctrl-C)
'

    Set SourceCell = Selection
    Selection.Copy

End Sub

Sub MyPaste()
'
' MyPaste Macro  (Make sure to set the macro shortcut option to Ctrl-T or our choice)
'
    Set DestinationCell = Selection
    SourceCell.Select
    Selection.Copy
    DestinationCell.Select
    'You can substitute your own paste code here
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    With Selection
        .HorizontalAlignment = xlRight
    End With
    'The two lines below are not necessary for our custom paste hotkey but It:
    '1) Recreates the marquee for standard Ctrl-V paste operations
    '2) Shows you what your original selection was in case you forgot
    SourceCell.Select
    Selection.Copy
    'Then add the following line so the screen doesn't shift back to source cell
    DestinationCell.Select
End Sub

所以基本上上面的VBA模块添加将允许你使用Ctrl-C来复制范围而Ctrl-T只能粘贴值&格式然后它将自动正确对齐。请记住,您要粘贴的内容的过程是用户可修改的。

感谢stackoverflow让我留下笔记......