#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? Я думаю, что оба они получают значения из одного и того же листа, просто из разных ячеек, верно? Спасибо, старший.