在excel VBA代码中停止数据复制,将数据从一个工作表复制到另一个工作表

时间:2017-08-24 09:25:35

标签: excel vba excel-vba

我有以下代码,从工作表中记录每天最繁忙的小时,然后将其添加到另一个小时。

Sub DailySales()
Dim dailySht As Worksheet 'worksheet storing latest          store activity
Dim recordSht As Worksheet 'worksheet to store the   highest period of each day
Dim lColDaily As Integer ' Last column of data in the store activity sheet
Dim lCol As Integer ' Last column of data in the record sheet
Dim maxCustomerRng As Range ' Cell containing the highest number of customers
Dim CheckForDups As Range ' Used to find duplicate dates on the record Sheet
Dim maxCustomerCnt As Long ' value of highest customer count

Set dailySht = ThisWorkbook.Sheets("Supermarket Data")

Set recordSht = ThisWorkbook.Sheets("Record Data")
With recordSht
    lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
With dailySht
    lColDaily = .Cells(1, .Columns.Count).End(xlToLeft).Column
    maxCustomerCnt = Application.Max(.Range(.Cells(2, 1), .Cells(2, lColDaily)))
    Set maxCustomerRng = .Range(.Cells(7, 1), .Cells(7, lColDaily)).Find(What:=maxCustomerCnt, LookIn:=xlValues)
    If Not maxCustomerRng Is Nothing Then
        Set CheckForDups = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(x1ToLeft).Column).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:x1Values)
        If CheckForDups Is Nothing Then maxCustomerRng.EntireColumn.Copy recordSht.Cells(1, lCol + 1)
    End If
End With

Set maxCustomerRng = Nothing
Set dailySht = Nothing
Set recordSht = Nothing

End Sub

我添加了以下内容以防止数据重复,即一天内不应记录多个数据?

 Set CheckForDups = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft).Column).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:=xlValues)
            If CheckForDups Is Nothing Then maxCustomerRng.EntireColumn.Copy recordSht.Cells(1, lCol + 1)

然而,当我运行代码时,我收到“编译错误:语法错误”。突出显示以下行:

    Set CheckForDups = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(x1ToLeft).Column).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:x1Values)

这是第一张表的表格:

Customer data   7:00:00 AM  7:30:00 AM  8:00:00 AM  8:30:00 AM  9:00:00 AM  
Number of customers 33         37         110          250        84
Amount spent        65         50          70           85        60
Average time spent  12         10           8           17        10

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:3)

您的代码中存在拼写错误:x1Left应为xlLeftx1Values应为xlValues,并且应使用:=指定命名参数而不是:

但整个陈述不正确,这应该是这样的:

Set CheckForDups = .Range(.Cells(1, 1), .Cells(1, .Columns.Count).End(xlToLeft)).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:=xlValues)

在第二个Range参数中,您传递了一个列,用于传递单元格。因此,您不需要获取.Column属性,只需要移除.Column所获得的单元格本身。