首页 文章

vba excel - 保留目标单元格格式

提问于
浏览
0

我对vba比较新,所以请温柔:)

我已经审查了各种脚本,当使用ctrl c / ctrl v或copy&paste时,这些脚本可能会保留电子表格中单元格的格式 . 不幸的是,我似乎无法让任何变化符合我的意图 . 我想这可能是因为复制和粘贴的大量数据正在从其他程序中复制并粘贴到工作表中(因此复制并保留程序的格式化) . 我尝试使用的所有宏似乎都试图在单元格/工作表或工作簿之间复制时保留格式,并且在从其他程序复制时不解决数据格式 .

我正在寻找另一种方法 . 从逻辑的角度来看,我认为在ctrl v或paste事件上应该有一种方法,将复制的数据存储为变量,去除其格式并仅粘贴原始值 . 我尝试过使用pastespecial,但我不确定如何强制使用pastespecial(或用pastetespecial替换粘贴) .

这是一些代码示例,但它似乎对我不起作用 . 我一直在:

无法运行宏“C:... Test.xlsm'!MyPaste' . 此工作簿中可能无法使用该宏,或者可能禁用所有宏

宏已启用,代码粘贴到[ThisWorkbook(Code)]

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim UndoList As String

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    On Error GoTo Whoa

    '~~> Get the undo List to capture the last action performed by user
    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1)

    '~~> Check if the last action was not a paste nor an autofill
    If Left(UndoList, 5) <> "Paste" And UndoList <> "Auto Fill" Then GoTo LetsContinue

    '~~> Undo the paste that the user did but we are not clearing the clipboard
    '~~> so the copied data is still in memory
    Application.Undo

    If UndoList = "Auto Fill" Then Selection.Copy

    '~~> Do a pastespecial to preserve formats
    On Error Resume Next
    '~~> Handle text data copied from a website
    Target.Select
    ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False

    Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    On Error GoTo 0

    '~~> Retain selection of the pasted data
    Union(Target, Selection).Select

LetsContinue:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

1 回答

相关问题