VBA Как обработать ошибку при установке переменной? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь создать макрос для просмотра заголовков на одном листе и заголовков на другом, чтобы скопировать данные, но не все заголовки находятся на втором листе, что приводит к тому, что переменная блока не устанавливает ошибку. Я пытался включить проверку ошибок, чтобы пропустить значение, если оно пустое, но оно отказывается воспроизводиться. TD и RawData являются глобальными переменными. Мой код ниже:


Dim FromCol As Integer
Dim ToCol As Integer
Dim RawRows As Integer
Dim TDCols As Integer
Dim i As Integer
Dim element As Variant

'set variables
RawRows = (RawData.Cells.Find(What:="*", SearchDirection:=xlPrevious).Row) - 1
TDCols = TD.Cells(1, Columns.Count).End(xlToLeft).Column

Dim colArray(200) As String

For i = 2 To (TDCols + 1)
    colArray(i) = TD.Cells(1, i).Value
Next i

'Copy Data
For Each element In colArray
        FromCol = RawData.Range("1:1").Find(element, LookIn:=xlValues, lookat:=xlWhole).Column
        ToCol = TD.Range("1:1").Find(element, LookIn:=xlValues, lookat:=xlWhole).Column

        For i = 2 To (RawRows + 1)
            TD.Cells(i, ToCol).Value = RawData.Cells(i, FromCol).Value
        Next i
Next element

End Sub```


1 Ответ

5 голосов
/ 03 октября 2019

Ошибка является результатом того, как вы используете Find.

Когда вы делаете это ...

RawRows = (RawData.Cells.Find(What:="*", SearchDirection:=xlPrevious).Row) - 1

Вы непосредственно читаете номер строки возвращенного диапазонана Find. Это проблема, когда нет совпадения, потому что возвращаемый диапазон буквально равен Nothing. Вы не можете получить номер строки из ничего;и, таким образом, ваша ошибка.

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

Sub YourSub()
    Dim findInSheet As Worksheet
    Dim findResult As Range
    Dim rowNumber As Long
     [...]
    Set findResult = findInSheet.Range.Find( [...] )
    If Not findResult Is Nothing Then  'a match was found
        rowNumber = findResult.Row
         [...]
    Else  'a match was not found
       [...] 
    End If
     [...]
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...