Я импортирую файл csv, в котором есть ссылки на ячейки на листе. Ссылка на ячейку может быть неправильной, потому что пользователь однажды допустил ошибку при вводе ссылки на ячейку (например: вместо «AM1» пользователь написал «AMQ») или что-то другое пошло не так.

Проблема в том, что у меня есть более 1000 ссылок на ячейки, которые могут динамически изменяться, и возможна любая мыслимая ошибка, поскольку пользователь может писать в нее что угодно.

Я пытаюсь написать функцию, которая проверяет, действительна ли ссылка, но я не могу найти решение для проверки, существует ли ссылка на ячейку в excel.

Например, у меня есть этот код, но он всегда возвращает ошибку времени выполнения, потому что функция Range (rng) .Row не работает, если rng не является действительным вводом. Но как мне обойти это?

Это, как ожидается, всегда работает:

Sub Test()
    rng = "A1"
    flag = rangeExists(rng)
    debug.print flag
End Sub

Это не работает:

Sub Test()
    rng = "AQ"
    flag = rangeExists(rng)
    debug.print flag
End Sub

Функция:

Function rangeExists(ByVal rng As String) As Boolean
    
    Dim row_int As Integer
    
    row_int = Range(rng).Row
    On Error Resume Next
    
    If Err.Number <> 0 Then
        rangeExists = False
    Else
        rangeExists = True
    End If

    On Error GoTo -1

End Function

Я пытаюсь найти решение с помощью обработки ошибок в VBA, но не могу. Вы знаете, как это решить?

2
MathewN 25 Ноя 2021 в 04:12
1
Какое значение возвращает RangeExists ()? Похоже, он не возвращает никаких полезных данных. Позвольте мне перефразировать, какую функцию якобы идентифицирует? А что вы пытаетесь идентифицировать? Пустые ячейки, ошибка формулы, где отсутствует относительная ссылка?
 – 
Brett
25 Ноя 2021 в 05:44
Я пытаюсь скопировать значения и строки из файла CSV на рабочий лист. Предполагается, что функция определяет, является ли ссылка на ячейку в файле CSV теоретически правильной ссылкой на ячейку, например, A1 или AM58, но не AQ или A \ JA. Если это правильная ссылка, то эта функция должна возвращать логическое значение «истина», а если возвращаемое значение - истина, то другая функция (которая обрабатывает данные) не должна пропускать запись. Если это ложь, то функция должна пропустить эту строку со ссылкой на эту ячейку и отметить эту неправильную запись.
 – 
MathewN
25 Ноя 2021 в 05:54
Как я могу узнать, допустим ли это диапазон? Мне нужно было бы вернуть истину, если это допустимый диапазон, и ложь, если это не так. Я пытаюсь найти функцию или способ, с помощью которого я проверяю, действительна ли ссылка на ячейку в цикле.
 – 
MathewN
25 Ноя 2021 в 05:56

1 ответ

Лучший ответ

Это просто вернет True, если это допустимый диапазон, и False, если это не так.

Function IsRangeValid(ByVal rng As String) As Boolean
    Dim r As Range
    On Error Resume Next
    Set r = Range(rng)
    On Error Goto 0
    IsRangeValid = (Not r Is Nothing) ' parenthesis optional
End Function
2
braX 25 Ноя 2021 в 06:27