VBA # Значение ошибки в Excel 2010, но не в Excel 2016 - PullRequest
0 голосов
/ 21 января 2019

Итак, я написал следующий код на своем компьютере дома (с установленным Excel 2016), где он работает без проблем, но теперь, когда я пытаюсь использовать его на своей работе, Excel выдает ошибку #Value. Я попытался найти различия между Excel 2016 и 2010, но ничего не смог найти по моей проблеме.

Public Function comparex(a, b As Long) As Byte
Dim a1, a2, b1, b2, e, e1 As Long
Dim y As Integer
y = 1
a1 = a - 1000
a2 = a + 1000
b1 = b - 1000
b2 = b + 1000
Do Until Sheets(2).Cells(y, 3) = ""
    e = Sheets(2).Cells(y, 3).Value
    e1 = Sheets(2).Cells(y, 4).Value
    If a1 < e And a2 > e And b1 < e1 And b2 > e1 Then
        comparex = 1
        Exit Do
    Else
        y = y + 1

    End If

Loop
End Function

Обычно скрипт должен проверять, есть ли значения рядом с a и b в столбце на другом листе.

1 Ответ

0 голосов
/ 21 января 2019

Эта процедура должна работать для вас.Вместо байта он возвращает логическое значение, означающее «Истина» или «Ложь», что было бы более обычным, чем Байт.

Public Function CompareX(a As Long, b As Long) As Boolean

    Dim a1 As Long, a2 As Long
    Dim b1 As Long, b2 As Long
    Dim e As Long, e1 As Long
    Dim R As Long, Rl As Long

    y = 1
    a1 = a - 1000
    a2 = a + 1000
    b1 = b - 1000
    b2 = b + 1000

    With Sheets(2)
        Rl = .Cells(.Rows.Count, 3).End(xlUp).Row
        For R = 1 To Rl
            e = .Cells(R, 3).Value
            e1 = .Cells(R, 4).Value
            If a1 < e And a2 > e And b1 < e1 And b2 > e1 Then
                CompareX = True
                Exit For
            End If
        Next R
    End With
End Function

Хотя вышесказанное является более распространенным явлением.это не кажется очень полезным, если этот случай.По-видимому, вы пытаетесь найти строку, в которой выполнены все критерии.Разумным результатом, который можно ожидать, будет номер строки, где это было так.Для этой цели функция будет построена немного иначе, как показано ниже.

Public Function CompareX(a As Long, b As Long) As Long

    Dim a1 As Long, a2 As Long
    Dim b1 As Long, b2 As Long
    Dim e As Long, e1 As Long
    Dim R As Long, Rl As Long

    y = 1
    a1 = a - 1000
    a2 = a + 1000
    b1 = b - 1000
    b2 = b + 1000

    With Sheets(2)
        Rl = .Cells(.Rows.Count, 3).End(xlUp).Row
        For R = Rl To 1 Step -1
            e = .Cells(R, 3).Value
            e1 = .Cells(R, 4).Value
            If a1 < e And a2 > e And b1 < e1 And b2 > e1 Then
                CompareX = R
                Exit For
            End If
        Next R
    End With
End Function

Как видите, функция считает строку в обратном направлении.Если совпадений не было найдено, он вернет ноль, то есть, пока он возвращает число, совпадение было найдено.Однако, если совпадений больше, чем одного, номер строки будет соответствовать номеру последнего совпадения в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...