防止在Excel中复制粘贴

嗨,所有的菜鸟又回来了。 我正在做一个从一个工作表到另一个隐藏的数据的复制粘贴工作,但有一个危险的是,如果不检查已经粘贴的数据将被复制。 到目前为止,我所做的是在我要复制的工作表中插入一个代码来停止重复,但是现在我所遇到的复杂情况是,validation是从头到尾检查整个列中的每一个数据位,这是约5000 <条目。 B列的报表date对于属于同一个月末的所有条目都是相同的。 因此,它将有30/1/13 … 5000与另外28/02/13等条目。理想情况下,我只想在列B中检查一次报告dateinput,如果date匹配我想复制,然后拒绝整个复制粘贴过程,而不是validation复制范围中的每个单独的条目。 这是我正在使用的代码。 我希望我有道理,非常感谢你的帮助。

Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range Dim ans As String Const myCol As Long = 2 If Intersect(Target, Columns(myCol)) Is Nothing Then Exit Sub Application.EnableEvents = False For Each r In Intersect(Target, Columns(myCol)) If Application.CountIf(Columns(myCol), r.Value) > 1 Then MsgBox (r.Value & " already exsists") r.ClearContents End If Next Application.EnableEvents = True End Sub 

这是我的代码,包括删除重复,但它没有工作。 我已经尝试过了

 Sub LoadData_toTable() Dim ws1LRow As Long, ws2LRow As Long Dim ws1 As Worksheet, ws2 As Worksheet Application.ScreenUpdating = False Set ws1 = ThisWorkbook.Sheets("RAW DATA") Set ws2 = ThisWorkbook.Sheets("DATA INPUT") With ws1 ws1LRow = .Cells.Find(What:="*", _ After:=.Range("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False).Row + 1 End With With ws2 ws2LRow = .Range("G" & .Rows.Count).End(xlUp).Row .Range("A2:AR" & ws2LRow).Copy ws1.Range("A" & ws1LRow).PasteSpecial xlPasteValues Application.CutCopyMode = False Application.ScreenUpdating = True End With With ws1 ws1.Range("A:A").RemoveDuplicates End With For Each WS In ThisWorkbook.Worksheets For Each PT In WS.PivotTables PT.RefreshTable Next PT Next WS MsgBox "Loading month's data complete!" End Sub 

一个非常长的计算时间解决scheme是创build一个只包含与表中已经存在的数据不同的数组的数组(您将不得不迭代每个复制的元素并与隐藏表中的每个元素进行比较)。

否则,你可以用某种方式格式化复制的数据,然后迭代和删除除第一个之外的所有格式化的数据(你将像以前那样重新格式化)。 例:

 Selection.NumberFormat = "0.0 ""double""" '<--- this could be made also with colors Selection.FormatConditions.AddUniqueValues Selection.FormatConditions(Selection.FormatConditions.count).SetFirstPriority Selection.FormatConditions(1).DupeUnique = xlDuplicate ExecuteExcel4Macro "(2,1,""0.0 ""double"""")" Selection.FormatConditions(1).StopIfTrue = False 

然后在迭代中

 cells(x,y).select if counted_formatted_data = 1 then Selection.NumberFormat = "0.0 " '<--- back to the previous formatting else selection.delete end if 

当然,如果你没有select任何东西,这样做会更好。