Ошибка с функцией копирования и вставки в сценарии - PullRequest
0 голосов
/ 29 ноября 2018

Мой скрипт ищет самые высокие значения в dailySht и вставляет значения в отдельный лист recordSht, который обычно работает нормально, но иногда я получаю ошибку Object variable or With block variable not set.Ниже приведена часть кода, которая возвращает ошибку.

Sub DailyBH()
    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 maxCustomerRng2 As Range ' Cell containing the highest number of customers
    Dim maxCustomerCnt As Double ' value of highest customer count

    Set dailySht = ThisWorkbook.Sheets("hourly KPI")
    Set recordSht = ThisWorkbook.Sheets("@BH KPI")
    With recordSht
        lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    End With

    With dailySht
        lColDaily = .Cells(1, .Columns.Count).End(xlToLeft).Column
        maxCustomerCnt = Round(Application.Max(.Range(.Cells(58, 1), .Cells(58, lColDaily))), 2)
        Set maxCustomerRng2 = .Range(.Cells(58, 1), .Cells(58, lColDaily)).Find(What:=maxCustomerCnt, LookIn:=xlValues)

        .Cells(4, maxCustomerRng2.Column).Copy
        recordSht.Cells(4, lCol + 1).PasteSpecial xlPasteValues
        recordSht.Cells(4, lCol + 1).PasteSpecial xlPasteFormats

        .Cells(22, maxCustomerRng2.Column).Copy
        recordSht.Cells(22, lCol + 1).PasteSpecial xlPasteValues
        recordSht.Cells(22, lCol + 1).PasteSpecial xlPasteFormats

        .Cells(40, maxCustomerRng2.Column).Copy
        recordSht.Cells(40, lCol + 1).PasteSpecial xlPasteValues
        recordSht.Cells(40, lCol + 1).PasteSpecial xlPasteFormats

        .Cells(49, maxCustomerRng2.Column).Copy
        recordSht.Cells(49, lCol + 1).PasteSpecial xlPasteValues
        recordSht.Cells(49, lCol + 1).PasteSpecial xlPasteFormats

        .Cells(58, maxCustomerRng2.Column).Copy
        recordSht.Cells(58, lCol + 1).PasteSpecial xlPasteValues
        recordSht.Cells(58, lCol + 1).PasteSpecial xlPasteFormats
    End With

    Set maxCustomerRng = Nothing
    Set dailySht = Nothing
    Set recordSht = Nothing
End Sub

Может кто-нибудь помочь мне выяснить, в чем проблема, поскольку код работает (копирует и вставляет правильные значения) в некоторых ячейках, а недругие.

1 Ответ

0 голосов
/ 29 ноября 2018

Я рекомендую использовать Match вместо Find и использовать результат Max напрямую, без преобразования его в Double, чтобы избежать неточностей с плавающей запятой.

With dailySht
    lColDaily = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Dim SearchRange As Range
    Set SearchRange = .Range(.Cells(58, 1), .Cells(58, lColDaily))

    Dim MaxCol As Long
    On Error Resume Next 'next line throws error if nothing matched
    MaxCol = Application.WorksheetFunction.Match(Application.WorksheetFunction.Max(SearchRange), SearchRange, 0)
    On Error GoTo 0 're-enable error reporting !!!

    If MaxCol = 0 Then
        'nothing was found
        Exit Sub
    End If

    .Cells(4, MaxCol).Copy
    'your stuff here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...