Excel 如何避免将重复范围从一个工作表粘贴到另一个工作表
我想将数据从名为“copySheet”的工作表复制到名为“pasteSheet”的工作表中的第一个空白行 如果copySheet单元格A2中的数据位于pasteSheet的第一列,则提供错误消息“数据已存在,请避免粘贴”,否则将复制范围从copySheet粘贴到pasteSheet 然而,若循环不能正常工作,我已经编写了如下代码。在pasteSheet的第一列中找到A2单元格中的值,但代码忽略循环并再次粘贴范围Excel 如何避免将重复范围从一个工作表粘贴到另一个工作表,excel,vba,range,copy-paste,Excel,Vba,Range,Copy Paste,我想将数据从名为“copySheet”的工作表复制到名为“pasteSheet”的工作表中的第一个空白行 如果copySheet单元格A2中的数据位于pasteSheet的第一列,则提供错误消息“数据已存在,请避免粘贴”,否则将复制范围从copySheet粘贴到pasteSheet 然而,若循环不能正常工作,我已经编写了如下代码。在pasteSheet的第一列中找到A2单元格中的值,但代码忽略循环并再次粘贴范围 Sub Macro1() ' ' Macro1 Macro ' Dim copySh
Sub Macro1()
'
' Macro1 Macro
'
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Set copySheet = Worksheets("Sheet1")
Set pasteSheet = Worksheets("Sheet2")
copySheet.Columns("A:D").Select
Selection.ClearContents
ActiveSheet.Paste Destination:=copySheet.Range("A1")
Dim FoundRange As Range
Dim Search As String
Search = copySheet.Cells(2, 1).Select
Set FoundRange = pasteSheet.Columns(0, 1).Find(Search, LookIn:=xlValues, LookAt:=xlWhole)
If Foundcell Is Nothing Then
Dim N As Long
N = copySheet.Cells(1, 1).End(xlDown).Row
Range("A2:E" & N).Select
Selection.Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Else
MsgBox "Data Exists" & " data found at cell address " & Foundcell.Address
End If
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
试试这个。您的代码存在一些问题:
- 如上所述,您的
语法已关闭列
- 您定义了
,但随后引用了FoundRange
——使用Option Explicit标记这些错误FoundCell
尽可能选择
pasteSheet.Columns(0,1)
不正确。它应该在哪里搜索?谢谢你纠正我的错误。这真的很有帮助。然而,我现在得到了一个不同的错误。我已经复制了内容,在清除A:D列中的内容后,这些内容将粘贴到copySheet中,然后使用搜索变量。当我执行代码时,它会显示“粘贴特殊方法”或“范围类失败”。有什么建议可以消除这个错误吗?我注意到您的原始代码有一个粘贴行,但没有复制行。粘贴前需要先复制。是的,这是正确的。我正在将表格中的数据复制为交叉表。从Tableau复制后,我正在清除copySheet中的内容,然后将其粘贴到那里。最后,我在Excel中添加了一个虚拟工作表来粘贴内容。不过,如果你有更好的想法,请告诉我。好的,我认为画面方面可能是一个单独的问题。但是如果粘贴成功,你可以把它添加到上面。我本以为有更好的方法连接Tableau和Excel,但我对前者知之甚少。是的,我使用了这一行,它工作得非常好。再次感谢您的指导,并将尽可能避免在VBA代码中使用Select语句。
Option Explicit
Sub Macro1()
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Set copySheet = Worksheets("Sheet1")
Set pasteSheet = Worksheets("Sheet2")
With copySheet
.Columns("A:D").ClearContents
Dim FoundRange As Range
Dim Search As String
Search = .Cells(2, 1)
Set FoundRange = pasteSheet.Columns(1).Find(Search, LookIn:=xlValues, LookAt:=xlWhole)
If FoundRange Is Nothing Then
Dim N As Long
N = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("A2:E" & N).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Else
MsgBox "Data Exists" & " data found at cell address " & FoundRange.Address
End If
End With
End Sub