|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Господа, доброго времени суток. Задача такова: Два файла(Excel) сравниваю на совпадения по нескольким столбцам одновременно и если совпадения нет то пишу в другой файл целиком строку(ну или первые 6сть ячеек строки). Следующий код выдает ошибку: Run-time error '1004' Application-defined or object-defined error. Ругается на строку "sB.Worksheets(1).Range(Cells(k, 1), Cells(k, 6)) = wB.Worksheets(1).Range(Cells(i, 1), Cells(i, 6)).Value" Собственно сам код: Sub CombiFiles() Dim myName As String, wB As Workbook With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите ПЕРВЫЙ файл для сравнения" .Show If .SelectedItems.Count = 0 Then Exit Sub myName = .SelectedItems(1) End With Application.ScreenUpdating = False Workbooks.Open Filename:=myName: Set wB = Workbooks(ActiveWorkbook.Name) Dim myName1 As String, wB1 As Workbook With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите ВТОРОЙ файл для сравнения" .Show If .SelectedItems.Count = 0 Then Exit Sub myName1 = .SelectedItems(1) End With Application.ScreenUpdating = False Workbooks.Open Filename:=myName1: Set wB1 = Workbooks(ActiveWorkbook.Name) Dim SaveFile As String, sB As Workbook With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файл для сохранения" .Show If .SelectedItems.Count = 0 Then Exit Sub SaveFile = .SelectedItems(1) End With Application.ScreenUpdating = False Workbooks.Open Filename:=SaveFile: Set sB = Workbooks(ActiveWorkbook.Name) Dim i As Long, j As Long, k As Long, Flag1 As Boolean i = 1: k = 1 Do While wB.Worksheets(1).Cells(i, 1) <> "" ' Проверяем в 1 файле на 1 листе строки 1-го столбца, от 1 до пустой, то есть до конца таблицы. j = 1: Flag1 = False ' Flag - это признак, что запись из Файла1 есть или нет в Файле2. Do While wB1.Worksheets(1).Cells(j, 1) <> "" ' Проверяем во 2 файле на 1 листе строки 1-го столбца, от 1 до пустой, то есть до конца таблицы. If wB.Worksheets(1).Cells(i, 3) = wB1.Worksheets(1).Cells(j, 75) And wB.Worksheets(1).Cells(i, 4) = wB1.Worksheets(1).Cells(j, 196) And wB.Worksheets(1).Cells(i, 5) = wB1.Worksheets(1).Cells(j, 22) Then Flag1 = True ' Нашли запись из Файла1 в Файле2, устанавливаем Flag в True j = j + 1 Loop If Flag1 = False Then ' Если запись из Файла1 не встретилась в файле2, то sB.Worksheets(1).Range(Cells(k, 1), Cells(k, 6)) = wB.Worksheets(1).Range(Cells(i, 1), Cells(i, 6)).Value ' Записываем ее в Файл3 k = k + 1 ' Переходим на следующую строчку в Файле3 End If i = i + 1 Loop MsgBox "Выполнение сравнения законченно успешно" End Sub Помогите понять причину ошибки, с VBA работаю совсем недавно может месяц, сам причину не понимаю. И еще если строку записываю в таком виде: sB.Worksheets(1).Cells(k, 1) = wB.Worksheets(1).Cells(i, 1).Value то нормально отрабатывает, но мне нужно писать в файл как минимум данные из 6ти ячеек в строке, а эта строка копирует только значение одной ячейки. I need you help! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 13:11 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Первое. К чему у вас относится Cells? Почему-то Worksheets и т.д. вы предваряете объектом (sB, wB), а Cells - нет Второе. Если нужно скопировать значения нескольких ячеек диапазона - либо перечисляйте их в цикле (For ... Next, For Each ... Next), либо используйте метод .Copy диапазона: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 13:27 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Учимся использовать тэги оформления кода - FAQ Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 13:29 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
AndreTMПервое. К чему у вас относится Cells? Почему-то Worksheets и т.д. вы предваряете объектом (sB, wB), а Cells - нет Второе. Если нужно скопировать значения нескольких ячеек диапазона - либо перечисляйте их в цикле (For ... Next, For Each ... Next), либо используйте метод .Copy диапазона: Код: vbnet 1.
Спасибо за совет. Попробовал эффект тот же, та же ошибка, только на вашей строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:04 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Сергей_Рота же ошибка, только на вашей строке.Так а первый-то пункт учли (что Cells надо тоже предварить квалификатором объекта, к которому относится диапазон)? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:36 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
AndreTMСергей_Рота же ошибка, только на вашей строке.Так а первый-то пункт учли (что Cells надо тоже предварить квалификатором объекта, к которому относится диапазон)? Можно вот тут поподробнее, так сказать на пальцах. Не очень понял фразу "Cells надо тоже предварить квалификатором объекта, к которому относится диапазон". Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:44 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Сергей_Ро, Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 14:59 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Shocker.ProСергей_Ро, Код: vbnet 1.
А если так? Код: vbnet 1.
и потом так? Код: vbnet 1.
Пройдет такой вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:15 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
Сергей_РоА если так? Код: vbnet 1.
и потом так? Тогда уж так Код: vbnet 1. 2. 3.
и т.д. Но вы ещё забыли про Cells в Copy Destination (которые тоже надо квалифицировать), а там ведь другой лист... С другой стороны, зачем заводить объектную переменную, чтобы использовать её только в одной строке? Компилятору-интерпретатору без разницы, какой длины код вы напишете, тем более, что вы его формируете программно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:25 |
|
Помогите понять причину ошибки в коде макроса VBA(Excel).
|
|||
---|---|---|---|
#18+
во-первых Код: vbnet 1. 2.
(определить переменную, добавить Set, убрать двоеточие - это тебе не паскаль и не сипипи во-вторых почему тогда и первую ссылку не заменить Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2013, 15:26 |
|
|
start [/forum/topic.php?fid=61&msg=38326682&tid=2174675]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 366ms |
total: | 496ms |
0 / 0 |