Проверка значений в двух разных файлах в VBA

#excel #vba

#excel #vba

Вопрос:

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

Однако я получаю сообщение об ошибке. «Ошибка компиляции: vInvalid Следующая ссылка на управляющую переменную», и она выделяется Next x . Почему?

 Sub ButtonSearch_Click()

Application.ScreenUpdating = False

' Name of columns to be found
JiraColumns = Array("CRM#", "status", "Key", "Resolution", "Assignee", "Customer Name", "Company")
SparksColumns = Array("QCCR", "Hpsw Status")

' Define boundaries
For x = LBound(JiraColumns) To UBound(JiraColumns)
    For y = LBound(SparksColumns) To UBound(SparksColumns)

        ' Search for column names on general_report Sheet
        With oWB.Sheets("general_report")
            Set foundRange = .Cells.Find(What:=JiraColumns(x), After:=.Cells(1, 1), _
                                         LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlRows, _
                                         SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
        End With

        If foundRange Is Nothing Then
            ' Missing Column
            intRow = 1
            MsgBox "Jira is missing Column: " amp; (JiraColumns(x))
            oWB.Close False
            Exit Sub
        Else
            Count = Count   1
        End If

    Next x

    ' *** *** Sparks verification *** ***  SECOND FILE, SECOND FILE, SECOND FILE *** *** ***

    With sWB.Sheets("Sample-Sparks")
        Set foundR = .Cells.Find(What:=SparksColumns(y), After:=.Cells(1, 1), _
                                 LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlRows, _
                                 SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
    End With

    If foundR Is Nothing Then
        ' Missing Column
        intRow = 1
        MsgBox "Sparks is missing Column: " amp; (SparksColumns(y))
        sWB.Close False
        Exit Sub
    Else
        CountS = CountS   1
    End If

Next y

If Not foundRange Is Nothing Then foundRange.Activate
If Not foundR Is Nothing Then foundR.Active

' close the source workbook without saving any changes
oWB.Close False

' free memory
Set wbFind = Nothing

' Show activity on screen
Application.ScreenUpdating = True

End Sub
  

Комментарии:

1. Правильное расположение отступов в коде поможет сделать этот тип ошибки очевидным… Посмотрите, как я сделал отступ в вашем коде в вашем вопросе. Тогда очевидно, что вы поменяли Next x местами и Next y .

2. Пожалуйста, не меняйте свой вопрос после того, как на него был дан ответ… Если у вас возникла новая проблема, задайте новый вопрос. Я откатил ваши изменения.

Ответ №1:

Вы перепутали свои последующие циклы. Ваш цикл y должен быть вложен в ваш цикл x. Т.е.

 For x = LBound(JiraColumns) To UBound(JiraColumns)
    For y = LBound(SparksColumns) To UBound(SparksColumns)
    '...code...
    Next y
'...code...
Next x
  

Другая проблема, связанная с ошибкой в строке SFile = Worksheets("Sheet1").Range("F17").Value , возникает из-за того, что вы в строке перед этим открываете файл по JFile пути. Поскольку JFile теперь вы ActiveWorkook и эта книга не содержат листа с именем Sheet1 , вы получаете сообщение об ошибке.

При работе с несколькими книгами необходимо следить за тем, какая книга является активной. Вы могли бы объявить свои книги такими (в данном случае ActiveWorkbook ):

 Dim ActWB As Workbook
Set ActWB = ActiveWorkbook
  

А затем получите sFile значение, подобное:

 sfile = ActWB.Sheets("Sheet1").Range("F17").Value
  

Аналогично, на ячейки в JFile можно ссылаться как (например): oWB.sheets("Test").range("A1").value

Комментарии:

1. Хорошо, я попробовал, и теперь у меня есть сообщение об ошибке «Ошибка времени выполнения ‘9’ Нижний индекс вне диапазона» Это сообщение об ошибке кажется очень распространенным

2. Трудно сказать, не зная точно, в какой строке возникает ошибка.

3. Да, я сожалею, что отредактировал свой код. Спасибо за вашу помощь, старший.

4. Похоже, что нет листа с именем Sheet1

5. Ну, если первый JFile может его найти, почему не sFile? Я думаю, что оба они получают значения из одного и того же листа, просто из разных ячеек, верно? Спасибо, старший.