Excel 2007 剪切和粘贴公式或值而不更改单元格格式 - 粘贴选项变灰

Excel 2007 剪切和粘贴公式或值而不更改单元格格式 - 粘贴选项变灰

我只需要剪切单元格内容而不改变源单元格格式,然后粘贴匹配的目标单元格格式...我认为这不是一个罕见的问题?

我已经搜索过,但谷歌搜索过滤气泡却一无所获。

选择性粘贴不适用于剪切?粘贴选项呈灰色。

我曾尝试录制一个宏,在剪贴板侧边栏打开的情况下进行复制(复制的值显示在那里),然后在我处于源单元格中时删除源单元格(保留格式),然后通过单击剪贴板项粘贴到目标单元格中​​。录制时可行,但录制的宏返回错误“Worksheet 类的 PasteSpecial 方法失败”。当项目在侧边栏中时,实际的剪贴板已被清空。

似乎有一些可行的解决方法:1:阻止 excel 清空剪贴板(哪个天才想出了删除剪贴板的主意?我想我们只是幸运他们在使用 excel,而不是 windows 或 office...)2:以某种方式将剪切的文本粘贴为“值”或“公式”或“HTML”。3. 一个非常长的代码来设置范围、复制、粘贴、重新选择范围、删除、删除范围名称、重新选择目标范围!

如果能帮助解答这个谜语我将非常感激。

答案1

以下是不使用 VBA/Makros 的解决方法:

不要选择并剪切“整个”单元格,而是选择并剪切单元格的“内容”(首先选择单元格,然后,例如按 F2,然后按 Ctrl+A)。使用“剪切”后,单元格将为空,但格式不会改变。

粘贴时,目标单元格将保留其原始格式,但会从源单元格获取值/公式。如果您想将格式从源转移到目标,只需使用复制和粘贴(仅粘贴格式)。

答案2

完成了!在如何排除范围内的范围重叠?(移动单元格内容宏)

Sub E____MoveSelectedCellsContentsOnlyKeepFormats_Ctrl_M()

Application.CutCopyMode = False 'clears any existing copy mode
On Error GoTo EXITSUB 'exits if cancel clicked

    Dim RANGE_TO_COPY As Range 'define inputbox variable
    Dim CELL_TO_PASTE_TO As Range 'define inputbox variable

'-----------name SOURCE range = selected before macro started
    Set RANGE_TO_COPY = Selection 'is this necessary, when not using inputbox?
        COPYSOURCE = RANGE_TO_COPY.Address(False, False) 'name the inputbox selection as a range

'=========== inputbox to select PASTE destination
    Set CELL_TO_PASTE_TO = Application.InputBox("select top left cell of range to PASTE TO, with the mouse", Default:=Selection.Address, Type:=8)

'------------- assigns name to the selected DESTINATION range
    PASTERANGE = CELL_TO_PASTE_TO.Address(False, False) 'name the inputbox selection as a range

'=========== action = COPY SOURCE
    Range(COPYSOURCE).Copy

'======================PASTE TO DESTINATION
'DEFAULT: PASTE FORMULAS AND NUMBER FORMATS (MATCHES DESTINATION FORMAT, keeps date/ etc original):

    Range(PASTERANGE) _
    .PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'formulas+number format

'======DELETE SOURCE CELL CONTENTS - remove if COPY required
'------------ loop - from superuser - deletes source but NOT pasterange overlap
Dim rgLoop As Range, rgToDelete As Range
        For Each rgLoop In Range(COPYSOURCE).Cells
            If Intersect(rgLoop, Range(PASTERANGE).Resize(Range(COPYSOURCE).Rows.Count, Range(COPYSOURCE).Columns.Count)) Is Nothing Then
                If rgToDelete Is Nothing Then Set rgToDelete = rgLoop Else Set rgToDelete = Union(rgToDelete, rgLoop)
            End If
        Next rgLoop

        rgToDelete.ClearContents 'deletes contents keeps formatting

EXITSUB:

End Sub

:-)

相关内容