如何防止excel关闭复制选框

Posted

技术标签:

【中文标题】如何防止excel关闭复制选框【英文标题】:How do I prevent excel from turning off the copy marquee 【发布时间】:2015-09-03 16:38:58 【问题描述】:

通常在用户选择一个范围并将其复制到剪贴板时使用 excel,您会注意到它会在源范围周围激活一个选取框,有些人将此动画称为“行军蚂蚁”选取框。出于我的目的,我使用键盘快捷键 Ctrl-T 创建了一个简单的 VBA 脚本,该脚本采用该剪贴板范围并将其值和格式特殊粘贴到新选择的目标范围中。 (跳过它的备忘录和我不需要粘贴到新范围的此类属性)。

如果我想添加到 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

感谢您的帮助。

【问题讨论】:

好问题 - 如果您包含复制单元格的行,我可以提供快速解决方法 不确定你的意思。如果问题是我如何复制单元格,那么该问题的答案是我在想出另一个想法之前使用了标准的 Ctrl-C 默认热键。这就是为什么我在下面输入的答案使用一种技术来创建我自己的“单元格复制”程序。那有意义吗?如果不解释,因为我确实在我的问题中留下了上面电子表格中的所有原始代码。谢谢 我只是建议对复制的单元格进行右对齐,之前复制它:SourceCell.HorizontalAlignment = xlRight,然后将其复制并粘贴为格式(@987654323 @) 【参考方案1】:

好的,我认为我不会这么快得到答案,因为有人指出 Excel 不允许您获取原始范围坐标。是的,我相信这是真的,很遗憾我们不能做这么简单的事情,但作为程序员,我们必须做出应有的贡献。这是我的问题的解决方案,我希望它可以帮助其他人:

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

在我拥有复制和粘贴特殊子例程的同一个 VBA 模块中,我创建了 2 个包含源和目标对象的全局变量。

这是工作代码:

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 仅粘贴值和格式,然后它会自动右对齐。请记住,您要粘贴的过程是用户可修改的。

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

【讨论】:

以上是关于如何防止excel关闭复制选框的主要内容,如果未能解决你的问题,请参考以下文章

C#/VB.NET 如何在 Excel 中添加水印

如何防止 OleDbDataReader.ExecuteReader 自动附加整数以复制列值

如何删除excel中数字上的隐藏引号,以防止更改格式

按键精灵逐条复制EXCEL到另一个程序上

防止 Word VBA 中的 Excel 提示

按键精灵如何把复制的数据写入到excel指定单元格中