首页 文章

如何防止Excel关闭复制选框

提问于
浏览
2

通常在用户选择范围并将其复制到剪贴板时使用excel,您会注意到它会激活源范围周围的选取框,有些人将此动画称为“行进 Ant ”选框 . 为了我的目的,我创建了一个简单的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

    好吧我没想到我会这么快得到答案,因为有人注意到Excel不允许你获得原始范围坐标的方法 . 是的,我相信这是真的,令人遗憾的是,我们不能做这么容易的事情,但作为程序员,我们必须做出应有的决定 . 这是我的问题的解决方案,我希望它有助于其他人:

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

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

    这是工作代码:

    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让我留下我的笔记......

相关问题