VBA代码不适用于所有工作表

时间:2017-08-24 11:54:06

标签: 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(xlToLeft)).Find(What:=maxCustomerRng.Offset(-1, 0).Value, LookIn:=xlValues)
        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

该表格式如下:

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 :(得分:1)

3个选项为什么它不起作用:

  • 您在标签名称中有一个空格,但您没有意识到它(参见图片) enter image description here
  • 你的图表名称与表格完全相同(但我怀疑!)
  • 表格中的格式不同。看一下这里的硬编码值(2,1,7等)并检查 它是否有意义:
maxCustomerCnt = Application.Max(.Range(.Cells(2, 1), .Cells(2, lColDaily)))
Set maxCustomerRng = .Range(.Cells(7, 1), .Cells(7, lColDaily)).Find(What:=...