在excel VBA代码中停止数据复制,将数据从一张纸复制到另一张纸上

我已经得到了下面的代码,logging每天最繁忙的时间,并将其添加到另一个。

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 

我添加了以下内容来防止数据重复,也就是说不应该在一天内logging多个数据?

  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 

有人能告诉我我做错了什么吗?

在代码中有一些拼写错误: 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获得的单元格本身。