Excel VBA - 复制单元格值*无需*数据验证

Excel VBA - 复制单元格值*无需*数据验证

我在 Excel VBA 中将单元格从一个工作表复制到另一个工作表时遇到了一个小问题。源工作表包含存储在一行中的单个客户记录。目标工作表是此类记录的集合,逐行堆叠。为了保密起见,将它们分开保存很重要。

我创建了一个宏,将源复制到目标工作簿,从源复制单元格,然后将其粘贴到目标工作表的第一个空行中。由于它们都包含相同的信息,因此我对每个工作表中的相应单元格(主要是下拉列表)应用了相同的数据验证。

但是,源工作表和目标工作表来自不同的工作簿。当我将单元格从源复制到目标时,数据验证随之出现。粘贴到目标中的单元格现在引用源中的单元格来填充其下拉列表。每次打开目标时,链接通常会中断,从而破坏下拉列表并提示用户。

我想做的是复制在源单元格中,无需复制数据验证。就像我之前说的,每个工作表中的数据验证都是相同的(除了它们引用工作表的不同工作簿),所以所有值都应该验证。

下面是我复制的代码示例:

Sub copyNoValidation(wkbDestination as ThisWorkbook, oRange as Range, cellDest As Range)
    wkbDestination.Worksheets("Source").Range(oRange).Copy
    cellDest.PasteSpecial xlPasteValues
End Sub

感谢您的帮助!

答案1

复制然后删除目标中的任何 DV 都很容易:

Sub KopyPaste()
    Dim r1 As Range, r2 As Range
    Set r1 = Range("A1")
    Set r2 = Range("A2")
    r1.Copy r2
    r2.Validation.Delete
End Sub

答案2

使用 PasteSpecial 方法。

Dim firstSheet As Range, secondSheet As Range
Set firstSheet = Range("A1")
Set secondSheet = Range("A2")
firstSheet.Copy 
secondSheet.PasteSpecial Paste:=xlPasteValues

原因:当您正常复制粘贴验证时,目标单元格将保留旧验证,因为您使用第二个选项仅粘贴值而不包括验证。这是使用 VBA 代码完成的。

在此处输入图片描述

相关内容